【问题标题】:django-paypal PDT implementation can't receive signalsdjango-paypal PDT 实现无法接收信号
【发布时间】:2012-03-19 21:26:04
【问题描述】:

我正在尝试使用带有订阅的 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"

【问题讨论】:

    标签: django django-paypal


    【解决方案1】:

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

    您的解决方案确实是错误的,如果您选择使用 PDN,Paypal 肯定会向您的应用程序 url 发送带有交易 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 回发端点。 (https://github.com/johnboxall/django-paypal/blob/master/standard/pdt/models.py#L47)

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

    【讨论】:

    • 非常感谢。你说的PDN是什么意思?是的,过去我曾尝试设置 IPN。我应该避免使用 PDT 解决方案并尝试仅使用 IPN 吗?你有什么意见?我感觉许多开发人员出于某种原因更喜欢 PDT 而不是 IPN。我会检查我的贝宝设置并在这里报告。
    • 我检查了我的 paypal 设置,但 IPN 已关闭。
    • 我还注意到,在 PDT 部分(我选择使用 PDT 并获得了我的 PDT 令牌)那里它说:“PayPal 将发布与交易相关的令牌,”
    • 再次感谢您。我现在不在我的工作电脑旁,但我不必检查访问日志。我记得很清楚,是的 POST 请求出现在 GET 请求之后。这也是让我困惑的一点。我会尽快检查我的设置并报告。
    • 我转向了ipn。我仍然得到 401。所以我的问题出在贝宝设置或我的 apache 设置上。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 2018-08-18
    • 2022-11-04
    • 2011-08-15
    • 2023-03-13
    • 2017-08-09
    • 2015-11-28
    • 2012-10-12
    • 2014-01-28
    相关资源
    最近更新 更多