1

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

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

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

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

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

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

我对此感到很不愉快。任何帮助将不胜感激。

PS:我用的是沙盒账号

编辑这些是我的 PAYPAL POSTBACK 值conf.py

POSTBACK_ENDPOINT = "https://www.paypal.com/cgi-bin/webscr"
SANDBOX_POSTBACK_ENDPOINT = "https://www.sandbox.paypal.com/cgi-bin/webscr"
4

1 回答 1

2

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

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

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

我真的建议您检查您的设置(在贝宝帐户上),因为您可能使用的是使用 POST 请求的 IPN。

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

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

于 2012-03-19T22:02:23.383 回答