Я пытаюсь реализовать простое системное использование онлайн-платежей PayPal, однако я попробовал все, что я знаю, и все еще получаю НЕДОПУСТИМЫЙ ответ.
Я знаю, что это - ничего слишком простого, потому что я получаю ПРОВЕРЕННЫЙ ответ при использовании средства моделирования IPN. Я попытался поместить объекты в 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*
Порядок критический . Вы должны подтвердить в том же порядке, что и 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.
Трудно судить по тому, что вы мне предоставили. Вот пара догадок/предложений:
Убедитесь, что вы публикуете в песочницу, а не вживую ..
$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);