加盟店様からイプシロンへ決済情報を送信するためには、 オーダー情報送信先 CGI(https://beta.epsilon.jp/cgi-bin/order/receive_order3.cgi)に必要な注文情報のデータをパラメータとして付与する必要があります。
data = {
"version" => "2",
"contract_code" => contract_code,
"user_id" => user_id,
"user_name" => user_name,
"user_mail_add" => user_mail_add,
"item_code" => item_code,
"item_name" => @item_name,
"order_number" => order_number,
"st_code" => st_code[st],
"mission_code" => mission_code,
"item_price" => @item_price,
"process_code" => process_code,
"memo1" => memo1,
"memo2" => memo2,
"xml" => "1",
"character_code" => "UTF8"
}
# EPSILONに接続して送信
result = http.start do
http.request( post_data )
end
if result.code == "200" then
##xml = REXML::Document.new(result.body)
xml = REXML::Document.new(( result.body.gsub("x-sjis-cp932","Shift_JIS"))) # 文字コードをSJISとして読み込む(CP932はSJISの拡張なので基本はOK)
xml.elements.each("Epsilon_result/result") do |element|
element.attributes.each do |name, value|
response[name] = CGI.unescape(value)
end
end
else
# イプシロンに対して接続に失敗
err_msg = "データの送信に失敗しました %s:%s
"%[result.code,result.message]
order_form(err_msg, item, user_id, user_name, user_mail_add)
exit 1
end
# result = 1 の場合、送信に成功
if response["result"] == "1" then
# recdirectがある場合
if response.key?("redirect") then
print cgi.header({"status" => "REDIRECT", "Location" => response["redirect"]})
exit
elsif response.key?("trans_code") then
print cgi.header({"status" => "REDIRECT", "Location" => confirm_url+("?trans_code=%d"%[response["trans_code"]] )})
exit
else
# リダイレクトの指定なし、trans_codeがない場合は会員情報変更等
result_page( response['result'] );
exit
end
else
# データ送信結果が失敗だった場合、オーダー入力画面に戻し、エラーメッセージを表示します。
err_msg = "%s:%s"%[response["err_code"],response["err_detail"]]
order_form(err_msg, item, user_id, user_name, user_mail_add)
exit 1
end
$request->addPostParameter('version', '2' );
$request->addPostParameter('contract_code', $contract_code);
$request->addPostParameter('user_id', $user_id);
$request->addPostParameter('user_name', mb_convert_encoding($user_name, "UTF-8", "auto"));
$request->addPostParameter('user_mail_add', $user_mail_add);
$request->addPostParameter('item_code', $item_code);
$request->addPostParameter('item_name', mb_convert_encoding($item_name, "UTF-8", "auto"));
$request->addPostParameter('order_number', $order_number);
$request->addPostParameter('st_code', $st_code[$st]);
$request->addPostParameter('mission_code', $mission_code);
$request->addPostParameter('item_price', $item_price);
$request->addPostParameter('process_code', $process_code);
$request->addPostParameter('memo1', $memo1);
$request->addPostParameter('memo2', $memo2);
$request->addPostParameter('xml', '1');
$request->addPostParameter('character_code', 'UTF8' );
// HTTPリクエスト実行 $response = $request->send();
if (!PEAR::isError($response)) {
$res_code = $response->getStatus();
$res_content = $response->getBody();
//xml unserializer
$temp_xml_res = str_replace("x-sjis-cp932", "UTF-8", $res_content);
$unserializer =& new XML_Unserializer();
$unserializer->setOption('parseAttributes', TRUE);
$unseriliz_st = $unserializer->unserialize($temp_xml_res);
if ($unseriliz_st === true) {
//xmlを解析
$res_array = $unserializer->getUnserializedData();
$is_xml_error = false;
$xml_redirect_url = "";
$xml_error_cd = "";
$xml_error_msg = "";
$xml_memo1_msg = "";
$xml_memo2_msg = "";
$result = "";
$trans_code = "";
foreach($res_array['result'] as $uns_k => $uns_v){
list($result_atr_key, $result_atr_val) = each($uns_v);
switch ($result_atr_key) {
case 'redirect':
$xml_redirect_url = rawurldecode($result_atr_val);
break;
case 'err_code':
$is_xml_error = true;
$xml_error_cd = $result_atr_val;
break;
case 'err_detail':
$xml_error_msg = mb_convert_encoding(urldecode($result_atr_val), "UTF-8" ,"auto");
break;
case 'memo1':
$xml_memo1_msg = mb_convert_encoding(urldecode($result_atr_val), "UTF-8" ,"auto");
break;
case 'memo2':
$xml_memo2_msg = mb_convert_encoding(urldecode($result_atr_val), "UTF-8" ,"auto");
break;
case 'result':
$result = mb_convert_encoding(urldecode($result_atr_val), "UTF-8" ,"auto");
break;
case 'trans_code':
$trans_code = mb_convert_encoding(urldecode($result_atr_val), "UTF-8" ,"auto");
break;
default:
break;
}
}
}else{
//xml parser error
$err_msg = "xml parser error
";
order_form();
exit(1);
}
}else{ //http error
$err_msg = "データの送信に失敗しました
";
$err_msg .= "
res_statusCd=" . $request->getResponseCode();
$err_msg .= "
res_status=" . $request->getResponseHeader('Status');
$err_msg .= "
ErrorMessage" . $response->getMessage();
order_form();
exit(1);
}
if($is_xml_error){
// データ送信結果が失敗だった場合、オーダー入力画面に戻し、エラーメッセージを表示します。
$err_msg = "エラー : " . $xml_error_cd . $xml_error_msg;
order_form();
exit(1);
}else{
if( !empty( $xml_redirect_url ) ){
// データ送信に成功した場合、リダイレクト先URLへリダイレクトさせてください。
header("Location: " . $xml_redirect_url);
exit(0);
}elseif( !empty($trans_code ) ){
header("Location: ".$confirm_url."?trans_code=".$trans_code);
exit(0);
}else{
result_page( $result );
exit(0);
}
}
}
SettlementSendInfo si = this.getSettlmentSendInfo(); Listparam = new ArrayList (); Integer processCode = si.getProcessCode(); ~ switch (processCode){ case 1: case 2: // 初回/登録済み課金 param.add( new BasicNameValuePair("version", si.getVersion().toString())); param.add( new BasicNameValuePair("contract_code", this.getConfig().getContract_code() )); param.add( new BasicNameValuePair("user_id", si.getUserId())); param.add( new BasicNameValuePair("user_name", si.getUserName())); param.add( new BasicNameValuePair("user_mail_add", si.getUserMailAdd())); param.add( new BasicNameValuePair("item_code", si.getItemCode())); param.add( new BasicNameValuePair("item_name", si.getItemName())); param.add( new BasicNameValuePair("order_number", si.getOrderNumber())); param.add( new BasicNameValuePair("st_code", si.getStCode())); param.add( new BasicNameValuePair("mission_code",si.getMissionCode().toString())); param.add( new BasicNameValuePair("item_price", si.getItemPrice().toString())); param.add( new BasicNameValuePair("process_code", si.getProcessCode().toString())); param.add( new BasicNameValuePair("memo1", si.getMemo1())); param.add( new BasicNameValuePair("memo2", si.getMemo2())); param.add( new BasicNameValuePair("character_code", si.getCharacterCode())); param.add( new BasicNameValuePair("xml", si.getXml().toString()));
// 決済情報送信
// 送信用の設定を作成
RequestConfig rc = RequestConfig.custom().setConnectTimeout(2000)
.setSocketTimeout(2000)
.setMaxRedirects(0)
.build();
// Header定義
List<Header> header = new ArrayList<Header>();
header.add( new BasicHeader("Accept-Charset","UTF-8" )) ;
header.add( new BasicHeader("User-Agent","EPSILON SAMPLE PROGRAM JAVA" ));
HttpClient client = HttpClientBuilder.create()
.setDefaultRequestConfig(rc)
.setDefaultHeaders(header)
.build();
List<NameValuePair> param = this.makeSendParam();
HttpPost post = new HttpPost();
HttpResponse res = null;
try {
post.setEntity(new UrlEncodedFormEntity(param,"UTF-8"));
post.setURI(new URI(this.getConfig().getOrder_url()));
res = client.execute(post);
}catch(Exception e){
e.printStackTrace();
return null;
}
SettlementResultInfo settleResultInfo = new SettlementResultInfo();
if( res.getStatusLine().getStatusCode() == HttpStatus.SC_OK ){
// BODYを取得してXMLパーサー呼び出し
try{
String xml = EntityUtils.toString(res.getEntity());
//x-sjis-cp932だとエンコーダの未対応でエラーとなる
xml = xml.replace("x-sjis-cp932", "Shift_JIS");
//System.out.println(xml);
InputStream body = new java.io.ByteArrayInputStream(xml.getBytes());
Document xmlDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(body);
NodeList resultList = xmlDoc.getElementsByTagName("result");
for( int i = 0; i < resultList.getLength(); i++) {
Node node = resultList.item(i);
NamedNodeMap namedNodeMap = node.getAttributes();
for( int j =0; j < namedNodeMap.getLength(); j++ ){
Node attr = namedNodeMap.item(j);
switch (attr.getNodeName()) {
case "result":
settleResultInfo.setResult(attr.getNodeValue());
break;
case "err_code":
settleResultInfo.setErrCode(attr.getNodeValue());
break;
case "err_detail":
settleResultInfo.setErrDetail(new String(URLDecoder.decode(attr.getNodeValue(),"UTF-8").getBytes("UTF-8"),"UTF-8" ));
break;
case "memo1":
settleResultInfo.setMemo1( new String(URLDecoder.decode(attr.getNodeValue(),"UTF-8").getBytes("UTF-8"),"UTF-8" ));
break;
case "memo2":
settleResultInfo.setMemo2( new String(URLDecoder.decode(attr.getNodeValue(),"UTF-8").getBytes("UTF-8"),"UTF-8" ));
break;
case "redirect":
settleResultInfo.setRedirect(new String(URLDecoder.decode(attr.getNodeValue(),"UTF-8").getBytes("UTF-8"),"UTF-8" ));
break;
case "trans_code":
settleResultInfo.setTransCode(attr.getNodeValue());
break;
}
}
}
}catch ( Exception e){
e.printStackTrace();
return null;
}
}else{
// 応答が200以外の場合は不明
return null;
}
my %data = ();
%data = (
version => "2", # バージョン
contract_code => $contract_code, # 契約コード
user_id => $user_id, # ユーザーID
user_name => $user_name, # ユーザー名
user_mail_add =>
$user_mail_add, # ユーザーメールアドレス
item_code => $item_code, # 商品コード
item_name => $item_name, # 商品名
order_number => $order_number, # 注文番号
st_code => $select_st_code{$st}, # 決済区分
mission_code => $mission_code, # 課金区分
item_price => $item_price, # 価格
process_code => $process_code, # 処理区分
memo1 => $memo1, # 追加情報1
memo2 => $memo2, # 追加情報2
character_code => "UTF8", # 文字コード
xml => '1' # 応答形式 (0:html 1:XML)
);
my $ua = LWP::UserAgent->new; $ua->timeout(20); $ua->ssl_opts( verify_hostname => 0 ); my $rq = POST $order_url, [%data]; my $res = $ua->request($rq);
if ( $res->is_success ) {
# 応答内容(XML)の解析
my $xml = $res->content;
my $parser = new XML::DOM::Parser;
my $doc = $parser->parse($xml);
my $nodes = $doc->getElementsByTagName("Epsilon_result")->item(0)
->getElementsByTagName("result");
my $n = $nodes->getLength;
for ( my $i = 0; $i < $n; $i++ ) {
my $node = $nodes->item($i);
traverse($node);
}
sub traverse {
my ($node) = @_;
if ( $node->getNodeType == ELEMENT_NODE ) {
foreach my $child ( $node->getChildNodes() ) {
traverse($child);
}
foreach my $at ( $node->getAttributes ) {
# 値の取得
my $value = $at->item(0)->getNodeValue;
# URLデコード(値はURLエンコードされています)
$value =~ s/\+/ /g;
$value =~ s/%([a-fA-F0-9]{2})/ chr(hex($1))/ge;
# $value = Encode::decode('shiftjis',$value);
# 変数名と値を連想配列に格納
$response{ $at->item(0)->getNodeName } = $value;
}
}
}
}
else {
$err_msg
= sprintf "データの送信に失敗しました %s
",
$res->status_line;
order_form();
exit 1;
}
if ( !$response{'result'} ) {
# データ送信結果が失敗だった場合、オーダー入力画面に戻し、エラーメッセージを表示します。
$err_msg = sprintf "%s:%s", $response{'err_code'},
$response{'err_detail'};
order_form();
exit 1;
}
通常決済をご利用いただく際には、処理区分(パラメータ:process_code)は 1(初回課金)を設定していただきます。
カード決済のみ2(登録済み課金)を設定することができ、パラメータとして設定いただいたユーザの情報がイプシロンに登録されていた場合に、ユーザに紐づく保存されているカード情報から決済を実施することができます。
<種別説明>
◎:必須項目 イプシロンが提供している値を設定してください。
○ :必須項目 表中の説明に従い設定してください。
● :必須項目 注文単位でユニークな値を設定してください。
△:一部必須 コンビ二種別の場合必須項目となります。
- :任意項目 未設定の場合は説明に記載されている値が設定されます。
| № | 項目名 | パラメータ名 | 種別 | 属性 | 例 | 説明 |
|---|---|---|---|---|---|---|
| 1 | CGIバージョン | version | ○ | 半角数字 | 1 | CGIバージョンです。 1固定 |
| 2 | 契約コード | contract_code | ◎ | 半角英数字 8byte(固定) |
99999999(固定) | イプシロンが加盟店様ごとに採番 申込時に弊社の申込完了画面及びメールにて通知 |
| 3 | ユーザーID | user_id | ○ | 半角英数字 .-+/@ 64byte以下 |
Epsilon0001 | クレジットカード決済の登録済み課金及び定期課金を利用の場合、購入者様特定のため、購入者様単位でユニークなものを設定。 上記機能をご利用しない場合は自由に設定可能 |
| 4 | ユーザー氏名 | user_name | ○ | EUC or S -JIS 64byte | イプシロン 太郎 | 購入者様の名前 |
| 5 | メールアドレス | user_mail_add | ○ | 半角英数字 .-_@ 128byte以下 |
test@epsilon.jp | 購入者様のメールアドレス オンラインコンビニ決済申し込みの際、 このメールアドレスに受付番号を送信 |
| 6 | 商品コード | item_code | ○ | 半角英数字 .-+/ 64byte以下 |
EP-0001 | 商品のコード 「0(数字のゼロ)」のみで構成される文字列の指定は不可。 |
| 7 | 商品名 | item_name | ○ | EUC or S -JIS 64byte | りんご | 商品名
複数の商品を一度に記載する場合は制限文字数
(半角64文字、全角32文字)以内とする スマートフォンキャリア決済(au)に限り以下文字列使用不可 ローマ数字, ~, 【, 】, - |
| 8 | オーダー番号 | order_number | ● | 半角英数字 32byte | 0312345 | 注文単位でユニークに設定 同じオーダー番号で注文を実行するとエラー |
| 9 | 決済区分 | st_code | ○ | nnnnn-nnnn-nnnnn-nnnnn-nnnnn-nnnnn-nnnnn (n:0or1) | 10100-0000-00000- 00000-00000-00000- 00000 |
前述の決済区分を参照 |
| 10 | 課金区分 | mission_code | ○ | 1~10 | 1 | 1回課金の場合は「1」を指定。課金区分の詳細はこちら |
| 11 | 価格 | item_price | ○ | 1~9999999 | 4725 | クレジットカード決済(1回課金):9,999,999以下を設定 コンビニ決済:299,999以下を設定 PayPay銀行決済:9,999,999以下を設定 楽天銀行決済:9,999,999以下を設定 住信SBIネット銀行決済:9,999,999以下を設定 ウェブマネー決済:199,999以下を設定 BitCash:199,999以下を設定 電子マネーちょコム:99,999以下を設定 ペイジー:9,999,999以下を設定 PayPal決済:499,999以下を設定 Yahoo! ウォレット:499,999以下を設定 スマートフォンキャリア決済:30,000以下を設定 GMO後払い決済:49,999以下を設定 クレジットカード決済(多通貨):通貨コード毎に異なる。 別表参照 JCBオンラインプリペイドサービス:50,000以下を設定 |
| 12 | 処理区分 | process_code | ○ | 1~9 | 1 | 1:初回課金 2:登録済み課金 |
| 13 | 予備1 | memo1 | - | EUC or S -JIS 128byte | これはテストです | 自由に設定 |
| 14 | 予備2 | memo2 | - | EUC or S -JIS 128byte | これはテストです | 自由に設定 |
| 15 | 応答形式 | xml | - | 0~1 | 1 | 応答の形式 1:XML形式 を選択 |
| 16 | 文字コード | character_code | ○ | 半角英字- | UTF8 | 本CGIパラメータ送付時の文字コード 指定可能な文字コードはUTF8 |
| 17 | 言語コード | lang_id | - | 半角英字- | ja | 指定することで決済画面の表示言語を指定できます。 ja:日本語 en:英語 |
| 18 | 通貨コード | currency_id | △ | 半角英字 | JPY | 日本円以外の決済が可能な決済手段の場合に、指定することで、指定された通貨にて決済が可能です。 指定しない場合はJPY(日本円)が指定されます。 利用可能な通貨コードに関しては後述 |
| 19 | 3DS2.0フラグ | tds_flag | ○ | 半角数字2桁 | 21 | 21 または 22を設定 |
【3Dセキュア義務化について】
3Dセキュアの義務化に伴いクレジットカード決済、多通貨決済では3Dセキュア認証支援サービスのご利用が必須となります。
3Dセキュア認証支援サービスご利用のためのご対応、システム構築をお願いいたします。
3Dセキュア専用パラメータは下記リンク先をご確認ください。
3Dセキュア専用パラメータ
応答結果が正常に受け取れた場合は、受け取ったパラメータに対応した各決済画面へリダイレクトさせる必要があります。
以下パラメータがXML形式で返却されます。
| № | 項目名 | パラメータ名 | 種別 | 属性 | 説明 |
|---|---|---|---|---|---|
| 1 | 実行結果 | result | ◎ | 半角数字 | 処理結果を記載 1:成功 0:失敗 決済方法選択画面出力の場合は1:成功が設定される |
| 2 | リダイレクト先 | redirect | ◎ | URLエンコード済み | 設定されたリダイレクト先にリダイレクトする設定 表示画面は選択された決済方法によって変化する |
| № | 項目名 | パラメータ名 | 種別 | 属性 | 説明 |
|---|---|---|---|---|---|
| 1 | 実行結果 | result | ◎ | 半角数字 | 処理結果を記載 0:失敗 |
| 2 | エラーコード | err_code | ◎ | URLエンコード済み | 対応するのエラーコード 別紙「エラーコード一覧」を参照 |
| 3 | エラー内容 | err_detail | ○ | URLエンコード済み(S-JIS) | 対応するエラーメッセージ 購入者様に通知するため画面上に表示を推奨 |
| 4 | 予備1 | memo1 | ○ | URLエンコード済み(S-JIS) | 設定した「memo1」と同様 |
| 5 | 予備2 | memo2 | ○ | URLエンコード済み(S-JIS) | 設定した「memo2」と同様 |
post_data = Net::HTTP::Post.new( getsales_url.request_uri )
post_data.set_form_data(
"trans_code" => trans_code,
"contract_code" => user_id
)
http = Net::HTTP.new(getsales_url.host,getsales_url.port)
http.use_ssl = true # SSLを有効にします
http.verify_mode = OpenSSL::SSL::VERIFY_NONE # ローカル試験用で消す
http.open_timeout = 20 # セッション接続までのタイムアウト時間
http.read_timeout = 20 # 応答を待つまでのタイムアウト時間
# EPSILONに接続して送信
result = http.start do
http.request( post_data )
end
if !result.code == 200 then
# インターフェイスCGIの実行に失敗した場合
err_msg = "HTTPリクエストの送信に失敗しました。%s:%s"%[res.code,res.message]
print_html(err_msg,nil,nil,nil,nil);
exit;
end
# 結果を読み込み
xml = REXML::Document.new(( result.body.gsub("x-sjis-cp932","Shift_JIS"))) # 文字コードをSJISとして読み込む(CP932はSJISの拡張なので基本はOK)
#p result.body
response = Hash.new
xml.elements.each("Epsilon_result/result") do |element|
element.attributes.each do |name, value|
response[name] = CGI.unescape(value)
end
end
result_html = nil
$request = new HTTP_Request2($getsales_url, HTTP_Request2::METHOD_POST);
$request->setConfig(array(
'ssl_verify_peer' => false,
# 'ssl_verify_peer' => true,
'ssl_cafile' => '/etc/ssl/certs/ca-bundle.crt', //ルートCA証明書ファイルを指定
));
$request->setHeader("Content-Type","application/x-www-form-urlencoded");
$request->setBody("trans_code=" . $trans_code);
$request->setAuth($user_id, $passwd,HTTP_Request2::AUTH_BASIC);
$response = $request->send();
if (PEAR::isError($response)) {
// インターフェイスCGIの実行に失敗した場合
$err_msg = "データの送信に失敗しました
";
$err_msg .= "
res_statusCd=" . $response->getStatus();
$err_msg .= "
res_status=" . $response ->getHeader('Status');
echo $err_msg;
exit;
}
// CGIの実行に成功した場合、応答内容(XML)を解析します
// 応答内容(XML)の解析
$res_code = $response ->getStatus();
$res_content = $response ->getBody();
#fputs(STDERR, $res_content );
//xml unserializer
$temp_xml_res = $res_content;#str_replace("x-sjis-cp932", "Shift-JIS", $res_content);
$unserializer =& new XML_Unserializer();
$unserializer->setOption('parseAttributes', TRUE);
$unseriliz_st = $unserializer->unserialize($temp_xml_res);
if ($unseriliz_st === true) {
//xmlを解析
$res_array = $unserializer->getUnserializedData();
//error check
if($res_array['result']['result'] == "0"){
echo "処理に失敗しました
";
exit(1);
}
$res_param_array = array();
//pram setting
foreach($res_array['result'] as $uns_k => $uns_v){
list($result_atr_key, $result_atr_val) = each($uns_v);
$res_param_array[$result_atr_key] = mb_convert_encoding(urldecode($result_atr_val), "UTF-8" ,"auto");
}
$debug_printj .= "
xml_memo2_msg=" . $xml_memo2_msg;
}else{
//xml parser error
echo "xml parser error
";
exit(1);
}
// 決済結果を取得する EpsilonGetSales epsilonGetSales = new EpsilonGetSales(config); GetSalesResultInfo salesReulstInfo = epsilonGetSales.execute(transCode);
if( salesReulstInfo == null ){
request.setAttribute("err_msg", "決済結果取得接続処理でエラーが発生しました");
}else{
request.setAttribute("resultInfo", salesReulstInfo);
}
my $ua = LWP::UserAgent->new;
$ua->ssl_opts( verify_hostname => 0 );
my $req = HTTP::Request->new(POST => $getsales_url);
$req->content_type('application/x-www-form-urlencoded');
$req->content("trans_code=$trans_code&contract_code=$user_id");
my $res = $ua->request($req);
if (! $res->is_success){
# インターフェイスCGIの実行に失敗した場合
$err_msg = sprintf "HTTPリクエストの送信に失敗しました。%s:%s",$res->code,$res->message;
print_html($err_msg);
exit;
}
# CGIの実行に成功した場合、応答内容(XML)を解析します
my $xml = $res->content;
my $parser = new XML::DOM::Parser;
my $doc = $parser->parse($xml);
my $nodes = $doc->getElementsByTagName ("Epsilon_result")->item(0)->getElementsByTagName("result");
my $n = $nodes->getLength;
for (my $i = 0; $i < $n; $i++){
my $node = $nodes->item ($i);
traverse($node);
}
sub traverse {
my($node)= @_;
if ($node->getNodeType == ELEMENT_NODE) {
foreach my $child ($node->getChildNodes()) {
traverse($child);
}
foreach my $at ($node->getAttributes){
# 値の取得
my $value = $at->item(0)->getNodeValue;
# URLデコード (値はURLエンコードされています。)
$value =~ s/\+/ /g;
$value =~ s/%([a-fA-F0-9]{2})/ chr(hex($1))/ge;
#$value = Encode::decode('shiftjis',$value);
# 変数名と値を連想配列に格納
$response{$at->item(0)->getNodeName} = $value
}
}
取引での決済(コンビニ決済の場合は注文受付)完了後、取引の詳細な情報を確認するための処理です。
以下のパラメータを付与し、オーダー情報確認 CGI(https://beta.epsilon.jp/cgi-bin/order/getsales2.cgi)に接続することで、取引のデータをXML形式にて返却します。
| № | 項目名 | パラメータ名 | 属性 | 例 | 説明 |
|---|---|---|---|---|---|
| 1 | 契約コード | contract_code | 半角数字 8桁 | 12345600 | 弊社から提供しております契約番号となります。 複数の契約番号を利用されている加盟店様につきましては詳細な情報を取得したい取引の契約番号を設定 |
| 2 | トランザクションコード | trans_code | 半角数字 | 99999999 | 詳細な情報を取得したい取引のトランザクションコードを設定 決済もしくは注文受付時にイプシロンで採番し送信した値を設定のこと |
| № | 項目名 | パラメータ名 | 種別 | 属性 | 説明 |
|---|---|---|---|---|---|
| 1 | トランザクションコード | trans_code | ◎ | 半角数字 | イプシロンで発行する取引単位のID、全てユニークの番号 |
| 2 | オーダー番号 | order_number | ○ | URLエンコード済み | 設定した「order_number」と同様 |
| 3 | 支払い状態 | state | ◎ | 半角数字 | 支払いの状態が表示 1:支払い済み 、0:決済未完了 コンビニ決済の場合入金処理が行われた時に支払い済みとなるため、オンライン取引の際には0が設定される |
| 4 | ユーザーID | user_id | ○ | URLエンコード済み | 設定した「user_id」と同様 |
| 5 | ユーザー氏名 | user_name | ○ | URLエンコード済み(S-JIS) | 設定した「user_name」と同様 |
| 6 | 処理区分 | process_code | ○ | 半角数字 | 設定した「process_code」と同様 コンビニ決済の場合「1」が設定 |
| 7 | 価格 | item_price | ○ | 半角数字 | 設定した「item_price」と同様 |
| 8 | 予備1 | memo1 | ○ | URLエンコード済み(S-JIS) | 設定した「memo1」と同様 |
| 9 | 予備2 | memo2 | ○ | URLエンコード済み(S-JIS) | 設定した「memo2」と同様 |
| 10 | 課金区分 | mission_code | ○ | 半角数字 | 設定した「mission_code」と同様 コンビニ決済の場合「1」が設定 |
| 11 | メールアドレス | user_mail_add | ○ | URLエンコード済み | 設定した「user_mail_add」と同様 |
| 12 | 決済区分 | st_code | ○ | URLエンコード済み | 設定した「st_code」と同様 コンビニ決済でブランド指定の場合 「00100-0000-00000-00000-00000-00000-00000」が設定 |
| 13 | 契約コード | contract_code | ◎ | 半角数字 | 設定した「contract_code」と同様 |
| 14 | 商品名 | item_name | ○ | URLエンコード済み(S-JIS) | 設定した「item_name」と同様 |
| 15 | 決済方法 | payment_code | ◎ | 半角数字 | 実際に選択された決済方法を設定 3:コンビニ決済 *当応答ではコンビニ決済のみ返ってきます。 |
| 16 | 商品コード | item_code | ○ | URLエンコード済み | 設定した「item_code」と同様 |
| 17 | コンビニ種別 | conveni_code | ○ | 半角数字 | 決済に利用したコンビニのブランドおよびペイジー 11:セブンイレブン、21ファミリーマート、 31:ローソン、32:セイコーマート、88:ペイジー |
| 18 | 受付番号 | receipt_no | ◎ | 半角数字 | コンビニ各社の受付番号 セブンイレブン:13桁 ファミリーマート:12桁 ローソン、セイコーマート:7桁 |
| 19 | 企業コード | kigyou_code | △ | 半角数字(5桁) | コンビニ決済:ファミリーマート を選択時のみ設定 |
| 20 | 払込票URL | haraikomi_url | △ | URLエンコード済み デコード後 英数字と「:」「/」「.」「~」「?」「=」「&」の記号 |
コンビニ決済:セブンイレブン選択時のみ設定 |
| 21 | 入金済みフラグ | paid | ◎ | 半角数字(1桁) | 支払いの状態が表示。 1:支払い済み 、0:決済未完了 コンビニ決済の場合入金処理が行われた時に支払い済みとなるため、オンライン取引の際には0が設定される |
| 22 | 受付日時 | receipt_date | ○ | URLエンコード済み デコード後 YYYY-MM-DD hh:mm:ss |
イプシロンでコンビニ決済を受け付けた日時が設定 |
| 23 | コンビニ支払期限 | conveni_limit | ◎ | URLエンコード済み デコード後 YYYY-MM-DD |
当日 + 0~10日のコンビニ会社への入金期限の設定。 未設定の場合はイプシロン管理画面の設定が採用されます。 イプシロン管理画面の設定より「conveni_limit」の指定が優先されます。 |
| 24 | コンビニ入金日時 | conveni_time | × | URLエンコード済み デコード後 YYYY-MM-DD hh:mm:ss |
購入者様がコンビニへ入金した日時 オンライン取引の際には未入金ですので空文字が設定 |
カード決済の取消・金額変更はイプシロンの管理画面または専用のCGIにて処理が可能です。
CGIの詳細は、管理画面よりダウンロードいただける「イプシロン決済システム仕様書」にてご確認いただけます。
▼仕様書のダウンロードはこちら
管理画面【サポート】⇒【各種資料ダウンロード】