Публикация 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 или делает что-то с проверкой пользовательского агента, или запрашивает заголовки, но у меня нет никакой реальной идеи. Может кто-нибудь пролить свет на это поведение?