CURL请求问题

时间:2011-09-02 04:41:58

标签: 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>

我的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'

5 个答案:

答案 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);

此处提供更多信息:

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

答案 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;