我在用着这个 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(使用前将#替换为@)