PHPのコード例
① エンドポイントに投げるパラメータを用意する
(内容の詳細は一番下に記載)
$epsilonParams = [
"contract_code" => 12345, // 契約コード
"order_number" => 1, // 注文番号
"user_id" => 1, // ユーザーID
"user_name" => "テスト 太郎", // ユーザー名
"user_mail_add" => "tarou@test.com", // ユーザーメールアドレス
"item_price" => 10000, // 金額
"item_name" => "ガチャ", // 商品名
"item_code" => 123, // 商品コード
"xml" => 1, // XMLで取得
"st_code" => "10000-0000-00000-00000-00000-00000-00000", // 決済区分 (https://www.epsilon.jp/developer/transmission.html)
"mission_code" => 1, // 課金区分
"process_code" => 1, // 処理区分
];
② curlを使用して、エンドポイントに投げる
成功すると決済リンクが返ってくるので、リダイレクトする
$ch = curl_init();
// エンドポイントを指定
curl_setopt($ch, CURLOPT_URL, "https://beta.epsilon.jp/cgi-bin/order/receive_order3.cgi");
curl_setopt($ch, CURLOPT_POST, true);
// 上記で設定したパラメータを渡す
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($epsilonParams));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
if(curl_errno($ch)){
echo "イプシロンの注文情報作成でエラーが発生しました。". curl_error($ch);
} else {
$xml = new \SimpleXMLElement($response);
// 結果を解析
foreach ($xml->result as $element) {
$attributes = $element->attributes();
if (isset($attributes->err_code)) {
// エラーコード
$err_code = (string) $attributes->err_code;
} elseif (isset($attributes->err_detail)) {
// エラーメッセージ
$err_detail = (string) $attributes->err_detail;
$err_detail = mb_convert_encoding(urldecode($err_detail), "UTF-8", "SJIS");
} elseif (isset($attributes->redirect)) {
// 決済用URL
$redirect = (string) $attributes->redirect;
}
}
if (!empty($err_code)) {
echo "イプシロンの注文情報作成でエラーが発生しました。 : $err_code - $err_detail";
} elseif (!empty($redirect)) {
// 決済URLにリダイレクト
return redirect()->to($redirect);
}
}
上記はテスト決済用のサンプルなので、
本番運用時は本番用の決済エンドポイントに置き換えが必要
以下に記載の通り、本番環境のエンドポイントは契約時に共有される
テスト環境: https://beta.epsilon.jp/cgi-bin/order/receive_order3.cgi
※本番環境の接続先につきましては契約時に弊社サポートよりご連絡いたします。
Laravelでサービスクラスを作成した例
- .env
契約コードを記載
EPSILON_CONTRACT_CODE=12345
- config/services.php
上記を設定
'ses' => [
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
],
// 追加
'epsilon' => [
'contract_code' => env('EPSILON_CONTRACT_CODE')
],
- App/Services/EpsilonService.php
<?php
namespace App\Services;
use Illuminate\Support\Facades\Http;
class EpsilonService
{
/**
* @param array $data
* @return \Illuminate\Http\RedirectResponse|void
* @throws \Exception
*/
public function storeOrder(array $data)
{
$epsilonParams = [
"contract_code" => $data['contract_code'], // 契約コード
"order_number" => $data['order_number'], // 注文番号
"user_id" => $data['user_id'], // ユーザーID
"user_name" => $data['user_name'], // ユーザー名
"user_mail_add" => $data['user_mail_add'], // ユーザーメールアドレス
"item_price" => $data['item_price'], // 金額
"item_name" => $data['item_name'], // 商品名
"item_code" => $data['item_code'], // 商品コード
"st_code" => "10000-0000-00000-00000-00000-00000-00000", // 決済区分
"mission_code" => 1, // 課金区分
"process_code" => 1, // 処理区分
"xml" => 1, // XMLで取得
];
$response = Http::get("https://beta.epsilon.jp/cgi-bin/order/receive_order3.cgi", $epsilonParams);
if ($response->successful()) {
$responseContent = $response->body();
$xml = new \SimpleXMLElement($responseContent);
// 結果を解析
foreach ($xml->result as $element) {
$attributes = $element->attributes();
if (isset($attributes->err_code)) {
// エラーコード
$err_code = (string) $attributes->err_code;
} elseif (isset($attributes->err_detail)) {
// エラーメッセージ
$err_detail = (string) $attributes->err_detail;
$err_detail = mb_convert_encoding(urldecode($err_detail), "UTF-8", "SJIS");
} elseif (isset($attributes->redirect)) {
// 決済用URL
$redirect = (string) $attributes->redirect;
}
}
if (!empty($err_code)) {
throw new \Exception("イプシロンの注文情報作成でエラーが発生しました。 : $err_code - $err_detail");
} elseif (!empty($redirect)) {
// リダイレクトURLにリダイレクト
return redirect()->to($redirect);
}
} else {
throw new \Exception('イプシロンの注文情報作成でエラーが発生しました。');
}
}
}
パラメータの詳細
contract_code | 契約コード イプシロン管理画面で確認できる |
order_number | オーダー番号 (半角英数字) 既に登録されているものを指定するとエラーになるので ユニークな値を指定する |
user_id | ユーザーID (半角英数字) 既に登録しているユーザーのカードで課金したり定期課金する場合は対象のIDを指定する 上記を使用しない場合は自由に設定OK |
user_name | 購入者の名前 |
user_mail_add | 購入者のメールアドレス |
item_price | 決済価格 (1~9999999) |
item_name | 商品名 |
item_code | 商品コード (半角英数字) |
st_code | 決済区分 NNNNN-NNNN-NNNNN-NNNNN-NNNNN-NNNNN-NNNNNの形式で 利用するものを1にする (例) クレジット: 10000-0000-00000-00000-00000-00000-00000 コンビニ決済: 00100-0000-00000-00000-00000-00000-00000 後払い: 00000-0000-00000-00010-00000-00000-00000 上記3つ全て: 10100-0000-00000-00010-00000-00000-00000 |
mission_code | 課金区分 1: 都度課金 21~32: 定期課金 |
process_code | 処理区分 1: 初回課金 2: 登録済み課金 3: 登録のみ 4: 登録内容変更 7: 退会取消 8: 退会 |
xml | 応答形式 XML形式で応答が欲しい場合は1を指定する |
各種区分の詳細はこちら