Python 从PayPal获得无效响应';s沙盒IPN
我试图实现一个简单的在线支付系统使用贝宝,但我已经尝试了一切,我知道,但仍然得到一个无效的回应 我知道这并不简单,因为我在使用IPN模拟器时得到了一个经过验证的响应。我试着先把这些项目放到dict中,我试着修正编码,但仍然一无所获。PayPal表示无效响应的原因可能是:Python 从PayPal获得无效响应';s沙盒IPN,python,paypal,urllib2,paypal-ipn,Python,Paypal,Urllib2,Paypal Ipn,我试图实现一个简单的在线支付系统使用贝宝,但我已经尝试了一切,我知道,但仍然得到一个无效的回应 我知道这并不简单,因为我在使用IPN模拟器时得到了一个经过验证的响应。我试着先把这些项目放到dict中,我试着修正编码,但仍然一无所获。PayPal表示无效响应的原因可能是: 发送错误的项目或以错误的顺序发送(很肯定不是这样) 发送到错误的地址(绝对不是此地址) 编码项目不正确(我不认为是这样,在paypal和我的脚本上都将编码设置为UTF-8) 以下是相关的代码片段: f = cgi.Field
- 发送错误的项目或以错误的顺序发送(很肯定不是这样)
- 发送到错误的地址(绝对不是此地址)
- 编码项目不正确(我不认为是这样,在paypal和我的脚本上都将编码设置为UTF-8)
f = cgi.FieldStorage()
newparams = 'cmd=_notify-validate'
for key in f.keys():
val = f[key].value
newparams += '&' + urlencode({key: val.encode('utf-8')})
req = urllib2.Request(PP_URL, newparams)
req.add_header("Content-type", "application/x-www-form-urlencoded")
http = urllib2.urlopen(req)
ret = http.read()
fi.write(ret + '\n')
if ret == 'VERIFIED':
#*do stuff*
从你给我的东西很难判断。以下是一些猜测/建议:
def paypal_verify():
""" Returns false if the current request cannot be verified by paypal """
# Create verify param string from current query string
verify_string = "cmd=_notify_validate&" + cherrypy.request.query_string
req = urllib2.Request("http://www.paypal.com/cgi-bin/webscr", verify_string)
response = urllib2.urlopen(req)
result = response.read()
if response == "VERIFIED":
# All good
return True
# Fail
return False
如果您没有使用cherrypy,则应提供类似的其他机制来获取Paypal提供的查询字符串。确保您是发布到沙箱而不是live
$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);
在django
import httplib2
import urllib
h = httplib2.Http()
params = urllib.urlencode(request.POST, True)
response, content = h.request("http://www.paypal.com/cgi-bin/webscr?cmd=_notify-validate&%s" % params)
这正是我想做的,但我找不到一种机制,只获取数据字符串而不使用FieldStorage实例。。。cherrypy是最好的选择吗?谢谢你的反馈!不过,只需使用
os.environ[“QUERY\u STRING”]
谢谢。这就是我要找的。Django Paypal有bug,每次收到Paypal的通知都会崩溃。