Safaricom Daraja: обнаружен дубликат json-ключа
Я внедряю Lipa na M-Pesa online от Safaricom. Однако, когда я делаю запрос, я получаю ошибку, говорящую, что обнаружены дубликаты json-ключей.
Полезная нагрузка:
payload = {
"BusinessShortCode": 174379,
"Password": "the password",
"Timestamp": "20220817050503",
"TransactionType": "CustomerPayBillOnline",
"Amount": 5,
"PartyA": 254714895622,
"PartyB": 174379,
"PhoneNumber": 254714895622,
"CallBackURL": "https://58fa-102-68-78-50.in.ngrok.io/api/v1/payments/callback/",
"AccountReference": "Payment",
"TransactionDesc": "Payment for K"
}
Заголовки:
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer access_token",
}
Запрос:
response = requests.request("POST", 'https://sandbox.safaricom.co.ke/mpesa/stkpush/v1/processrequest', headers=headers, data=payload)
Ответ, который я получаю:
{
'responseId': '82699-21939686',
'responseCode': '400',
'responseDesc': 'Duplicate json key detected'
}
Что может быть причиной этой ошибки и как я могу ее решить?
Проблема в заголовке, запрос передает Content-Type
по умолчанию,
избавление от него устраняет проблему.
Хотя это предусмотрено в примере кода M-pesa Daraja от Safaricom для python, попробуйте изменить эту часть так, чтобы она была; переименуйте body=payload
в json=payload
response = requests.request("POST",your-url, headers=headers, json=payload)
вместо
response = requests.request("POST", url , headers=headers, data=payload)
Удаление Content-Type
из заголовка, как было предложено, дало мне другую ошибку;
{'requestId': '12345-12345-1',
'errorCode': '400.002.02',
'errorMessage': 'Bad Request - Invalid BusinessShortCode'}
сработало для меня, надеюсь сработает и для вас
Следующие работы
import requests
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer DWbh63zkq7ZLagmNCSwnyvjA2kBQ'
}
payload = {
"BusinessShortCode": 174379,
"Password": "MTc0Mzc5YmZiMjc5ZjlhYTliZGJjZjE1OGU5N2RkNzFhNDY3Y2QyZTBjODkzMDU5YjEwZjc4ZTZiNzJhZGExZWQyYzkxOTIwMjIxMjIyMDUyOTQ5",
"Timestamp": "20221222052949",
"TransactionType": "CustomerPayBillOnline",
"Amount": 1,
"PartyA": 254712345678,
"PartyB": 174379,
"PhoneNumber": 254712345678,
"CallBackURL": "example.com/path",
"AccountReference": "CompanyXLTD",
"TransactionDesc": "Payment of X"
}
response = requests.request("POST", 'example.com/mpesa/stkpush/v1/processrequest', headers = headers, json = payload)
print(response.text.encode('utf8'))