1

このコードを使用して、Paypal 支払いデータ転送 (PDT) を処理します。

$url = 'https://www.sandbox.paypal.com/cgi-bin/webscr';
$tx_token = $_GET['tx'];
$auth_token = "my_token";

$fields = array(
    'cmd' => '_notify-synch',
    'tx' => $tx_token,
    'at' => $auth_token,
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,  $url);
curl_setopt($ch, CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, http_build_query($fields));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);

$res = curl_exec($ch);
$status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);

echo 'Curl error: ' . curl_error($ch);

echo "status:   " . $status;
curl_close($ch);

そして、私は得ています:

Curl error: SSL connect error
status: 0

Postman で同じ URL: www.sandbox.paypal.com に同じパラメーター (cmd、at、tx) を指定して API を作成しようとしましたが、成功の応答がありました。私は何を間違えましたか?

4

1 に答える 1

1

PayPal は、サンドボックス API エンドポイントを TLS 1.2 にアップグレードしました。TLS 1.2 および HTTP/1.1 アップグレード マイクロサイトで、アップグレードの詳細と、本番環境にいつ影響するかを確認できます。

OpenSSL が 1.0.1c 以上で、最新バージョンの libcurl が必要です。あなたの特定のコードに関しては、おそらく次のことをしたいと思うでしょう:

curl_setopt($ch, CURLOPT_SSLVERSION, 6); // CURL_SSLLVERSION_TLSv1_2 = 6

また、エンドポイントの SSL 証明書を確認するために、おそらくそのままにCURLOPT_SSL_VERIFYHOSTしておく必要があります。2

特定の言語環境要件については、 PayPal TLS 更新リポジトリで詳細を確認できます。

于 2016-02-23T17:35:14.287 に答える