GMOイプシロンの決済代行システムでテストしてます。その1

GMO イプシロンが提供する決済代行サービスを利用するためにテストを行っているので備忘録としてこちらに残しておこうと思います。
このシステム仕様書が分かりにくいので、テストしながら作っています。

同じように困っている方の一助になれば幸いです。


リンク決済とトークン決済

イプシロンではリンク決済という方法とトークン決済という方法があります。

リンク決済では支払情報 (合計金額や購入者情報) をイプシロンに送ってイプシロン側の決済画面で決済を完了させます。
決済が完了すればその通知をしていしたプログラムで受け取ることができます。
(指定した URL がイプシロンから呼び出されます)

個人経営のネットショップなどではこちらの方が不安感が少なくて良いと思います。
なので、こちらのリンク決済を使っていきます。

トークン決済では、クレジットカード情報をトークンというものに置き換えてそのトークンでイプシロンと接続することで自分のサイト内であたかも決済を行っているように見せることができます。
こちらはある程度有名なお店や実店舗の延長で販売するような場合に、画面遷移がなく決済が自サイト内で完結するので適していると思います。

決済データをテスト環境のCGIへPHPで送信する

というわけでリンク決済を行っていきます。
一応サンプルコードは公式の開発者資料に書かれていますが、ちょっと分かりにくいです。

そして、サンプルコードを実行するには “PEAR” というモジュールが必要です。
導入しても良いですが、モジュールなしでも簡単に POST 送信処理できるので、モジュールなしで行います。
※例外処理やエラー対策は色々とやらないといけないですが、ここでは割愛します。

以下がテスト環境での送信テスト用コードです。
※イプシロンの CGI の動きを確認する為のコードなので支払情報を取得したりしていませんので、決済システムを作る際は適宜変更して下さい。

<?php

/*********************************
// GMO Epsilon リンク決済テスト //
*********************************/

// テスト環境用の送信URL
$url = 'https://beta.epsilon.jp/cgi-bin/order/receive_order3.cgi';

// 送信用の仮データ
$data = array(
	'contract_code'     => '********',   // 契約コード 8byte
	'user_id'           => 'testuser001',   // ユーザID (使用可能文字:[a-zA-Z0-9.-+/@]{1,64})
	'user_name'         => '山本大介',   // ユーザ名 (EUC or S-JIS, 64byteまで)
	'user_mail_add'     => 'hogehoge@gmail.com',   // メールアドレス (半角英数字.-_@ 128byte以下)
	'item_code'         => 'test-0001',   // 商品コード、おそらく何でもよい (使用可能文字:[a-zA-Z0-9.-+/]{1,64}, 0のみは禁止)
	'item_name'         => 'あいちのかおり10kg / 他2点',   // 商品名 (EUC or S-JIS, 64byteまで)
	'order_number'      => rand(0,99999999),   // オーダー番号 (重複しないユニークな番号)
	'st_code'           => '11110-0000-00000-00000-00000-00000-00000',   // 決済区分 クレカとコンビニ、ジャパン銀行の場合は'11110-0000-00000-00000-00000-00000-00000'
	'mission_code'      => '1',   // 課金区分 (都度課金の場合は'1', 定期購入は2~)
	'item_price'        => '99999',   // 価格
	'process_code'      => '1',   // 処理区分 (都度課金の場合は'1')
	'memo1'             => 'めも(1)',   // メモ、自由に設定できる (EUC or S-JIS, 128byteまで)
	'memo2'             => 'メモ(2)',   // メモ、自由に設定できる (EUC or S-JIS, 128byteまで)
	'xml'               => '1',   // 応答形式 (0 or 1 -> 1:XML, 0:不明)
	'conveni_code'      => '',   // コンビニ払いの指定 (11:セブンイレブン、21ファミリーマート、31:ローソン、32:セイコーマート、33:ミニストップ)
	'user_tel'          => '***********',   // ユーザの電話番号
	'conveni_limit'     => '',   // コンビニ払いの期限設定 (未指定の場合は管理画面の期限、指定する場合の書式は'YYYY-MM-DD')
	'delivery_code'     => '99',   // 配送区分 ('99'固定)
	'consignee_postal'  => '*******',   // 送り先の郵便番号 (任意)
	'consignee_name'    => 'オクリサキ ダイスケ',   // 送り先の名前 (任意) (EUC or S-JIS, 64byteまで)
	'consignee_address' => '静岡県掛川市***',   // 送り先の住所 (任意) (全角半角48文字以下)
	'consignee_tel'     => '**********',   // 送り先の電話番号 (任意)
	'orderer_postal'    => '*******',   // 注文主の郵便番号 (任意)
	'orderer_address'   => '静岡県掛川市***',   // 注文主の名前 (任意)
	'orderer_name'      => 'チュウモンヌシ ダイスケ',   // 注文主の名前 (任意)
	'orderer_tel'       => '***********',   // 注文主の電話番号 (任意)
	'lang_id'           => 'ja',   // 決済画面の言語設定 (ja:日本語、en:英語)
	'currency_id'       => 'JPY',   // 決済通貨 ('JPY'固定で大丈夫)
	'version'           => '2',   // 決済CGIのバージョン指定 (1:推奨文字コード->EUC, 2推奨文字コード->UTF-8)
	'page_type'         => '12'   // 表示形式 ('12'固定、オーバーレイ表示の場合のみ必須)
);

// データをURLエンコードした形に成形
$content = http_build_query($data);

// file_get_contens関数でPOST送信する準備
$options = array('http' => array(
	'method'  => 'POST',
	'content' => $content
));

// POST送信を実行
$contents = file_get_contents($url, false, stream_context_create($options));

// 戻り値を表示
echo var_dump($contents);

?>

とりあえず、これでデータをテスト環境に送信することができます。
‘****’ となっている部分は適宜変えて下さい。
一番上の “contract_code” だけはご自分の契約コードを使う必要があります。

上記をサーバにアップロードしてアクセスすると、以下のような XML データが返ってきます。

<?xml version="1.0" encoding="UTF-8" ?>
 <Epsilon_result>
  <result result="1" />
  <result redirect="https%3A%2F%2Fbeta.epsilon.jp%2Fcgi-bin%2Forder%2Fmethod_select3.cgi%3Ftrans_code%3D***********" />
  </Epsilon_result>

“redirect” の値がリンク決済を行う画面の URL になります。
実際にはこのコードを受け取ったら上記 URL にリダイレクトするようにすれば決済画面に進みます。

ちなみにですが URL エンコードされているのででコードして下さいね。

まとめ

以上、GMO イプシロンの決済システムへ支払情報を送るテストでした。

仕様書が分かりにくかったりサンプルコードが標準でないモジュールを使っていたりと敷居が高そうでしたが、やってみると意外と簡単に動いてくれるのでまずはテスト環境で遊んでみると良いと思います。

他にもテストしましたが、今回はここまでとします。

コメントを残す

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

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