2011-09-02 23 views
7

私はpaypalのpdt情報を確認しようとしています。CURLリクエストの問題

モックアップフォームを生成して提出しました。 ITは仕事をして情報も返しました。

同じことをカールリクエストしてみました。しかし、私のcur要求は私に空白に戻っています。

私のモックアップ形式:

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

EDIT:

SSL:私は、次のメッセージを発見したカールトラッキングエラーON

:証明書サブジェクト名 'www.sandbox.paypal.com' 「sandbox.paypal.com」

+0

可能性: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のオプションを設定することで行うことができます。ここ

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 

詳しい情報:

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

+1

必ずしも十分ではありません。いくつかのenvでは、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/cURLのバージョンでは、単に無効にPEERは十分ではありません。

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 

ドキュメントから:

CURLOPT_SSL_VERIFYHOST:1 SSLピア証明書の共通名の存在を確認すること。 2を使用して共通名 の存在を確認し、提供されたホスト名と一致することを確認します。プロダクション 環境では、このオプションの値は2(デフォルト値は )にしてください。