2011-09-02 140 views
7

我正在尝试验证paypal pdt信息。CURL请求问题

我生成了我的模型表单并提交了它。 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> 

我卷曲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; 

编辑:

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

SSL:证书主题名称'www.sandbox.paypal.com'不匹配 目标主机名“sandbox.paypal.com”

+0

possible dupe:http://stackoverflow.com/questions/1776827/php-curl-paypal-sandbox –

+0

KoolKabin;如果我们对解决方案有所贡献,请更新此问题。 – Robert

回答

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。顺便说一下,在表单的“操作”中也进行相同的更改。

+0

这是天才! – almaruf

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; 
+0

不幸......... – KoolKabin

6

你需要告诉袅袅不验证SSL证书。

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 

点击此处了解详情:

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

+1

这并不总是足够的。在一些envs中,你也必须禁用CURLOPT_SSL_VERIFYHOST。 –

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');

21

实际上,您可以禁用对等HOST验证。在一些PHP /卷曲版本,只需禁用PEER是不够的:

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 

从文档:

CURLOPT_SSL_VERIFYHOST:1,检查一个共同的名字存在于 的SSL证书等。 2检查是否存在通用名称 ,并验证它是否与所提供的主机名相匹配。在生产 环境中,此选项的值应保持为2(默认值为 值)。