Django-Paypal IPN 403 错误

Posted

技术标签:

【中文标题】Django-Paypal IPN 403 错误【英文标题】:Django-Paypal IPN 403 Error 【发布时间】:2011-11-11 13:55:40 【问题描述】:

我正在研究 paypal ipn 监听器 - 它似乎没有“听到”信号,尽管数据库已更新,所以我知道 ipn 已被 paypal.standard.ipn 包接受。

现在我从 ipn 模拟器收到 403 错误 - 有人知道为什么会发生这种情况吗?当我直接导航到监听器 url 时没有错误。

我向侦听器添加了@csrf_exempt,但这没有帮助。

欢迎提出任何建议。

Listeners.py:

from django.dispatch import receiver
from django.contrib.sites.models import Site

from django.views.decorators.csrf import csrf_exempt
from paypal.standard.ipn import signals as paypal_signals
from messaging import send
from utests.models import Test
 import logging


@csrf_exempt
@receiver(paypal_signals.payment_was_successful)
def payment_was_succesful_listener(sender, **kwargs):
     #:sender is the PayPalIPN model instance
    logging.debug("in payment successful listener")
    ... the rest of the code is commented out while I debug...


@receiver(paypal_signals.payment_was_flagged, dispatch_uid="dl-payment_was_flagged")
def payment_was_flagged_listener(sender, **kwargs):
    #:sender is the PayPalIPN model instance
    pass

如您所见,所有应该发生的只是一些调试,但它并没有到达那里。

【问题讨论】:

检查您的错误日志/权限。由于某种原因,脚本返回 403(禁止)。我们不会真正知道为什么,因为这取决于您的脚本/环境。 @Robert 是正确的,没有日志(也许看到相关代码),这个问题无法回答,并且接近于过于本地化。我(还)没有关闭它,因为如果改进它可能对其他人有用,尤其是如果您向我们展示相关代码。 错误日志不显示任何内容 - 访问日志只显示远程 ip、url 和 403。在出现 403 错误之前我没有更改任何权限,但只是为了确保我仔细检查了所有权限,它们都很好。我会发布日志以防万一...... 访问日志:173.0.82.126 - - [06/Sep/2011:18:01:56 +0000] "POST /billing/something/hard/to/guess/HTTP/1.0" 403 2488 【参考方案1】:

我又遇到了同样的问题。以下是其他人遇到此问题的解决方案:

@csrf_exempt 需要添加到 django-paypal 包本身。

在 paypal/standard/ipn/views.py 添加:

from django.views.decorators.csrf import csrf_exempt

在顶部,在其余的导入中,以及

@csrf_exempt

在函数声明上方的@require_POST 上方。

【讨论】:

【参考方案2】:

这是一个很晚的答案,但我遇到了完全相同的问题。原来我们没有关闭我们服务器上的 apache 基本身份验证(在开发过程中已经到位)。 PayPal 无法通过该身份验证层,因此得到 403 作为响应。这可能是另一个问题,但这肯定是我们的问题!

【讨论】:

【参考方案3】:

我遇到了同样的问题。 事实证明,在我的 virtualenv 中我安装了 django-paypal,在我的项目中,我有应用程序 paypal。 当我将@csrf_exempt 添加到我的应用程序时不起作用,因为 django 总是在我的 Virtualenv 中调用 paypal 包。 我做了一个 pip uninstall django-paypal 并且一切顺利(另一个解决方案可能是修改包视图)

希望对你有帮助!

【讨论】:

【参考方案4】:

这也可能是由于您的 urls.py 布局。我很愚蠢,可以为默认主页登录页面添加一个 '^' 正则表达式。当我将 ipn url 切换到该语句之前时,一切正常。

【讨论】:

以上是关于Django-Paypal IPN 403 错误的主要内容,如果未能解决你的问题,请参考以下文章

django-paypal 收不到 ipn 信号

为啥Paypal在使用django-paypal时会重试IPN

Django-paypal 不在 DB 中创建 IPN 表 - 如何修复?

没有收到 django-paypal IPN 信号

无法接收 PayPal IPN - PayPal 总是收到 403 错误

PHP - 自 2019 年 11 月 12 日以来,Paypal IPN 返回 HTTP 403 错误