2011-09-02 134 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(默認值爲 值)。