【问题标题】:django-paypal ipn works fine but signal is not receiveddjango-paypal ipn 工作正常,但没有收到信号
【发布时间】:2011-06-20 20:03:55
【问题描述】:

我的 models.py 文件末尾有这段代码

from paypal.standard.ipn.signals import payment_was_successful

def confirm_payment(sender, **kwargs):
    # it's important to check that the product exists
    logging.debug('** CONFIRMED PAYMENT ***') #never reached this point
    try:
        bfeat = BuyingFeature.objects.get(slug=sender.item_number)
    except BuyingFeature.DoesNotExist:
        return
    # And that someone didn't tamper with the price
    if int(bfeat.price) != int(sender.mc_gross):
        return
    # Check to see if it's an existing customer
    try:
        customer = User.objects.get(email=sender.payer_email)
    except User.DoesNotExist:
        customer = User.objects.create(
            email=sender.payer_email,
            first_name=sender.first_name,
            last_name=sender.last_name
        )
    # Add a new order
    CustomerOrder.objects.create(customer=customer, feature=bfeat, quantity=1, paypal_email=sender.payer_email, invoice=sender.invoice, remarks='')

payment_was_successful.connect(confirm_payment)

整个过程运行正常。付款完成。 return_url 和 cancel_url 工作正常。 notify_url 已通过 paypal 沙箱的测试工具进行了测试,并且工作正常。但是,从来没有收到信号。

信号代码放在 models.py 的末尾,django-paypal 代码放在我的项目目录中。

(代码从here“窃取”)

我一定是做错了什么。任何帮助将不胜感激!

【问题讨论】:

  • 您解决了吗?我在同一条路上行驶,除信号外一切正常。太令人沮丧了!
  • 不,我没有。我已经设法找到解决方法。我所做的是修改 paypal/standard/ipn/views.py 并添加我的代码来处理每个订单(就在 ipn_obj.save() 之后)dpaste.com/563990

标签: django django-paypal


【解决方案1】:

在 django-paypal 中有两个基本交易信号:

payment_was_successful
payment_was_flagged

您必须处理这两个信号。

【讨论】:

    【解决方案2】:

    我遇到了这个问题 - 在寻找了几个类似的问题后,我找到了适合我具体案例的解决方案。我在这里提到它,以防其他人撞到这堵墙。

    我还没有彻底研究过它,但它看起来似乎高度依赖于您从哪个版本/存储库获取 django-paypal 副本。具体来说,我下载的版本没有更新以适应 {% csrf_token %} 成语。为了让它工作,我必须将 @csrf_exempt 装饰器添加到两个视图中:

    1. paypal.standard.views 中的 ipn 视图
    2. 由我的 django paypal 字典中的返回 url 加载的视图(...如果您启用了调试,这会标记一个高度准确的错误)。

    【讨论】:

      【解决方案3】:

      django-paypal 在settings.INSTALLED_APPS 中吗?

      我没有看到任何其他原因导致信号不会被触发,否则。

      【讨论】:

      • 您好,谢谢。我已将这一行 'paypal.standard.ipn' 放在我的 settings.py 中。我还尝试了my_project.paypal.standard.ipn',因为贝宝位于我的项目文件夹中。这就是我在 urls.py 中的内容:(r'^hard/guess/$', include('paypal.standard.ipn.urls')),。关于 settings.py,paypal 应用程序应该在我的项目应用程序行之前还是之后?
      • 嗨,我还注意到paypal_ipn 表正在接收数据(即standard.ipn.views.py 中的ipn_obj.save(),有效)。只有字段flag_info 收到“无效的payment_status。(待处理)”文本。因此,如果 standard.ipn.views.py 正常工作,那么 installed_apps 和 urls.py 配置就可以了。因此,错误必须在其他地方。任何帮助将不胜感激!
      • 和别的东西。如何确定收到的是“payment_was_successful”信号而不是其他信号?
      • 我注意到在 IPN 历史记录中(在 paypal 中)请求属性 payment_status 是 Pending。这意味着什么?
      猜你喜欢
      • 2023-03-13
      • 2011-08-15
      • 2013-07-04
      • 1970-01-01
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      • 2012-05-15
      • 2014-05-30
      相关资源
      最近更新 更多