我正在尝试使用带订阅的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
POSTBACK_ENDPOINT = "https://www.paypal.com/cgi-bin/webscr"
SANDBOX_POSTBACK_ENDPOINT = "https://www.sandbox.paypal.com/cgi-bin/webscr"
答案 0 :(得分:2)
你是对的,这就是信号没有被调用的原因,因为如果模型的验证成功,信号会在视图的最末端发送。
您的解决方案确实是错误的,如果您选择使用PDN,Paypal肯定会向您的应用网址发送带有交易ID的GET请求。
我真的建议你查看你的设置(在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设置的值。