我正在开发这个 Django 应用程序,它应该根据从 API 发回的请求进行重定向,但无论响应如何,都没有任何反应,下面是一些片段,任何见解将不胜感激。
视图。
def callback(request):
if request.method == 'POST':
body_unicode = request.body.decode('utf-8')
response = json.loads(body_unicode)
print (response)
result_code = response["Body"]["stkCallback"]["ResultCode"]
if result_code == 0:
merchant_request_id = response["Body"]["stkCallback"]["MerchantRequestID"]
checkout_request_id = response["Body"]["stkCallback"]["CheckoutRequestID"]
result_code = response["Body"]["stkCallback"]["ResultCode"]
amount = response["Body"]["stkCallback"]["CallbackMetadata"]["Item"][0]["Value"]
mpesa_receipt_number = response["Body"]["stkCallback"]["CallbackMetadata"]["Item"][1]["Value"]
transaction_date = response["Body"]["stkCallback"]["CallbackMetadata"]["Item"][2]["Value"]
phone_number = response["Body"]["stkCallback"]["CallbackMetadata"]["Item"][3]["Value"]
str_transaction_date = str(transaction_date)
transaction_datetime = datetime.strptime(
str_transaction_date, "%Y%m%d%H%M%S")
aware_transaction_datetime = pytz.utc.localize(transaction_datetime)
our_model = Mpesa.objects.create(
CheckoutRequestID=checkout_request_id,
MerchantRequestID=merchant_request_id,
PhoneNumber=phone_number,
MpesaReceiptNumber=mpesa_receipt_number,
Amount=amount,
ResultCode=result_code,
TransactionDate=aware_transaction_datetime,
)
our_model.save()
return redirect('realtor:create')
else:
return redirect('payments:lipa_na_mpesa')
return render(request, 'callback.html')
回应。 这是视图从数据库收到的响应。
如果响应是 0
,它应该重定向到另一个页面,但似乎没有任何效果。
{
"Body": {
"stkCallback": {
"MerchantRequestID": "27475-4045648-1",
"CheckoutRequestID": "ws_CO_190220211418537911",
"ResultCode": 0,
"ResultDesc": "The service request is processed successfully.",
"CallbackMetadata": {
"Item": [
{
"Name": "Amount",
"Value": 1.0
},
{
"Name": "MpesaReceiptNumber",
"Value": ""
},
{
"Name": "TransactionDate",
"Value": 20210219141908
},
{
"Name": "PhoneNumber",
"Value":
}
]
}
}
}
}