1

我的 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 代码放在我的项目目录中。

(代码从这里“被盗” )

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

4

3 回答 3

2

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

payment_was_successful
payment_was_flagged

您必须处理这两个信号。

于 2011-08-09T23:07:52.943 回答
1

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

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

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

django-paypal里面有吗settings.INSTALLED_APPS

否则,我看不出信号不会被触发的任何其他原因。

于 2011-06-20T20:56:40.560 回答