

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

[code]

    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)
    
[/code]

まずは、viewsがロードされたときに呼ばれればいいと思い行いましたが  
出来ませんでした。

参考にならないかもしれませんが、、他の人のStackoverflowの質問も見ました。  
<https://stackoverflow.com/questions/28408960/how-to-get-the-notification-of-
payment-using-django-paypal>

ボタンを表示するためのindexページや、cancelやreturnにも  
このように行いましたが、うまく動きませんでした。

[code]

    @csrf_exempt
    def cancel(request):
        valid_ipn_received.connect(show_me_the_money)
    
        context = {}
        return render_to_response("eccomerce_webapp/cancel.html", context)
    
[/code]

質問をまとめますと、

１.これらのコードはどこに書けばshow_me_the_moneyがきちんと呼び出されるのでしょうか？

[code]

    valid_ipn_received.connect(show_me_the_money)
    invalid_ipn_received.connect(show_me_the_money)
    
[/code]

２.たとえ、show_me_the_moneyが呼ばれたとしても、  
このメソッド内でどうやって購入した人を確定できるのでしょうか？  
以下のように書いたとして、ipn_obj中に入ってるのでしょうか？

[code]

    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
    
[/code]

３．エラー時にテンプレートに値を表示させるにはどうすればよろしいのでしょうか？  
return_viewでWebページを返したとしてもそこでどのユーザなのか判定できないと思います。

[code]

    @csrf_exempt
    def return_view(request):
        valid_ipn_received.connect(show_me_the_money)
    
        context = {}
        return render_to_response("eccomerce_webapp/return.html", context)
    
[/code]

ご教示お願い致します。


CC BY-SA 3.0
2015-03-07T08:57:36.200
7580
2015-03-07T08:57:36.200
2017-05-23T12:38:56.083
-1
7934
question
python django paypal
django-paypal の 購入時の処理について　（Django 1.6でPayPalのIPN）