0

このコード(このチュートリアルから貼り付けたもの)を使用すると、PayPal DoDirectPayment メソッドの実行が成功します。CURLOPT_SSL_VERIFYPEER が FALSE に設定されていることに注意してください。

ただし、通常の値 (CURLOPT_SSL_VERIFYPEER = TRUE) を設定すると、SSL 証明書が機能しているサーバー上でコードが動作しているにもかかわらず (すべてのページが HTTPS URL で動作する)、PayPal からの応答はなく、失敗応答もありません。

この問題の原因を知っている人はいますか?

4

1 に答える 1

0

有効な証明書を使用していても問題が解決しない場合は、CA を有効な形式 (X.509 証明書 PEM) で保存したことを再確認する必要がある場合があります。CA を cacert.pem というファイルにエクスポートしたようです。このファイルが有効であること、および curl が実際にこのファイルを取得できることを確認してください (有効なパスなど)。

証明書のエクスポートを再度試みることができます - ブラウザー (例: Firefox) から、これはブラウザー (例: Firefox) で PayPal https URL にアクセスし、証明書を表示してからエクスポートすることで実行できます。(前述の正しい形式 (X.509 証明書 PEM) を使用していることを確認してください)。

CA を保存したら、これを CURLOPT_CAINFO パラメータに渡します。

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/CAcerts/BuiltinObjectToken-EquifaxSecureCA.crt");

より詳細な説明については、この素晴らしい記事を参照してください: http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/

証明書に関する最後の部分を引用します。

CA 証明書を持っているが、PEM 形式ではない場合 (つまり、Base64 でエンコードされていないバイナリ形式または DER 形式である場合)、OpenSSL などを使用して PEM 形式に変換する必要があります。 .

編集- 証明書のエクスポート後にエラーが発生した場合は、X.509 証明書 PEM (チェーン付き) を使用して証明書を保存することもできます。

于 2013-02-20T19:01:08.467 に答える