我正在尝试使用PayPal实现一个简单的在线支付系统,但是我已经尝试了我所知道的所有内容,但仍然收到了无效响应。
我知道这并不简单,因为在使用IPN模拟器时我得到了一个VERIFIED响应。我先尝试将这些项目放入dict,我尝试修改编码,但仍然没有。 PayPal表示无效响应的原因可能是:
以下是相关摘录:
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*
答案 0 :(得分:2)
订单严重。您必须按照Paypal指定的顺序进行验证。实现这一目标的最简单方法是使用它们提供的确切顺序:
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提供的查询字符串。
答案 1 :(得分:1)
在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)
答案 2 :(得分:0)
很难判断你给我的是什么。以下是一些猜测/建议:
答案 3 :(得分:-1)
确保您要发布到沙箱而不是实时..
$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);