confirmation.php 9.3 KB
<?php
//*****************************************************************************
//* プログラムID:confirmation.php
//* 機能        :クレジット決済確認画面(イプシロン登録ページ!!)
//*****************************************************************************
header( "Content-type: text/html; charset=EUC-JP");

include('./inc/smarty.conf');

$SrvcCD   = $_POST["SrvcCD"];
$RetPage  = $_POST["RetPage"];
$hidName  = $_POST["hidName"];
$hidPoint = $_POST["hidPoint"];
$hidMoney = $_POST["hidMoney"];
$selPoint = $_POST["selPoint"];
$pg_user_id = $_POST["pg_user_id"];
$pg_user_name = $_POST["pg_user_name"];
$inpMail = $_POST["inpMail"];
$inpName = $_POST["inpName"];
if($SrvcCD == "1"){
//め〜るNiポン!
	$SERVICE_NAME = "め〜るNiポン!";										//サービス名
	$srvcName = $hidName;													//商品名
	$srvcMoney = number_format($hidMoney)."円";								//金額(表示)
	$srvcOrderNumber = "MLP".date("Ymd").sprintf("%05d",rand(0,99999));		//オーダー番号
	$srvcMissionCode = 1;													//一回のみ
	$srvcProcessCode = 1;													//初回課金
	$srvcItemCode = "MLP-".$hidPoint;										//商品コード
	$srvcItemName = $SERVICE_NAME.$srvcName;								//商品名
	$srvcItemPrice = $hidMoney;												//金額
	$srvcUserID = $pg_user_id;												//ユーザID
	$srvcUserName = $inpName;												//ユーザ名
	$srvcUserMail = $inpMail;												//ユーザメールアドレス
	$srvcMemo1 = $SrvcCD;													//サービスコード
	$srvcMemo2 = $hidPoint;													//購入ポイント

}
//クレジット決済お決まりコード
//  EPSILON オーダー情報送信プログラム(PHP版)
//  このプログラムの実行には、以下のモジュールが必要です。
//  ・PHP(ver5,,,,,
//  ・PEAR:
//  ・PEAR:HTTP_Request:
//  ・PEAR:Net_URL:
//  ・PEAR:Net_Socket:
//  ・PEAR:XML_Parser:
//  ・PEAR:XML_Serializer:
//include Libraly
//PEAR拡張モジュールの読み込み。
//既に該当のモジュールをインストール済みの場合は適宜読み込み先パスを変更してください。
require_once "./lib/http/Request.php";
require_once "./lib/xml/Unserializer.php";
//char setting
//サーバ環境に応じ適宜変更してください。
mb_language("Japanese");
mb_internal_encoding("EUC-JP");
// 変数の初期化
// FORMで送信した内容をこのプログラムファイルで受け取るために、プログラムファイルの名前を設定します。
$my_self = "confirmation.php"; 
// オーダー情報送信先URL(試験用)
// 本番環境でご利用の場合は契約時に弊社からお送りするURLに変更してください。
//$order_url = "http://beta.epsilon.jp/cgi-bin/order/receive_order3.cgi";
$order_url = "https://secure.epsilon.jp/cgi-bin/order/receive_order3.cgi";

//// 以下の各項目についてご利用環境に沿った設定に変更してください
// 契約番号(8桁) オンライン登録時に発行された契約番号を入力してください。
$contract_code = "33317000";
// 注文番号(注文毎にユニークな番号を割り当てます。ここでは仮に乱数を使用しています。)
$order_number =$srvcOrderNumber;
// 決済区分 (使用したい決済方法を指定してください。登録時に申し込まれていない決済方法は指定できません。)
$st_code = '10000-0000-00000';   // 指定方法はCGI設定マニュアルの「決済区分について」を参照してください。
// 課金区分 (1:一回のみ 2〜10:月次課金)
// 月次課金について契約がない場合は利用できません。また、月次課金を設定した場合決済区分はクレジットカード決済のみとなります。
$mission_code = $srvcMissionCode;
// 処理区分 (1:初回課金 2:登録済み課金 3:登録のみ 4:登録変更 8:月次課金解除 9:退会)
// 月次課金をご利用にならない場合は1:初回課金をご利用ください。
// 各処理区分のご利用に関してはCGI設定マニュアルの「処理区分について」を参照してください。
$process_code = $srvcProcessCode;
// 追加情報 1,2  (入力は必須ではありません)
$memo1 = $srvcMemo1;
$memo2 = $srvcMemo2;
// 商品コード (商品毎に識別コードを指定してください。ここでは仮に固定の値を指定しています。)
$item_code = $srvcItemCode;
//// 変更設定ここまで
// エラーが発生した場合のメッセージ
$err_msg;
// オーダー情報を送信した結果を格納する連想配列
$responce = array();
// 商品名と価格
$item_name = $srvcItemName;
$item_price = $srvcItemPrice;
//echo $item_price."<hr>";

// ユーザー固有情報
// ここでは仮にフォームに入力してもらっていますが、ユーザーID等の値はクライアント様側で
// 管理されている値を使用してください。
$user_id = $srvcUserID;          	  // ユーザーID
$user_name = $srvcUserName;       	 // ユーザー氏名
$user_mail_add = $srvcUserMail		;// メールアドレス

