我正在使用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
正如你所看到的,所有应该发生的事情都是一些调试,但它没有达到目的。
答案 0 :(得分:2)
我刚刚再遇到同样的问题。以下是其他人遇到此问题的解决方案:
需要将@csrf_exempt添加到django-paypal包中。
在paypal / standard / ipn / views.py中添加:
from django.views.decorators.csrf import csrf_exempt
位于其他导入的顶部,
@csrf_exempt
在函数声明上方的@require_POST之上。
答案 1 :(得分:0)
这是一个非常晚的答案,但我有完全相同的问题。事实证明我们没有关闭我们服务器上的apache基本身份验证(在开发过程中就位)。 PayPal无法通过该身份验证层,因此获得403响应。这可能是另一个问题,但这肯定是我们的问题!
答案 2 :(得分:0)
我有同样的问题。 事实证明,在我的virtualenv中我安装了 django-paypal,在我的项目中,我有了应用 paypal 。 当我将@csrf_exempt添加到我的应用程序时不起作用,因为django总是在我的Virtualenv中调用paypal包。 我做了一个pip卸载django-paypal,一切顺利(另一个解决方案可能是修改包视图)
我希望它有所帮助!
答案 3 :(得分:0)
也可能是因为你的urls.py布局。我愚蠢到有一个'^'正则表达式用于默认的主页登陆页面。当我将ipn url切换到该语句之前一切正常。