Razor Pay Not Calling CallBack URL Python Django
В общем, всплывающее окно razorpay открывается, платеж проходит успешно, но url обратного вызова не происходит:
var options = {
"key": data.razorpay_key,
"amount": data.amount,
"currency": data.currency,
"name": "BusinessCard4U",
"image": "{{websitelogo.image.url}}",
"description": "Payment for digital card subscription",
"order_id": data.razorpay_order_id,
"callback_url": "{% url 'PaymentSuccess' %}",
"handler": function (response){
// Handle Razorpay success callback
},
"theme": {
"color": "#5EB9F0"
},
};
Это данные, которые я передаю... в них есть url обратного вызова, как вы можете видеть... но ничего не выводится и не вызывается. Я попробовал использовать переменную redirect: true, чтобы проверить, работает ли это, но в результате платеж не прошел.
Спасибо!
Насколько я знаю, тег шаблона {% url 'PaymentSuccess' %}
в Django генерирует относительный URL, а в callback_url в Razor Pay нужен абсолютный URL, URL примерно такой (измените в соответствии с вашей конфигурацией) "http://127.0.0.1:8000/razorpay/success/".
Итак, сначала попробуйте, предоставив статический абсолютный URL ("callback_url": "http://127.0.0.1:8000/razorpay/success/"
) и протестируйте процесс оплаты, работает ли он так, как вы ожидали Если он работает, вы можете создать динамический callback_url.
Ваши представления должны выглядеть примерно так:
Также убедитесь, что вы обработали метод POST-запроса. поскольку URL-адрес обратного вызова Razor Pay имеет свой метод и параметры, как показано в документации (https://razorpay.com/docs/payments/payment-gateway/callback-url/)
попробуйте, как показано ниже:
var options = {
... // existing options
callback_url: 'http://127.0.0.1:8000/payment-success/' // adjust URL as per your configuration,
redirect: true
}
Проверьте, что ваш вид чем-то похож.
@csrf_exempt
def callback(request):
if "razorpay_signature" in request.POST:
# If payment is successful
payment_id = request.POST.get("razorpay_payment_id", "")
provider_order_id = request.POST.get("razorpay_order_id", "")
signature_id = request.POST.get("razorpay_signature", "")
# your further code
return render("#your page redirect")
else:
payment_id = json.loads(request.POST.get("error[metadata]")).get("payment_id")
# your further code
return render("#your page redirect")