2月
07日

Paypal Sandbox APIの通信がTLS1.2,HTTP1.1に制限されている件(php版)]

[今回の問題発生とその原因について]

現在、12月末ごろPaypalのエクスプレスチェックアウトを利用して製作したサイトのsandboxテスト決済が行われないことに気づきました。
判明したのは1月末でHTTPから直接叩いてAPIのチェックを試したりしましたが通常通りに動いている模様。
Paypalのプレスリリースにも特段情報は載っておらず頭を抱えていたところ…。
https://www.paypal.jp/jp/contents/corporate/release-index/

[事実判明]

Paypal本社のサポートからはお知らせがされていたようです。
https://www.paypal-knowledge.com/infocenter/index?page=content&id=FAQ1913&expand=true&locale=en_US
ここで注目していただきたいのはTLS1.2 and HTTP/1.1 Upgradeの部分でしてこちらが詳細ページとなります。
https://www.paypal-knowledge.com/infocenter/index?page=content&widgetview=true&id=FAQ1914&viewlocale=en_US

Sandbox Endpoints – Ready Now
The PayPal Sandbox endpoints have been configured with the latest security standards to which the Production endpoints will be moving. You can use these endpoints to verify that your code supports the required standards prior to the Production endpoints getting updated. These endpoints only allow TLS 1.2 and HTTP/1.1 connections:
api.sandbox.paypal.com
api-3t.sandbox.paypal.com
api-aa.sandbox.paypal.com
api-aa-3t.sandbox.paypal.com
svcs.sandbox.paypal.com
pointofsale.sandbox.paypal.com
ipnpb.sandbox.paypal.com
www.sandbox.paypal.com (for IPN)

とのことで、TLS1.2通信、もしくはHTTP/1.1が必須となっております。

また、実装版のAPIについても以下のとおり同様です。

Production Endpoints – Ready after June 17, 2016
The Production endpoints will only allow TLS 1.2 and HTTP/1.1 connections:
api.paypal.com
api-3t.paypal.com
api-aa.paypal.com
api-aa-3t.paypal.com
svcs.paypal.com
pointofsale.paypal.com
ipnpb.paypal.com
www.paypal.com (for IPN)

[注意点]

ここで注意していただきたいのが、様々なブログで紹介されているPaypal Intergrationwizardは
上記の通信方法とは違うため、エラーが発生します。
https://devtools-paypal.com/integrationwizard/

[解決法]

Paypal Intergrationwizardで発行されるpaypalfunctions.phpを利用した場合、
hash_call()内に記載されているcurl通信についてオプションを与え、
TLS1.2で通信を行わせる必要があります。

functions.php内 322行目付近
//turning off the server and peer verification(TrustManager Concept).

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

となっている部分をコメントアウトし、

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSLVERSION, 6); // CURL_SSLVERSION_TLSv1_2

に書き換えてください。

[付記]

私自身、Paypalに非常にお世話になっておりそのおかげで飯を食わせてもらっている身でこういったことを言うのは憚られますが、
クレカ決済=Paypalとなっているほどの世界に冠する大企業の対応としては些か不案内なのではないでしょうか。
私共お客様の大切なwebサイトを預かる身としてやはり決済というのは最も重要なスキームです。
それが以前Paypal自身が紹介していた方法で行えなくなるのであればやはりもっと丁寧なアナウンスが必要となるのではないかと考えます。

[もしお困りの方は、お気軽にご連絡下さい。]

ソーシャルニンジャβの運営会社セームページでは、上記の改修もお受けしております。
Skypeコンサルティング1時間 1万円
コンサルティング内で修正できそうであれば、改修致します。また、サーバー情報などを頂いて、弊社で改修も出来ますのでお気軽にお問い合わせ下さい。

お問い合わせはこちら。

返信