django-paypal の 購入時の処理について (Django 1.6でPayPalのIPN)
Django 1.6でdjango-paypalを使ってます。
PayPalのIPNを使用しています。
http://django-paypal.readthedocs.org/en/latest/standard/ipn.html
のドキュメントを参考にしました。
from paypal.standard.ipn.signals
のvalid_ipn_receivedとinvalid_ipn_receivedの
使い方がどうしても理解できません。
課金成功時に、valid_ipn_receivedで設定したメソッドが呼ばれ、
課金失敗時に、invalid_ipn_receivedが呼ばれるのかと思っています。
このようにメソッドを設定しました。
views.py
from paypal.standard.ipn.signals import valid_ipn_received, invalid_ipn_received
# 成功時
def show_me_the_money(sender, **kwargs):
print 'ok'
# エラー時
def error_show_me_the_money(sender, **kwargs):
print 'error'
valid_ipn_received.connect(show_me_the_money)
invalid_ipn_received.connect(error_show_me_the_money)
まずは、viewsがロードされたときに呼ばれればいいと思い行いましたが
出来ませんでした。
参考にならないかもしれませんが、、他の人のStackoverflowの質問も見ました。
https://stackoverflow.com/questions/28408960/how-to-get-the-notification-of-payment-using-django-paypal
ボタンを表示するためのindexページや、cancelやreturnにも
このように行いましたが、うまく動きませんでした。
@csrf_exempt
def cancel(request):
valid_ipn_received.connect(show_me_the_money)
context = {}
return render_to_response("eccomerce_webapp/cancel.html", context)
質問をまとめますと、
1.これらのコードはどこに書けばshow_me_the_moneyがきちんと呼び出されるのでしょうか?
valid_ipn_received.connect(show_me_the_money)
invalid_ipn_received.connect(show_me_the_money)
2.たとえ、show_me_the_moneyが呼ばれたとしても、
このメソッド内でどうやって購入した人を確定できるのでしょうか?
以下のように書いたとして、ipn_obj中に入ってるのでしょうか?
def show_me_the_money(sender, **kwargs):
ipn_obj = sender
if ipn_obj.payment_status == ST_PP_COMPLETED:
# Undertake some action depending upon `ipn_obj`.
payment = True
else:
payment = False
3.エラー時にテンプレートに値を表示させるにはどうすればよろしいのでしょうか?
return_viewでWebページを返したとしてもそこでどのユーザなのか判定できないと思います。
@csrf_exempt
def return_view(request):
valid_ipn_received.connect(show_me_the_money)
context = {}
return render_to_response("eccomerce_webapp/return.html", context)
ご教示お願い致します。