CURL请求问题

Koo*_*bin 7 php curl paypal

我正在尝试验证paypal pdt信息.

我生成了我的模型表单并提交了它.IT工作并返回信息.

我尝试了同样的事情来制作卷曲请求.但是我的请求对我来说是空白的.

我的模型形式:

<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>
Run Code Online (Sandbox Code Playgroud)

我的CURL REQ代码:

$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;
Run Code Online (Sandbox Code Playgroud)

编辑:

跟踪卷曲错误我发现以下消息:

SSL:证书主题名称"www.sandbox.paypal.com"与目标主机名"sandbox.paypal.com"不匹配

小智 21

实际上,您可以禁用对等HOST验证.在某些PHP/cURL版本中,仅禁用PEER是不够的:

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
Run Code Online (Sandbox Code Playgroud)

来自文档:

CURLOPT_SSL_VERIFYHOST:1检查SSL对等证书中是否存在公用名.2检查是否存在公用名,并验证它是否与提供的主机名匹配.在生产环境中,此选项的值应保持为2(默认值).


Rob*_*ert 9

更改: $ 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无效.
顺便说一句,在表单的"动作"中也要做同样的改变.


Sam*_*ill 6

您需要告诉cURL不要验证SSL证书.这可以通过设置cURL选项来完成:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
Run Code Online (Sandbox Code Playgroud)

更多信息:

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