如何调试 Django PayPal IPN?

2024-01-26

我在用着这个 Django 应用程序 http://github.com/johnboxall/django-paypal实施 PayPal IPN。我正在使用 PayPal 进行测试IPN模拟器 https://developer.paypal.com/cgi-bin/devscr?cmd=_ipn-link-session,但它告诉我

IPN 传送失败。 HTTP 错误代码 500:内部服务器错误

那么我该如何调试并查看到底发生了什么?我已经深入研究了代码:

@require_POST
def ipn(request, item_check_callable=None):
    """
    PayPal IPN endpoint (notify_url).
    Used by both PayPal Payments Pro and Payments Standard to confirm transactions.
    http://tinyurl.com/d9vu9d

    PayPal IPN Simulator:
    https://developer.paypal.com/cgi-bin/devscr?cmd=_ipn-link-session
    """
    flag = None
    ipn_obj = None
    form = PayPalIPNForm(request.POST)
    if form.is_valid():
        try:
            ipn_obj = form.save(commit=False)
        except Exception, e:
            flag = "Exception while processing. (%s)" % e
    else:
        flag = "Invalid form. (%s)" % form.errors

    if ipn_obj is None:
        ipn_obj = PayPalIPN()    

    ipn_obj.initialize(request)

    if flag is not None:
        ipn_obj.set_flag(flag)
    else:
        # Secrets should only be used over SSL.
        if request.is_secure() and 'secret' in request.GET:
            ipn_obj.verify_secret(form, request.GET['secret'])
        else:
            ipn_obj.verify(item_check_callable)

    ipn_obj.save()
    return HttpResponse("OKAY")

All looks那里很好,但是因为它没有发送回复my浏览器,调试起来有点棘手。我应该怎么办?我正在尝试查看我的 apache 日志,但它确实没有告诉我太多信息。

216.113.191.33 - - [06/Mar/2010:14:10:30 -0600]“POST /paypal/ipn HTTP/1.0”500 16282“-”“-”


当调用此视图时,我尝试发送电子邮件和记录消息,但两者都不想工作。我可能在 IPN 模拟器中输入了错误的 URL :) 我禁用了“post required”装饰器并直接进入页面查看发生了什么。我的系统开始按预期记录“无效交易”(因为没有后期数据),然后我在黑暗中随机进行了尝试,发现 Django 的 CSRF 保护正在启动并阻止 PayPal 向我发送数据。添加@csrf_exempt装饰器似乎已经修复了它。是的,猜测错误。


在 django settings.py 文件中,设置 DEBUG = False

然后,对于任何 HTTP 500(包括返回到 PayPal 的),您将收到一封包含所有 Python 堆栈信息的调试电子邮件。

您需要已经设置 Django 电子邮件才能正常工作,请参阅http://docs.djangoproject.com/en/dev/howto/error-reporting/ http://docs.djangoproject.com/en/dev/howto/error-reporting/欲了解更多信息

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何调试 Django PayPal IPN? 的相关文章

随机推荐