エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


GMOペイメントゲートウェイのjava.io.IOExceptionのエラー

      2016/04/02

GMOペイメントゲートウェイでjava.io.IOExceptionのエラー

 

java.io.IOExceptionのエラーとは?

 
ECCUBEを利用して ECサイトを構築しています。
決済モジュールとして GMOペイメントゲートウェイを導入することにしました。
 
マニュアルに従って導入しましたが、結果通知プログラムから送信されてくるメールが「Error report」となっていました。
 
タイトル「Error report」
以下、本文。
——————————————————-
「PGマルチペイメントサービス」の結果通知にて、エラーが発生しました。
Shop ID = [tshop01010101]
Day Time = [2015-01-01 01:01:01.01]
Error = [送信に失敗しました。 発生例外[java.io.IOException]]
——————————————————-
 
 

java.io.IOExceptionの原因と解決方法

 
java.io.IOExceptionのエラーの原因と解決方法について、マニュアルには下記の様に記載されています。しっかり書かれています。
——————————————————-
・結果通知プログラムファイル:
  pg_mulpay_recv.php に実行権限(パーミッション)が付与されているか 。
・結果通知プログラムファイル:
  pg_mulpay_recv.php が 外部からアクセス可能な状態となっているか。
  IPアドレスや、基本認証によるアクセス制限をされている場合は、
  結果通知を受信いただくことができません。
 
※ 結果通知通知プログラムの保存場所
  EC-CUBEインストールディレクトリ/html/user_data/pg_mulpay_recv.php
——————————————————-
 
原因と解決方法を要約すると
 
【原因】
決済モジュールからメールを送信するため「pg_mulpay_recv.php」を実行しようとしましたが、正常に実行することができませんでした。
 
【解決方法】

  • パーミッションを変更する
  • アクセス制限を解除する

 
【対象ファイル】
 {ECCUBEルート}/html/user_data/pg_mulpay_recv.php
 
 
開発中の場合は、開発中なので Basic認証を設定して開発を行っている場合も多々あると思いますが、Basic認証を設定していると外部からアクセスできないのでエラーになりますよ、という内容です。
IPでの制限をしている場合も同じです。
 
もう一つの可能性としては、「ECCUBEの新規追加ページがInternal Server Error・Not Foundに」で紹介しましたが、決済モジュールを追加すると新規でプログラムファイルが設置されますので、「pg_mulpay_recv.php」のパーミッションが正しい設定になっていない場合もあります。
 
 
今回私が遭遇した不具合はこの両方だったワケなのですが、「ECCUBEの新規追加ページがInternal Server Error・Not Foundに」が発生していた同じ案件でしたので、パーミッションにばかり気を取られてしまい、Basic認証を設定していたことをすっかり忘れてしまっていた、ということが原因でした。
 
 
ネットで調べると、「サポートに問い合わせてみると良さそうです」と言う回答がありましたので、サポートにメールで問い合わせをすると、わざわざ不具合の原因も調べてくれました。
レスポンスも早かったですね。
そして、お恥ずかしいばかりの原因でした...
 
 

java.io.IOExceptionの原因と解決方法

 
今回の不具合はさておき、クレジットカード決済の動作確認を行うにはクレジットカード番号が必要です。
 
ですが、GMOペイメントゲートウェイではテスト用のカード番号の提供などはありませんが、適当な番号を入力してもカード番号の妥当性チェックではじかれてしまいます。
とは言え、自分のクレジットカード番号を利用するなんてことは考えられないワケで、どうしようかと悩んでいた時に下記のサイトを発見しました。
 
 https://webpay.jp/docs/mock_cards
 
テスト環境で使用できるテスト用のカード番号の情報を提供してくれています。
これを使って決済モジュールの設定が正しいかどうかの確認が行えます。

 - PHP・Smarty・ECCUBE

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

PHPのcURLでAPIやWebサイトへのアクセス方法。file_get_contentsとの比較
PHPのcURLでAPIやWebサイトへのアクセス方法。file_get_contentsとの比較

PHPからWebサイトにアクセスしてHTMLを取得、APIにアクセスして情報を取得する場合は、cURLがオススメ。file_get_contentsでも可能だがエラー制御に難がありトラブルのもとになる。

PHPで配列の値をダブルクオーテーションで囲んでimplodeでカンマ区切りにする方法
PHPで配列の値をダブルクオーテーションで囲んでimplodeでカンマ区切りにする方法

PHPで配列の値を、preg_replace関数でクォーテーションで囲み、implode関数で「,(カンマ)」で区切ってテキスト化する方法。この方法であれば配列が空でも分岐の処理は必要なし!

ECCUBEの管理画面のSSL設定をインストール後に変更する方法

ECCUBEをインストールした後から管理画面のSSL設定を変更する方法を解説します。config.phpファイルのHTTPS_URLとADMIN_FORCE_SSLの値を変更すればOK。

SEO対策用タイトル、ディスクリプションの文字数カウントツール

SEO対策に使える文字数カウントツールで文字数の条件の説明も行っています。

PHPで特定の日間の日付を for、strtotimeで表示する

ある特定の間の日付の情報を for文、strtotimeを使って作成し、その解説をしています。

路線・駅検索をPHPで実装する方法解説。GoogleMapsの緯度経度から計算し検索
路線・駅検索をPHPで実装する方法解説。GoogleMapsの緯度経度から計算し検索

路線・駅検索の仕組みの構築は大変。登録する側も最寄り駅が多い場合は大変。なので簡易に実装するため緯度経度に基づき直線距離を計算する処理を考案して実装して、その処理を解説。

PHPで1ヵ月前、先月、今月1日、来月末の日付などの算出はDateTimeImmutableを使う
PHPで1ヵ月前、先月、今月1日、来月末の日付などの算出はDateTimeImmutableを使う

PHPには日時をオブジェクトとして生成する関数「DateTimeImmutable」「DateTime」が用意されている。これを利用して1ヶ月後、月初日、月末日、5日後などを指定して日付を取得できる。

サーバ移転、PHPバージョンアップでPHPのソースコードが表示される・ショートタグのPHPが動かない

PHPでショートタグを使うのは危険。サーバ移転やバージョンアップで動かなくなる!ソースが丸見え、設定情報流出のリスクが!php.iniのshort_open_tagの設定を再確認。

ECCUBEの新規追加ページがInternal Server Error・Not Foundに

ECCUBEで新規追加したページがInternal Server Errorに!原因はファイルのパーミッションの場合が多くその対処方法とプログラムの修正ポイントを解説。Not Foundも解説。

路線・駅検索のために緯度経度からPHPで簡易的に距離を計算する処理解説
路線・駅検索のために緯度経度からPHPで2点間の距離を計算する処理解説

路線・駅検索の仕組みの構築は大変。それを簡易に実装するために緯度経度を元に距離計算をする仕組みを考案。まずは2点間の距離を計算する仕組みを解説し、距離計算にまつわる関連技術も紹介。