定期課金 金額変更 / キャンセル

定期課金サービスは各取引について金額変更・キャンセルを行なうことができます。
それぞれCGIを提供させていただいております。

パラメータ(定期課金情報の生成)

# 発行されたユーザーID(契約コード)を入力してください
contract_code= '00000000'
param = cgi.params
item_code  = param["item_code"][0] || ""
item_price = param["item_price"][0] || "" 
user_id    = param["user_id"][0] || ""
come_from  = param["come_from"][0]

定期課金金額変更、キャンセル CGIへPOST

http = Net::HTTP.new( api_url[mode].host,api_url[mode].port)
http.use_ssl = true # SSLを有効にします

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]
  order_form(err_msg,nil,nil,nil,nil)
  exit
end
# 結果を読み込み
xml = REXML::Document.new(( result.body.gsub("x-sjis-cp932","Shift_JIS"))) # 文字コードをSJISとして読み込む(CP932はSJISの拡張なので基本はOK)

response = Hash.new
xml.elements.each("Epsilon_result/result") do |element|
    element.attributes.each do |name, value|
        # 1,文字列はエスケープ処理がされているので基に戻す
        # 2,エラーメッセージはVer1系統の場合SJIS、Ver2系統で登録したものはUTF8で返されるので文字コードを変換する
        response[name] = CGI.unescape(value).encode("UTF-8",xml.encoding )
    end
end

 if response['result'] != "1" then
    # データ送信結果が失敗だった場合、オーダー入力画面に戻し、エラーメッセージを表示します。
    err_msg = "%s:%s"%[response['err_code'],response['err_detail']]
    result_page(err_msg)
    exit 1
else
    result_page(nil, response['result'] )
    exit 0
end

パラメータ(定期課金情報の生成)

// 契約番号(8桁) オンライン登録時に発行された契約番号を入力してください。
$contract_code = '00000000';

$user_id = $_REQUEST['user_id'];        // ユーザID
$item_code = $_REQUEST['item_code'];    // 商品コード
$item_price = $_REQUEST['item_price'];  // メールアドレス

定期課金金額変更、キャンセル CGIへPOST

$api_url = array(
   change => "https://beta.epsilon.jp/cgi-bin/order/regularly_amount_change.cgi",
   cancel => "https://beta.epsilon.jp/cgi-bin/order/regularly_cancel.cgi",
);


  // httpリクエスト用のオプションを指定
  $option = array(
    "timeout" => "20", // タイムアウトの秒数指定
  //    "allowRedirects" => true, // リダイレクトの許可設定(true/false)
  //    "maxRedirects" => 3, // リダイレクトの最大回数
  );

  // HTTP_Requestの初期化

  $request = new HTTP_Request2($api_url[$mode], HTTP_Request2::METHOD_POST, $option);
  $request->setConfig(array(
     'ssl_verify_peer' => false,
#     'ssl_verify_peer' => true,
#     'ssl_cafile' => '/etc/ssl/certs/ca-bundle.crt', // ルートCA証明書ファイルを指定
  ));  
  // HTTPのヘッダー設定
  //$http->addHeader("User-Agent", "xxxxx");
  //$http->addHeader("Referer", "xxxxxx");

  //set post data
  $request->addPostParameter('contract_code', $contract_code);
  $request->addPostParameter('user_id', $user_id);
  $request->addPostParameter('item_code', $item_code);
  $request->addPostParameter('charset', 'UTF8' );
  $request->addPostParameter('version', '2' );
  $request->addPostParameter('xml', '1');
  if ( $mode == 'change' ){
      $request->addPostParameter('item_price', $item_price);
  }
 
  // HTTPリクエスト実行
  $response = $request->send();

