【问题标题】:django-paypal setup for paypal web site pro (wpp) signal issuesdjango-paypal setup for paypal web site pro (wpp) 信号问题
【发布时间】:2026-01-23 14:30:01
【问题描述】:

我正在使用 dcramer 的 django-paypal 分支,并且到目前为止我一直成功地设置它。我试图将“paypal.pro.signals.payment_was_successful”连接到我编写的监听器,但它多次发送信号,这导致我的应用程序出错。我已经尝试将'dispatch_uid'添加到我的连接语句中,但它仍然多次发送......我做错了什么?我什至应该使用这个信号吗?

【问题讨论】:

  • 您能否更具体地了解您遇到的错误?我查看了源,这个信号被触发了多次,即。在views.py、helpers.py 等中

标签: django django-signals django-paypal


【解决方案1】:

解决方案是在将句柄连接到信号时添加一个 dispatch_uid 关键字 arg。有关示例,请参阅http://code.djangoproject.com/wiki/Signals#TipsandTroubleshooting

你的代码看起来像:

payment_was_successful.connect(paypal_payment_processed, dispatch_uid="something-rational-here")

【讨论】:

    【解决方案2】:

    目前非常简单。 我在我的应用程序的 init.py 中注册了信号

    在 init.py 中

    from paypal.pro.signals import payment_was_successful
    from listeners import paypal_payment_processed
    
    payment_was_successful.connect(paypal_payment_processed)
    

    在 listeners.py 中

    def paypal_payment_processed(sender, **kwargs):
       print 'signal called'
    

    那么我对 django-paypal 包装器的看法包含以下内容:

    def apartment_store_lease_step_4_content(request, apartment_id, lease_obj):
    
    item = {
        "amt": total,
        "custom": lease_obj.id ,
        "cancelurl" : "OMITTED",
        "returnurl" : "OMITTED"
    }
    
    ctx = {        
        "lease_purchase" : lease_obj,
        "contract" : contract
    }
    ctx.update(locals())
    
    
    kw = {
        "item" : item,
        "payment_template" : "OMITTED",
        "confirm_template" : "OMITTED",
        "success_url" :  "OMITTED",
        "context": ctx
    }
    
    ppp = PayPalPro(**kw)
    return ppp(request)
    

    【讨论】:

    • 一旦 PayPal 响应,我在输出中看到两次“调用信号”。
    • Hey Kaleb:您可能想要编辑原始问题,而不是通过答案发布代码;这样你会得到更好的结果。 :-)