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 错误的主要内容,如果未能解决你的问题,请参考以下文章
为啥Paypal在使用django-paypal时会重试IPN
Django-paypal 不在 DB 中创建 IPN 表 - 如何修复?