// CGIの状態(入力画面から実行されたか、確認画面から実行されたか)を判別する値
$come_from = $_REQUEST['come_from'];        // CGIの状態設定

if ($come_from == 'kakunin'){  // 購入確認画面で[確認]ボタンを押した場合
	
  //EPSILONに情報を送信します。

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

  // HTTP_Requestの初期化
  $request = new HTTP_Request($order_url, $option);
  
  // HTTPのヘッダー設定
  //$http->addHeader("User-Agent", "xxxxx");
  //$http->addHeader("Referer", "xxxxxx");

  //set method
  $request->setMethod(HTTP_REQUEST_METHOD_POST);
  //set post data
  $request->addPostData('contract_code', $contract_code);
  $request->addPostData('user_id', $user_id);
  $request->addPostData('user_name', mb_convert_encoding($user_name, "EUC-JP", "auto"));
  $request->addPostData('user_mail_add', $user_mail_add);
  $request->addPostData('item_code', $item_code);
  $request->addPostData('item_name', mb_convert_encoding($item_name, "EUC-JP", "auto"));
  $request->addPostData('order_number', $order_number);
  $request->addPostData('st_code', $st_code);

  $request->addPostData('mission_code', $mission_code);
  $request->addPostData('item_price', $item_price);
  $request->addPostData('process_code', $process_code);
  $request->addPostData('memo1', $memo1);
  $request->addPostData('memo2', $memo2);
  $request->addPostData('xml', '1');
  
  // HTTPリクエスト実行
  $response = $request->sendRequest();
  if (!PEAR::isError($response)) {

    // 応答内容(XML)の解析
  	
  	$res_code = $request->getResponseCode();
  	$res_content = $request->getResponseBody();

		//xml unserializer
		$temp_xml_res = str_replace("x-sjis-cp932", "EUC-JP", $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 = "";
			foreach($res_array['result'] as $uns_k => $uns_v){
				//$debug_printj .=  "<br />k=" . $uns_k;
	    		list($result_atr_key, $result_atr_val) = each($uns_v);
				//$debug_printj .=  "<br />result_atr_key=" . $result_atr_key;
				//$debug_printj .=  "<br />result_atr_val=" . $result_atr_val;

			    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), "EUC-JP" ,"auto");
        			break;
				  case 'memo1':
					$xml_memo1_msg = mb_convert_encoding(urldecode($result_atr_val), "EUC-JP" ,"auto");
        			break;
				  case 'memo2':
					$xml_memo2_msg = mb_convert_encoding(urldecode($result_atr_val), "EUC-JP" ,"auto");
        			break;
				  default:
			        break;
    			}
			}
			
		}else{
			//xml parser error
		  	$err_msg = "xml parser error<br><br>";
		    //exit(1);
		}
	
	
	
  }else{ //http error
  	
	//$debug_printj .=  "http error";  	
  	$err_msg = "データの送信に失敗しました<br><br>";
  	$err_msg .= "<br />res_statusCd=" . $request->getResponseCode();
  	$err_msg .= "<br />res_status=" . $request->getResponseHeader('Status');
  	
    //exit(1);
	
  }

  if($err_msg <> ""){
  	//
  }elseif($is_xml_error){
    // データ送信結果が失敗だった場合、オーダー入力画面に戻し、エラーメッセージを表示します。
  	$err_msg = "error_cd:" . $xml_error_cd . "error_msg:" .  $xml_error_msg;
    //exit(1);
  }else{
    // データ送信に成功した場合、リダイレクト先URLへリダイレクトさせてください。
	header("Location: " . $xml_redirect_url);
    //exit(0);
  }
  
}
//ここまで



$o_smarty->assign('SrvcCD' , $SrvcCD);
$o_smarty->assign('SERVICE_NAME' , $SERVICE_NAME);
$o_smarty->assign('RetPage' ,$RetPage);
$o_smarty->assign('srvcName' , $srvcName);
$o_smarty->assign('srvcMoney' , $srvcMoney);
$o_smarty->assign('hidMoney' , $hidMoney);
$o_smarty->assign('hidPoint' , $hidPoint);
$o_smarty->assign('selPoint' , $selPoint);
$o_smarty->assign('inpMail' , $_POST["inpMail"]);
$o_smarty->assign('inpName' , $_POST["inpName"]);

$o_smarty->assign('pg_user_id',$pg_user_id);
$o_smarty->assign('pg_user_name',$pg_user_name);

$o_smarty->assign('err_msg' , $err_msg);

//イプシロン決済用データ
$o_smarty->assign('contract_code', $contract_code);
$o_smarty->assign('user_id', $user_id);
$o_smarty->assign('user_name', $user_name);
$o_smarty->assign('user_mail_add', $user_mail_add);
$o_smarty->assign('item_code', $item_code);
$o_smarty->assign('item_name', $item_name);
$o_smarty->assign('order_number', $order_number);
$o_smarty->assign('st_code', $st_code);
$o_smarty->assign('mission_code', $mission_code);
$o_smarty->assign('item_price', $item_price);
$o_smarty->assign('process_code', $process_code);
$o_smarty->assign('memo1', $memo1);
$o_smarty->assign('memo2', $memo2);

$o_smarty->display('confirmation.tpl');


?>