2013-05-28 23 views
0

在models.py的底部我:Django的贝宝IPN信号没有被接收

from paypal.standard.ipn.signals import payment_was_successful, payment_was_flagged 
import pay 

payment_was_successful.connect(pay.paypal_success) 
payment_was_flagged.connect(pay.paypal_flagged) 

我使用贝宝开发者IPN模拟器,并返回“IPN发送成功”,但代码pay.paypal_successpay.paypal_flagged未被执行。

被填充paypal_ipn表,但是我注意到flag_info下,每一行都有:

Invalid form. (<ul class="errorlist"><li>payment_date<ul class="errorlist"> 
<li>Enter a valid date/time.</li></ul></li></ul>) 

我不知道这有什么关系的信号不能正常工作。

回答

6

我遇到了同样的问题。

显然,IPN模拟器发送的日期格式与django-paypal软件包接受的日期格式不同。

转到paypal.standard.forms.py并添加PayPal发送的'新格式日期'。

PAYPAL_DATE_FORMAT = ("%H:%M:%S %b. %d, %Y PST", 
         "%H:%M:%S %b. %d, %Y PDT", 
         "%H:%M:%S %d %b %Y PST", # note this 
         "%H:%M:%S %d %b %Y PDT", # and that 
         "%H:%M:%S %b %d, %Y PST", 
         "%H:%M:%S %b %d, %Y PDT",) 

我不喜欢这个解决方案,因为如果PayPal将来会更改日期字符串格式呢?

这实际上是Python的datetime对象的一个​​警告,它不知道如何轻松地将字符串轻松转换为实际时间对象。

但现在工作。

+0

感谢帮助了很多 – soField

+0

这工作谢谢! – amba88

+1

请注意:这实际上是IPN模拟器的一个错误!我对PayPal文档缺乏一致性和混乱感到非常失望,他们确实无法阅读,并且他们的测试工具被窃听...... – caesarsol