django-paypal 未接收到信号
我有一个沙盒的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 个回答
在我的情况下,原因很简单——我把信号处理的代码放到了 views.py
里,而这个文件不会自动加载,所以处理器根本没有被使用,也没有连接到信号上。最简单但不太好的解决办法是把这些代码移到 models.py
里。更推荐的做法是使用 Django 的 ready() 方法。
我遇到过类似的问题。在我的情况下,我从访问日志中看到,PayPal 确实在访问我的支付通知网址,而且请求的状态是200 OK,但在 Django 这边没有触发任何信号。
后来发现,支付的状态是“待处理”,而不是“已完成”(而且我没有监听 paypal.standard.ipn.signals.payment_was_flagged
这个信号)。
我的支付被标记的原因是因为 settings.PAYPAL_RECEIVER_EMAIL
和 paypal_dict["business"]
的邮箱地址设置不正确。这个问题和那位朋友遇到的完全一样。
我觉得你可以使用Paypal的测试工具,向你的通知网址发送一些假通知。这样可能会让你更容易找到问题所在。
http://www.friendly-stranger.com/pictures/paypal.jpg
你还可以运行django-paypal自带的测试。应该是类似这样的内容:
python manage.py test paypal
你也可以看看测试代码,自己写一些测试来帮助你解决问题。
如果你还是搞不定,可以把你的网址配置和传递IPN表单到模板的视图代码发出来。