Получение НЕДОПУСТИМОГО ответа от Песочницы PayPal IPN

Я пытаюсь реализовать простое системное использование онлайн-платежей PayPal, однако я попробовал все, что я знаю, и все еще получаю НЕДОПУСТИМЫЙ ответ.

Я знаю, что это - ничего слишком простого, потому что я получаю ПРОВЕРЕННЫЙ ответ при использовании средства моделирования IPN. Я попытался поместить объекты в dict сначала, я попытался фиксировать кодирование и тем не менее ничто. PayPal заявляет, что причины НЕДОПУСТИМОГО ответа могли быть:

  • Отправка неправильных объектов или в неправильном порядке (вполне уверенный это не это),
  • Отправка в неправильный адрес (определенно не это)
  • Кодирование объектов неправильно (я не думаю, что это - это, кодирование набора к UTF-8 и на 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*
1
задан 10 January 2012 в 16:57
поделиться

3 ответа

Порядок критический . Вы должны подтвердить в том же порядке, что и 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.

2
ответ дан 3 September 2019 в 01:10
поделиться

Трудно судить по тому, что вы мне предоставили. Вот пара догадок/предложений:

  1. Возможно, вам нужно закодировать в utf-8 ключ, а также val.
  2. Если он придирчив к порядку ключей, вам следует регистрировать ключи по мере того, как вы помещаете их в newparams. Поскольку вы используете dict для f, порядок может быть не таким, как вы ожидаете.
0
ответ дан 3 September 2019 в 01:10
поделиться

Убедитесь, что вы публикуете в песочницу, а не вживую ..

$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);
-1
ответ дан 3 September 2019 в 01:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: