我正在尝试验证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(默认值).
更改: $ 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无效.
顺便说一句,在表单的"动作"中也要做同样的改变.
您需要告诉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