2011-09-06 128 views
0

我正在使用paypal ipn监听器 - 它似乎没有“听到”信号,虽然数据库已更新,因此我知道ipn已被paypal.standard.ipn包。Django-Paypal IPN 403错误

现在我从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

检查您的错误日志/权限。出于某种原因,脚本正在返回403(禁止)。我们不会真正知道为什么这取决于您的脚本/环境。 – Robert

+0

@罗伯特是正确的,没有日志(也许看到相关的代码),这个问题是不可能回答,并且过于局限于本地化。我还没有完成它,因为如果改进了,它可能对其他人有用,特别是如果您向我们显示相关代码。 –

+0

错误日志没有显示任何内容 - 访问日志只显示远程IP,URL和403.在403错误出现之前,我没有更改任何权限,但只是为了确保所有权限都被双重检查并且他们很好。我会发布日志以防万一... – hgolov

回答

2

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

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

在贝宝/标准/ IPN/views.py添加:

from django.views.decorators.csrf import csrf_exempt 

在顶部,所述的进口的其余部分之间,和

@csrf_exempt 

函数声明上述@require_POST上述。

0

这是一个非常晚的答案,但我有完全相同的问题。原来,我们并没有关闭我们服务器上的apache Basic Authentication(这是在开发过程中)。 PayPal无法通过该认证层,因此得到403响应。这可能是另一个问题,但这当然是我们的问题!

0

我有同样的问题。 事实证明,在我的virtualenv我已安装 django-paypal和在我的项目中,我有应用程序贝宝。 当我将@csrf_exempt添加到我的应用程序时无法正常工作,因为django总是在我的Virtualenv中调用PayPal包。 我做了一个点卸载django-paypal和一切顺利(另一种解决方案也许是修改包视图)

我希望它有帮助!

0

这也可能是由于您的urls.py布局。我很笨,有一个'^'正则表达式的默认主页登录页面。当我切换IPN网址之前,该声明一切工作。