Я пытаюсь использовать django-paypal. Я следил за тем, что было упомянуто в Jay on Джанго
Вот что я сделал...
##in my view.py file
def ask_payment(request):
# What you want the button to do.
paypal_dict = {
"business": settings.PAYPAL_RECEIVER_EMAIL,
"amount": "0.10",
"item_name": "book",
"invoice": "yong138peng",
"notify_url": "http://127.0.0.1:8000/accounts/my-ipn-location/",
"return_url": "http://127.0.0.1:8000/accounts/my-return-location/",
"cancel_return": "http://127.0.0.1:8000/accounts/my-cancel-location/",
}
# Create the instance.
form = PayPalPaymentsForm(initial=paypal_dict)
context = {"PP_form": form}
return render_to_response("paypal/payment.html",{'PP_form':form},context_instance=RequestContext(request))
@csrf_exempt
def payment_status(request,status):
return render_to_response("paypal/payment_status.html",
{'status':status},context_instance=RequestContext(request))
##then in my urls.py file
(r'^askforpayment/$','coltrane.views.ask_payment'),
(r'^my-ipn-location/', include('paypal.standard.ipn.urls')),
(r'^my-return-location/$','coltrane.views.payment_status',{'status':'success'}),
(r'^my-cancel-location/$','coltrane.views.payment_status',{'status':'cancel'}),
##in my models.py
def show_me_the_money(sender, **kwargs):
ipn_obj = sender
print "payment was successful!"
# Undertake some action depending upon `ipn_obj`.
if ipn_obj.custom == "Upgrade all users!": ## what is this for, this is sent by paypal??
Users.objects.update(paid=True)
payment_was_successful.connect(show_me_the_money)
Мой вопрос:
Согласно jay on django , я должен поставить @csrf_exempt перед функцией paypay.standard.ipn.views.ipn, чтобы django не жаловался на проблему @csrf_token. Я сделал это, но я все еще сталкиваюсь с той же проблемой. Затем я помещаю @csrf_exempt перед функцией просмотра возвращаемого URL, в этом случае payment_status (запрос, статус), проблема с csrf_token исчезла. Поэтому я не уверен, почему это так.
для чего этот оператор в обработчике сигнала? "if ipn_obj.custom == "Обновить всех пользователей!": .... " Это исходит от paypay? Каковы возможные значения, кроме «Обновить всех пользователей?»
Мне удается совершить покупку и завершить весь процесс оплаты в песочнице. Но теперь проблема в том, что PayPal не отправляет IPN обратно на мой notify_url, который является локальным. Я прочитал из проблема IPN в песочнице Paypal, что я не могу использовать локальный хост (http://127.0.0.1:8000) для проверки IPN. Тогда какие шаги необходимы для тестирования? Я не понимаю решение, представленное в этом сообщении. Может ли кто-нибудь научить меня тестировать IPN без развертывания реального производственного сервера?