2017-02-25 5 views
0

を "SSLエラーをつなぐ" 私は私のシステムでIPN実装しようとしていますが、エラーペイパルIPN CURLは

SSL接続エラー

TLSバージョンは、TLS 1.0

をそれぞれ示すことがある返しますクライアントのシステム。私はpaypalのウェブサイトからコードをダウンロードしました。私は現在それをテストしています。 「howsmyssl」のシステムでのみTLSのV 1.0をサポートしていることを報告している場合

が、それは誤り

<?php 
    ini_set('display_errors', 1); 
    ini_set('display_startup_errors', 1); 
    error_reporting(E_ALL); 
    session_start(); 



    $ch = curl_init('https://www.howsmyssl.com/a/check'); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    $data = curl_exec($ch); 
    curl_close($ch); 

    $json = json_decode($data); 
    echo $json->tls_version; 




    file_put_contents('NAB/paypal-ipn.txt', var_export($_POST, true)); 
    echo "ipn processing"; 
    // STEP 1: read POST data 
    // Reading POSTed data directly from $_POST causes serialization issues with array data in the POST. 
    // Instead, read raw POST data from the input stream. 
    $raw_post_data = file_get_contents('php://input'); 
    $raw_post_array = explode('&', $raw_post_data); 
    $myPost = array(); 
    foreach ($raw_post_array as $keyval) { 
     $keyval = explode ('=', $keyval); 
     if (count($keyval) == 2) 
     $myPost[$keyval[0]] = urldecode($keyval[1]); 
    } 
    echo "<br>1"; 
    // read the IPN message sent from PayPal and prepend 'cmd=_notify-validate' 
    $req = 'cmd=_notify-validate'; 
    if (function_exists('get_magic_quotes_gpc')) { 
     $get_magic_quotes_exists = true; 
    } 
    echo "<br>2"; 
    foreach ($myPost as $key => $value) { 
     if ($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1) { 
     $value = urlencode(stripslashes($value)); 
     } else { 
     $value = urlencode($value); 
     } 
     $req .= "&$key=$value"; 
    } 
    echo "<br>3"; 
    // Step 2: POST IPN data back to PayPal to validate 
    $ch = curl_init('https://www.sandbox.paypal.com/cgi-bin/webscr'); 
    //$ch = curl_init('https://www.paypal.com/cgi-bin/webscr'); 
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $req); 
    curl_setopt($ch, CURLOPT_SSLVERSION, 6); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
    curl_setopt($ch, CURLOPT_FORBID_REUSE, 1); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close')); 
    // In wamp-like environments that do not come bundled with root authority certificates, 
    // please download 'cacert.pem' from "http://curl.haxx.se/docs/caextract.html" and set 
    // the directory path of the certificate as shown below: 
    // curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem'); 
    echo "<br>3"; 
    if (!($res = curl_exec($ch))) { 
     error_log("Got " . curl_error($ch) . " when processing IPN data"); 
     echo curl_error($ch); 
     curl_close($ch); 
     //exit; 
    } 

答えて

1

を投げ、アップグレードがTLS V 1.2をサポートするために必要であると思われます。 curl_setopt($ch, CURLOPT_SSLVERSION, 6);はTLS v 1.2を要求しています(PHP Curl (with NSS) is probably using SSLv3 insted of TLS when connecting to httpsのリストを参照)。

また、PayPalはTLS v 1.2(https://www.paypal-knowledge.com/infocenter/index?page=content&widgetview=true&id=FAQ1914&viewlocale=en_USおよびPhp curl set ssl versionを参照)を必要としています。

curl_setopt($ch, CURLOPT_SSLVERSION, 4);に変更すると、TLS v1.0(2012年6月30日まで)を使用して統合をテストできます。

+0

ありがとう、これは非常に役に立ちます –

1

paypal ipnリスナーコードを実装するときに同様の問題が発生しました。スクリプトは、提供したコードでステップ2が始まるところで実行を停止します。私はhttp://curl.haxx.se/docs/caextract.htmlからcacert.pemをダウンロードして解決しました。次に、ダウンロードしたファイルをpaypalipnlistener.phpと同じフォルダにコピーし、paypalipnlistener.php // curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');の次のコードのコメントを外してスクリプトを正常に実行しました。

+1

ありがとう、これは非常に有用です –

関連する問題