ハマログ

株式会社イーツー・インフォの社員ブログ

PHP5.6でカード決済できない

こんにちはいけしまです。もう少しで冬休みですね。早い方はもうお休みでしょうか。
今日はPHPの障害対応ネタをちょっとだけ書きます。
PHP5.4、EC-CUBE2.4、クレジットカードの決済システムの組み合わせのサイトでPHP5.6にしたらカード決済できなくなるという問題がありました。調査してみると外部の決済システムに接続する最初の部分でこけていました。
PHPの5.6への移行について調べたらこんな記事を見つけました。
「ストリームラッパーが、SSL/TLSを使っている場合のピア証明書とホスト名の検証にデフォルトで対応」
SSLで外部と接続する場合、証明書を明示するか、証明書なしで接続する指定をしなくてはいけないようです。今回はSSH接続権限がなく証明書の場所にアクセスできなかったので証明書なしで接続できるように修正しました。
接続で問題が発生しているのは下記のコードでした。

$fp = fsockopen($this->addr, $this->port, $errno, $errstr);

試しに下記のコードでオプション指定してみましたけど接続できませんでした。

$context = stream_context_create(array("ssl" => array("verify_peer" => false, "verify_peer_name" => false)));
$fp = fsockopen($this->addr, $this->port, $errno, $errstr, $context);

この関数調べてみたら環境によってオプションが受けられないようです。
でも同じこと悩んでる人見つけました。ありがたい。「fsockopen」のかわりに「stream_socket_client」を使えばいいんですね!ということで下記のソースに書き直したら無事つながりましたー。

$context = stream_context_create();
$result = stream_context_set_option($context, 'ssl', 'verify_peer', false);
$result = stream_context_set_option($context, 'ssl', 'verify_host', false);
$fp = stream_socket_client($this->addr . ':' . $this->port, $errno, $errstr, 10, STREAM_CLIENT_CONNECT, $context);
EC-CUBEPHPphp5クレジットカード決済

  池島 篤則   2015年12月29日


関連記事

PHPでChatworkに自動投稿する

イーツー・インフォでは、社内コミュニケーションツールとしてChatworkを利用…

MySQLでgrantしたら失敗したので解決しました

MySQLのユーザをつくって、grantしたら失敗しました。 rootで。 cr…

サーバのログ監視ツールSwatchでPHP Fatal error発生時にメール送信

こんにちは。S.Iです。 この度、本番リリース間近のシステムにリアルタイムログ監…


← 前の投稿

次の投稿 →