django-paypal 未接收到信号

3 投票
3 回答
2050 浏览
提问于 2025-04-16 14:26

我有一个沙盒的PAYPAL区域,

我用的语言是Python,框架是Django,并且我使用了django-paypal。

我在服务器上的IPN测试是可以工作的,但是当有人尝试购买东西时,在沙盒中处理完PAYPAL后,我没有收到信号,在我的paypal_ipn中也看不到交易记录。

所以问题就是我没有收到信号。

这是我在models.py中的信号代码:

from paypal.standard.ipn.signals import payment_was_successful

def show_me_the_money(sender, **kwargs):
    code = sender.item_number
    type, number_product, pagamento_corso_id = code.split('_')
    obj = get_object_or_404(PagamentoCorso, int(pagamento_corso_id))
    obj.pagamento = True
    obj.save()

payment_was_successful.connect(show_me_the_money)

请帮帮我,因为已经过去7天了……我非常沮丧!:-)

3 个回答

0

在我的情况下,原因很简单——我把信号处理的代码放到了 views.py 里,而这个文件不会自动加载,所以处理器根本没有被使用,也没有连接到信号上。最简单但不太好的解决办法是把这些代码移到 models.py 里。更推荐的做法是使用 Django 的 ready() 方法。

3

我遇到过类似的问题。在我的情况下,我从访问日志中看到,PayPal 确实在访问我的支付通知网址,而且请求的状态是200 OK,但在 Django 这边没有触发任何信号。

后来发现,支付的状态是“待处理”,而不是“已完成”(而且我没有监听 paypal.standard.ipn.signals.payment_was_flagged 这个信号)。

我的支付被标记的原因是因为 settings.PAYPAL_RECEIVER_EMAILpaypal_dict["business"] 的邮箱地址设置不正确。这个问题和那位朋友遇到的完全一样。

5

我觉得你可以使用Paypal的测试工具,向你的通知网址发送一些假通知。这样可能会让你更容易找到问题所在。

http://www.friendly-stranger.com/pictures/paypal.jpg

你还可以运行django-paypal自带的测试。应该是类似这样的内容:

python manage.py test paypal

你也可以看看测试代码,自己写一些测试来帮助你解决问题。

如果你还是搞不定,可以把你的网址配置和传递IPN表单到模板的视图代码发出来。

撰写回答