django-paypal ipn工作正常,但没有收到信号

时间:2011-06-20 20:03:55

标签: django django-paypal

我在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''偷走')

我必须做一些完全错误的事情。任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:2)

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

payment_was_successful
payment_was_flagged

你必须处理这两个信号。

答案 1 :(得分:1)

我遇到了这个问题 - 并且已经针对一些类似的问题找到了针对我的具体案例的解决方案。我在这里提到它以防其他人撞到这堵墙。

我没有彻底研究过,但看起来它高度依赖于你从哪个版本/存储库中获取django-paypal的副本。具体来说,我下载的版本未更新以适应{%csrf_token%}惯用法。为了实现这一点,我必须将@csrf_exempt装饰器添加到两个视图中:

  1. paypal.standard.views中的ipn视图
  2. 我的django paypal字典中的返回网址加载的视图(...如果你有调试,这个标记了一个非常准确的错误。)

答案 2 :(得分:0)

django-paypal中有settings.INSTALLED_APPS吗?

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