CURL Запрос проблемы - PullRequest
       20

CURL Запрос проблемы

7 голосов
/ 02 сентября 2011

Я пытаюсь проверить информацию о paypal pdt.

Я сгенерировал форму макета и отправил ее.Он работал и возвращал информацию тоже.

Я пытался сделать то же самое, делая запрос керлинга.Но мой запрос на возврат мне пуст.

моя форма макета:

<form method="post" action="https://sandbox.paypal.com/cgi-bin/webscr">
    <input type="hidden" name="cmd" value="_notify-synch"/>
    <input type="hidden" name="at" value="-----"/>
    <input type="hidden" name="tx" value="-----"/>
    <input type="submit" value="Test"/>
</form>

Мой код запроса CURL:

$arrData = array(
    'tx'    => '----',
    'cmd'   => '_notify-synch',
    'at'    => '-----'
);
    $ch = curl_init( 'https://sandbox.paypal.com/cgi-bin/webscr' );
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1) ;
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $arrData);
    $strCurlResult = curl_exec($ch);
    curl_close( $ch );
    return $strCurlResult;

РЕДАКТИРОВАТЬ:

Ошибка отслеживания при включении отслеживания. Я обнаружил следующее сообщение:

SSL: имя субъекта сертификата «www.sandbox.paypal.com» не соответствует имени целевого хоста «sandbox.paypal.com»

Ответы [ 5 ]

21 голосов
/ 05 июня 2013

На самом деле, вы можете просто отключить одноранговую проверку HOST. В некоторых версиях PHP / cURL простого отключения PEER недостаточно:

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

Из документов:

CURLOPT_SSL_VERIFYHOST: 1, чтобы проверить наличие общего имени в сертификат однорангового SSL. 2 проверить наличие общего имени а также убедитесь, что оно соответствует указанному имени хоста. В производстве В средах значение этой опции должно быть 2 (по умолчанию значение).

9 голосов
/ 02 сентября 2011

Изменение: $ ch = curl_init ('https://sandbox.paypal.com/cgi-bin/webscr');
Кому: $ ch = curl_init ('https://www.sandbox.paypal.com/cgi-bin/webscr');

Причина: сертификат для www.sandbox.paypal.com недействителен для sandbox.paypal.com.
Кстати, сделайте то же самое в «действии» вашей формы.

6 голосов
/ 02 сентября 2011

Вы должны указать cURL не проверять сертификат SSL.Это можно сделать, установив параметр cURL:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

Более подробная информация здесь:

http://php.net/manual/en/function.curl-setopt.php

2 голосов
/ 25 июля 2012

curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, 0);

хотя вышеперечисленное работает, но не рекомендуется.

как сказал Роберт

Изменение:

$ ch = curl_init ('https://sandbox.paypal.com/cgi-bin/webscr');

Кому:

$ ch = curl_init ('https://www.sandbox.paypal.com/cgi-bin/webscr');

0 голосов
/ 02 сентября 2011

Отправить как строку:

$arrData = array(
    'tx'    => '----',
    'cmd'   => '_notify-synch',
    'at'    => '-----'
);

$fields_string = "";

foreach($arrData as $key=>$value) 
    $fields_string .= $key.'='.$value.'&';

rtrim($fields_string,'&');

$ch = curl_init( 'https://sandbox.paypal.com/cgi-bin/webscr' );
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1) ;
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
$strCurlResult = curl_exec($ch);
curl_close( $ch );
return $strCurlResult;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...