django-paypal PDT实现无法接收信号

时间:2012-03-19 21:26:04

标签: django django-paypal

我正在尝试使用带订阅的PDT实现django-paypal(来自git的dcramers版本)。

它工作正常(意味着return_url被请求和回答),但是不会触发信号(放在models.py中)。我使用以下信号,连接到两个不同的功能。

from paypal.standard.pdt.signals import pdt_successful, pdt_failed

我在浏览访问日志时注意到的是,我收到了来自paypal的POST请求,该请求已被拒绝。

"POST /an-obscure-string/pdt/ HTTP/1.0" 401 401 "-" "-"

我尝试修改/paypal/standard/pdt/views.py以接受POST请求但我仍然收到401错误。我认为这是没有触发信号的原因。

我的时间很糟糕。任何帮助将不胜感激。

PS:我正在使用沙箱帐户

编辑这些是来自conf.py

的PAYPAL POSTBACK值
POSTBACK_ENDPOINT = "https://www.paypal.com/cgi-bin/webscr"
SANDBOX_POSTBACK_ENDPOINT = "https://www.sandbox.paypal.com/cgi-bin/webscr"

1 个答案:

答案 0 :(得分:2)

你是对的,这就是信号没有被调用的原因,因为如果模型的验证成功,信号会在视图的最末端发送。

您的解决方案确实是错误的,如果您选择使用PDN,Paypal肯定会向您的应用网址发送带有交易ID的GET请求。

https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/howto_html_paymentdatatransfer

我真的建议你查看你的设置(在paypal帐户上),因为你可能正在使用使用POST请求的IPN。

另一个可能的原因是,在您收到来自paypal的GET请求后,您的应用会将POST数据发送到您的应用而不是PayPal postback端点。 (https://github.com/johnboxall/django-paypal/blob/master/standard/pdt/models.py#L47)

我会查看访问日志以查看POST请求是否在GET请求之后(对于相同的url),如果是,我会检查SANDBOX_POSTBACK_ENDPOINT和POSTBACK_ENDPOINT设置的值。