Публикация cURL в PayPal выполняется успешно, в то время как публикация в HTML-форме и публикация RunScope не выполняются

В настоящее время я занимаюсь интеграцией с PayPal's Payflow Pro Gateway. Я отправляю запрос в PayPal, чтобы получить их "Безопасный токен", чтобы я мог использовать его для выполнения реальной транзакции. Образец, который я нашел на SO, работает через cURL, но исходные тесты HTML Form POST и RunScope, которые я запускал, не работали.

Вот команда cURL:

curl https://pilot-payflowpro.paypal.com -kd "PARTNER=PayPal&VENDOR=*****&USER=*****&PWD=*****&TRXTYPE=A&AMT=40&CREATESECURETOKEN=Y&SECURETOKENID=*******&SILENTTRAN=TRUE"

Согласно документации cURL:

Опция -k:

"(SSL) Эта опция явно позволяет curl выполнять" небезопасные " SSL-соединения и передачи. Все SSL-соединения пытаются сделать безопасными с помощью пакета сертификатов CA, установленного по умолчанию. Это делает все соединения, считающиеся" небезопасными ", ошибочными, если только -k, - используется небезопасно."

Опция -d:

"(HTTP) Отправляет указанные данные в POST-запросе на HTTP-сервер так же, как это делает браузер, когда пользователь заполнил HTML-форму и нажал кнопку отправки. Это заставит curl передавать данные в сервер с использованием типа контента application/x-www-form-urlencoded. Сравните с -F, --form."

-d, --data - это то же самое, что и --data-ascii. Чтобы публиковать данные исключительно в двоичном формате, вы должны использовать опцию --data-binary. Для URL-кодирования значения поля формы вы можете использовать --data-urlencode.

Если какой-либо из этих параметров используется более одного раза в одной и той же командной строке, указанные фрагменты данных будут объединены с разделительным символом &-symbol. Таким образом, использование '-d name=daniel -d skill=lousy' сгенерирует пост-чанк, который выглядит как 'name=daniel&skill=lousy'.

Если вы начинаете данные с буквы @, остальное должно быть именем файла для чтения данных, или - если вы хотите, чтобы curl считывал данные из stdin. Содержимое файла уже должно быть в кодировке URL. Несколько файлов также могут быть указаны. Публикация данных из файла с именем 'foobar', таким образом, будет выполняться с --data @foobar. Когда --data сказано читать из файла, подобного этому, возврат каретки и перевод строки будут удалены.

Это прекрасно работает и возвращает этот ответ:

RESULT=0&SECURETOKEN=*****&SECURETOKENID=*****&RESPMSG=Approved

HTML Форма POST

Однако то, что я воспринимаю как один и тот же запрос, не выполняется в следующей HTML-форме POST:

<input type="hidden" name="TRXTYPE" value="A" />
<input type="hidden" name="SILENTTRAN" value="TRUE" />

<input type="hidden" name="AMT" value="40" />

<input type="hidden" name="CREATESECURETOKEN" value="Y" />
<input type="hidden" name="SECURETOKENID" value="*****" />

<input type="submit" value="Get Secure Token" />

Это дает мне "Соединение было сброшено" в FireFox.

Я также пытался использовать jQuery для POST-данных, используя $.ajax(), но я получил ответ 200 без данных.

Runscope

Когда я ввожу вышеупомянутые параметры в RunScope, я получаю:

RESULT=1&SECURETOKENID=*****&RESPMSG=User authentication failed

Что не имеет никакого смысла!

Я думал, что PayPal или делает что-то с проверкой пользовательского агента, или запрашивает заголовки, но у меня нет никакой реальной идеи. Может кто-нибудь пролить свет на это поведение?

0 ответов

Другие вопросы по тегам