我正在尝试验证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>
我的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;
编辑:
跟踪卷曲错误我发现以下消息:
SSL:证书主题名称“www.sandbox.paypal.com”不匹配 目标主机名'sandbox.paypal.com'
答案 0 :(得分:21)
实际上,您可以禁用对等HOST验证。在某些PHP / cURL版本中,仅禁用PEER是不够的:
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
来自文档:
CURLOPT_SSL_VERIFYHOST:1来检查是否存在公用名 SSL对等证书。 2检查是否存在通用名称 并验证它是否与提供的主机名匹配。在生产中 环境中,此选项的值应保持为2(默认值 值)。
答案 1 :(得分:8)
更改: $ 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无效。
顺便说一句,在表单的“动作”中也要做同样的改变。
答案 2 :(得分:6)
您需要告诉cURL不要验证SSL证书。这可以通过设置cURL选项来完成:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
此处提供更多信息:
答案 3 :(得分:2)
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');
答案 4 :(得分:0)
以字符串形式发送:
$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;