応答内容の解析

  if (!PEAR::isError($response)) {						
						
    // 応答内容(XML)の解析						
  	$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;			
			$err_code = "";			
			$err_detail = "";			
            $result = "";						
			foreach($res_array['result'] as $uns_k => $uns_v){			
				//$debug_printj .=  "
k=" . $uns_k; list($result_atr_key, $result_atr_val) = each($uns_v); //$debug_printj .= "
result_atr_key=" . $result_atr_key; //$debug_printj .= "
result_atr_val=" . $result_atr_val; switch ($result_atr_key) { case 'result': $result = mb_convert_encoding(urldecode($result_atr_val), "UTF-8" ,"auto"); break; case 'err_code': $err_code = mb_convert_encoding(urldecode($result_atr_val), "UTF-8" ,"auto"); break; case 'err_detail': $err_detail = 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 ( $result != 1 ) { # データ送信結果が失敗だった場合、オーダー入力画面に戻し、エラーメッセージを表示します。 $err_msg = sprintf("%s:%s", $err_code, $err_detail); result_page(); exit(1); }else{ result_page( $result ); exit(0); } }

パラメータ(定期課金情報の生成)

param.add( new BasicNameValuePair("contract_code", this.getConfig().getContract_code() ));	
param.add( new BasicNameValuePair("item_code", rsi.getItemCode() ));	
param.add( new BasicNameValuePair("user_id", rsi.getUserId() ));	
if( "change".equals(mode)){	
	param.add( new BasicNameValuePair("item_price", rsi.getItemPrice().toString()));
}

定期課金金額変更、キャンセル CGIへPOST

HttpPost post = new HttpPost();	
HttpResponse res = null;	
	
try {	
	post.setEntity(new UrlEncodedFormEntity(param,"UTF-8"));
	//URI
	URI uri = new URI(getConfig().getRegulary_url().get(mode));
	post.setURI(uri);
	res = client.execute(post);
}catch(Exception e){	
	e.printStackTrace();
	return null;
}

応答内容の解析

RegularyResultInfo regularyResultInfo = new RegularyResultInfo();
if( res.getStatusLine().getStatusCode() == HttpStatus.SC_OK ){
    // BODYを取得してXMLパーサー呼び出し
    try{
        String xml = EntityUtils.toString(res.getEntity());
        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 namesNodeMap = node.getAttributes();
            for( int j =0; j < namesNodeMap.getLength(); j++ ){
                Node attr = namesNodeMap.item(j);
                switch (attr.getNodeName()) {
                case "result":
                    regularyResultInfo.setResult(attr.getNodeValue());
                    break;
                case "item_code":
                    regularyResultInfo.setItemCode(attr.getNodeValue());
                    break;
                case "item_price":
                    regularyResultInfo.setItemPrice(attr.getNodeValue());
                    break;
                case "mission_code":
                    regularyResultInfo.setMissionCode(attr.getNodeValue());
                    break;
                case "err_code":
                    regularyResultInfo.setErrCode(attr.getNodeValue());
                    break;
                case "err_detail":
                    regularyResultInfo.setErrDetail(new String(URLDecoder.decode(attr.getNodeValue(),"UTF-8").getBytes("UTF-8"));
                    break;
                case "user_id":
                    regularyResultInfo.setUserId(attr.getNodeValue());
                }
            }
        }
    }catch ( Exception e){
        e.printStackTrace();
        return null;
    }
}else{
    / 応答が200以外の場合は不明
    return null;
}

パラメータ(定期課金情報の生成)

# 契約番号(8桁) オンライン登録時に発行された契約番号を入力してください。
my $contract_code = "00000000";

my $item_code  = $q->param("item_code");    # 商品コード
my $user_id    = $q->param("user_id");      # ユーザーID
my $item_price = $q->param("item_price");   # 価格

定期課金金額変更、キャンセル CGIへPOST

my %api_url = (
    change => "https://beta.epsilon.jp/cgi-bin/order/regularly_amount_change.cgi",
    cancel => "https://beta.epsilon.jp/cgi-bin/order/regularly_cancel.cgi",
);

        contract_code => $contract_code,   # 契約コード
        user_id => $user_id,
        item_code => $item_code,
    );
    $data{item_price} = $item_price if( $mode eq 'change' );
    my $ua = LWP::UserAgent->new;
    $ua->timeout(20);
    $ua->ssl_opts( verify_hostname => 0 );
    my $rq = POST $api_url{$mode}, [%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; }

定期課金 金額変更

定期課金サービス金額変更 CGI(https://beta.epsilon.jp/cgi-bin/order/regularly_amount_change.cgi )に取引の情報をパラメータとして付与することで、定期課金の金額変更が可能になります。

当月中の金額変更が可能な期間は、毎月24日までとなります。

送信パラメータ一覧
項目名 パラメータ名 属性 説明
1 契約コード contract_code 半角数字 99999999 イプシロンが加盟店様ごとに採番
申込時に弊社の申込完了画面及びメールにて通知
2 ユーザーID user_id 半角英数字.-+/@ 64byte以下 0312345 金額変更対象となるユーザーのユーザID
3 商品コード item_code 半角英数字.-+/ 64byte以下 EP-0001 金額変更対象となる定期課金の商品コード
4 価格 item_price 1~9999999 4725 変更後の金額

実行結果はXML形式にて返却します。

受信パラメータ一覧
項目名 パラメータ名 属性 説明
1 処理結果 result 半角数字 1 1:金額変更OK 2:金額変更NG
2 ユーザーID user_id 半角英数字.-+/@ 64byte以下 0312345 金額変更対象となるユーザーのユーザID
3 商品コード item_code 半角英数字.-+/ 64byte以下 EP-0001 金額変更対象となる定期課金の商品コード
4 価格 item_price 1~9999999 4725 変更後の金額
5 課金区分 mission_code 半角数字 21 対象の定期課金に設定されている課金区分を返却
6 エラーコード err_code 半角数字   エラーコード
7 エラーメッセージ err_detail 半角数字   エラーメッセージ

定期課金 キャンセル

定期課金サービスキャンセル CGI(https://beta.epsilon.jp/cgi-bin/order/regularly_cancel.cgi)に取引の情報をパラメータとして付与することで、定期課金のキャンセルが可能になります。

当月中のキャンセルが可能な期間は、毎月24日までとなり、 25日以降にキャンセルCGI が実行された場合、解除月は翌月となります。

送信パラメータ一覧
項目名 パラメータ名 属性 説明
1 契約コード contract_code 半角数字 99999999 イプシロンが加盟店様ごとに採番
申込時に弊社の申込完了画面及びメールにて通知
2 ユーザーID user_id 半角英数字.-+/@ 64byte以下 0312345 金額変更対象となるユーザーのユーザID
3 商品コード item_code 半角英数字.-+/ 64byte以下 EP-0001 金額変更対象となる定期課金の商品コード

受信パラメータは決済区分にてクレジットカード番号の変更有無の設定によって値が異なります。
実行結果はXML形式にて返却します。

受信パラメータ一覧
項目名 パラメータ名 属性 説明
1 処理結果 result 半角数字 1 1:金額変更OK 2:金額変更NG
2 ユーザーID user_id 半角英数字.-+/@ 64byte以下 0312345 金額変更対象となるユーザーのユーザID
3 商品コード item_code 半角英数字.-+/ 64byte以下 EP-0001 金額変更対象となる定期課金の商品コード
4 価格 item_price 1~9999999 4725 変更後の金額
5 課金区分 mission_code 半角数字 21 対象の定期課金に設定されている課金区分を返却
6 エラーコード err_code 半角数字   エラーコード
7 エラーメッセージ err_detail 半角数字   エラーメッセージ