complete.php 15 KB
<?php
//*****************************************************************************
//* プログラムID:complete.php
//* 機能        :決済完了処理
//*****************************************************************************
header( "Content-type: text/html; charset=EUC-JP");

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

//  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");

// 変数の設定

// オーダー情報確認CGIのURL(試験用)
// オーダー情報確認CGIについては2種類ありますのでご注意お願いいたします。
// 詳細はCGI設定マニュアルの「オーダー情報確認CGI-1,2」をご確認願います。
// 各CGIの説明
// CGI-1:認証にパスワード要/発信元IP無制限
// CGI-2:認証にパスワード不要/発信元IPの制限有

// 以下にはCGI-1と2で設定パラメータが相違しますので利用されるCGIによって変更してください。

// 接続先URLの設定

// CGI-1利用の場合 本番環境への接続の場合は契約後弊社からご連絡いたしますURLに変更してください
//$getsales_url = 'http://beta.epsilon.jp/client/getsales.cgi';
$getsales_url = 'https://secure.epsilon.jp/client/getsales.cgi';
// CGI-2利用の場合 本番環境への接続の場合は契約後弊社からご連絡いたしますURLに変更してください
//my $getsales_url = 'https://beta.epsilon.jp/cgi-bin/order/getsales2.cgi';

// 発行されたユーザーID(契約コード)を入力してください
// CGI-1,2共通
$user_id = '33317000';

// 発行されたパスワードを入力してください。
// CGI-1利用の場合 弊社からお知らせしたパスワードを設定してください。
// CGI-2利用の場合 当値は利用しませんので適当な値を設定してください。txZaDA9o,j6ralKCA
$passwd  = '0yTJkjCd';

// エラーが発生した場合のメッセージ
$err_msg;

// オーダー情報取得CGIを実行した結果を格納する連想配列
$responce = array();

// 各支払い方法
$payment_name = array(
   1 => "クレジットカード決済",
   2 => "クレジットカード決済",
   3 => "コンビニ決済",
   4 => "ネット銀行決済(ジャパンネット銀行)",
   5 => "ネット銀行決済(e-bank)",
   7 => "ペイジー",
   8 => "WebMoney",
   9 => "Do-Link決済",
   12 => "BitCash決済",
   13 => "電子マネーちょコム");

// コンビニ・ペイジー支払の場合の支払い方法の簡単な説明
$setsumei = array(
    # セブンイレブン
    11 => "以下の払込票ページをプリントアウトされるか、払込票番号をメモして<br>" . 
          "最寄りのセブンイレブンのレジにてお支払いください。<br>" ,
    # ファミリーマート
    21 => "ファミリーマート店頭にございます Famiポート/ファミネットにて<br>" .
          "以下の2つの数字をご入力頂き、発行されるFamiポート申込券をレジまで<br>" .
          "お持ちになり代金をお支払いください。<br>",
    # ローソン
    31 => "ローソンの店内に設置してあるLoppiのトップ画面の中から、「インターネット受付」<br>" .
          "をお選びください。次画面のジャンルの中から「インターネット受付」をお選び頂き、<br>" .
          "画面に従って以下の「お支払い受付番号」と、ご登録頂いた「電話番号」をご入力下さい。<br>" ,
    # セイコーマート
    32 => "セイコーマートの店内に設置してあるセイコーマートクラブステーション(情報端末)の<br>" .
          "トップ画面の中から、「インターネット受付」をお選び下さい。画面に従って以下の<br>" .
          "「お支払い受付番号」と、ご登録頂いた「電話番号」をご入力下さい。<br>" ,
    # ペイジー
    88 => "ペイジーでお支払い頂く際には銀行のATMもしくはオンラインバンキングで<br>お支払いただく方法がございます。<BR>" .
          "ご利用可能な銀行につきましては以下リンクでご確認お願いいたします。<BR><BR>".
          "<a href='http://www.epsilon.jp/service/payeasy_list.html' target='_blank'>ペイジーお支払可能銀行一覧</a><BR><BR>".
          "お支払可能な銀行、オンラインバンキングで「収納機関番号」、「確認番号」、<br>ご登録いただいた「電話番号」を入力の上ご入金お願いします。" );

// パラメータとして渡される(GET)トランザクションコードを取得します。
$trans_code = $_REQUEST['trans_code'];


// 結果問い合わせ用HTTPリクエスト送信

// CGI-1利用の場合 
// ※オーダー情報確認CGIの実行にはベーシック認証が必要です。 
$request = new HTTP_Request($getsales_url);
$request->setMethod(HTTP_REQUEST_METHOD_POST);
$request->addHeader("Content-Type","application/x-www-form-urlencoded");
$request->setBody("trans_code=" . $trans_code);

$request->setBasicAuth($user_id, $passwd);
$response = $request->sendRequest();

// CGI-2利用の場合 
//$request = new HTTP_Request($getsales_url);
//$request->setMethod(HTTP_REQUEST_METHOD_POST);
//$request->addHeader("Content-Type","application/x-www-form-urlencoded");
//$request->setBody("trans_code=" . $trans_code . "&contract_code=" . $user_id);
//$response = $request->sendRequest();

// 以降はCGI-1,2どちらも共通です。

if (PEAR::isError($response)) {
  // インターフェイスCGIの実行に失敗した場合
  	$err_msg = "データの送信に失敗しました<br><br>";
  	$err_msg .= "<br />res_statusCd=" . $request->getResponseCode();
  	$err_msg .= "<br />res_status=" . $request->getResponseHeader('Status');
	echo $err_msg;
    exit;
}


// CGIの実行に成功した場合、応答内容(XML)を解析します
    // 応答内容(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();
	//error check
	if($res_array['result']['result'] == "0"){
		echo "処理に失敗しました<br><br>";
    	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), "EUC-JP" ,"auto");
	}
	$debug_printj .=  "<br />xml_memo2_msg=" . $xml_memo2_msg;
	
}else{
	//xml parser error
  	echo "xml parser error<br><br>";
    exit(1);
}
$result_html;

if ($res_param_array['payment_code'] == 3){
  // コンビニ支払の場合
  if ($res_param_array['conveni_code'] == 11){
    // セブンイレブンの場合
    $result_html = $setsumei[11] . "<br><br>\n";
    $result_html .= "払込票 : <a href=\"" . $res_param_array['haraikomi_url'] . "\">ここをクリック</a>  <br>\n";
    $result_html .= "払込票番号 : " . $res_param_array['receipt_no'] . "<br>\n";
  }
  elseif ($res_param_array['conveni_code'] == 21){
    // ファミリーマートの場合
    $result_html = $setsumei[21] . "<br><br>\n";
    $result_html .="企業コード: " . $res_param_array['kigyou_code'] . "<br>\n";
    $result_html .= "注文番号 : " . $res_param_array['receipt_no'] . "<br>\n";
  }
  elseif (($res_param_array['conveni_code'] == 31) || ($res_param_array['conveni_code'] == 32)){
    // ローソン、セイコーマートの場合
    $result_html = $setsumei{$res_param_array{'conveni_code'}} . "<br><br>\n";
    $result_html .= "お支払い受付番号 : " . $res_param_array['receipt_no'] .  "<br>\n";
  }
  else {  // 不明(異常)
    $err_msg = "支払情報の取得に失敗しました $res_param_array{'conveni_code'}";
    exit(0);
  }
  $conveni_limit_date = split("-",$res_param_array['conveni_limit']);
  $result_html .= "<br>支払期限:" . $conveni_limit_date[0] . "年"
                . $conveni_limit_date[1] . "月" . $conveni_limit_date[2] . "日<br>\n";
  $payment_name = $payment_name[$res_param_array['payment_code']];
  $item_name = mb_convert_encoding(urldecode($res_param_array['item_name']), "EUC-JP" ,"auto");
  $item_price = $res_param_array['item_price'];
}
elseif ($res_param_array['payment_code'] == 7 ){
  // ペイジーの場合
  $result_html = $setsumei[88] . "<br><br>\n";
  $result_html .= "収納機関番号: " . $res_param_array['kigyou_code'] . "<br>\n";
  $result_html .= "確認番号 : " . $res_param_array['receipt_no'] .  "<br>\n";
  $payment_name = $payment_name[$res_param_array['payment_code']];
  $item_name = mb_convert_encoding(urldecode($res_param_array['item_name']), "EUC-JP" ,"auto");
  $item_price = $res_param_array['item_price'];
}
else {
  // それ以外の決済の場合
  $result_html = "ご注文ありがとうございました。";
  $payment_name = $payment_name[$res_param_array['payment_code']];
  $item_name = mb_convert_encoding(urldecode($res_param_array['item_name']), "EUC-JP" ,"auto");
  $item_price = $res_param_array['item_price'];

}

//め〜るNiポン!の場合
if($res_param_array['memo1'] == "1"){

	//登録済みチェック(F5回避)
	include("./inc/dbcon_PAY_ADM.inc");
	$strSQL = "SELECT * FROM log_data_tbl WHERE order_number = '".$res_param_array['order_number']."'";
//echo $strSQL."<hr>";
	$objRec = pg_exec($strSQL);
	if($objRec==false){
		echo("SQL実行に失敗しました(SELECT)");
		exit;
	}
	$dataCnt = pg_numrows($objRec);
	if($dataCnt <= 0){
	//データがない場合のみ更新処理
	
		//ポイント確認
		include("./inc/dbcon_MLP_ADM.inc");
		$strSQL = "SELECT * FROM point_tbl WHERE user_id = '".$res_param_array['user_id']."'";
//echo $strSQL."<hr>";
		$objRec = pg_exec($strSQL);
		if($objRec==false){
			echo("SQL実行に失敗しました(SELECT)");
			exit;
		}
		if(pg_numrows($objRec) > 0){
			$objF = pg_fetch_object($objRec, 0);
			$pointOLD = $objF->use_point;
		}else{
			echo("該当データなし");
			exit;
		}
		$strMEMO1 = "購入ポイント:".$res_param_array['memo2'];
		$strMEMO2 = "更新前ポイント:".$pointOLD;
		$strPointUPDATE = intval($res_param_array['memo2']) + intval($pointOLD);
		
		//団体名取得
		$strSQL = "SELECT * FROM mst_kanri WHERE user_id = '".$res_param_array['user_id']."'";
		$objRec = pg_exec($strSQL);
		if($objRec==false){
			echo("SQL実行に失敗しました(SELECT)");
			exit;
		}
		if(pg_numrows($objRec) > 0){
			$objF = pg_fetch_object($objRec, 0);
			$pg_user_name = $objF->user_name;
		}else{
			echo("該当データなし");
			exit;
		}
		
		//クレジット決済ログ
		include("./inc/dbcon_PAY_ADM.inc");
		$strSQL  = "";
		$strSQL .= "INSERT INTO log_data_tbl ";
		$strSQL .= " ( ";
		$strSQL .= "  order_number, ";
		$strSQL .= "  contract_code, ";
		$strSQL .= "  user_id, ";
		$strSQL .= "  user_name, ";
		$strSQL .= "  user_mail_add, ";
		$strSQL .= "  item_code, ";
		$strSQL .= "  item_name, ";
		$strSQL .= "  mission_code, ";
		$strSQL .= "  item_price, ";
		$strSQL .= "  process_code, ";
		$strSQL .= "  yobi1, ";
		$strSQL .= "  yobi2, ";
		$strSQL .= "  yobi3, ";
		$strSQL .= "  service_flg, ";
		$strSQL .= "  pg_group_id, ";
		$strSQL .= "  pg_user_id, ";
		$strSQL .= "  update_datetime ";
		$strSQL .= " ) ";
		$strSQL .= " VALUES( ";
		$strSQL .= " '".$res_param_array['order_number']."', ";
		$strSQL .= " '".$res_param_array['contract_code']."', ";
		$strSQL .= " '".$res_param_array['user_id']."', ";
		$strSQL .= " '".$res_param_array['user_name']."', ";
		$strSQL .= " '".$res_param_array['user_mail_add']."', ";
		$strSQL .= " '".$res_param_array['item_code']."', ";
		$strSQL .= " '".mb_convert_encoding(urldecode($res_param_array['item_name']), "EUC-JP" ,"auto")."', ";
		$strSQL .= " '".$res_param_array['mission_code']."', ";
		$strSQL .= " '".$res_param_array['item_price']."', ";
		$strSQL .= " '".$res_param_array['process_code']."', ";
		$strSQL .= " '".$strMEMO1."', ";
		$strSQL .= " '".$strMEMO2."', ";
		$strSQL .= " '', ";
		$strSQL .= " '".$res_param_array['memo1']."', ";
		$strSQL .= " '".$res_param_array['user_id']."', ";
		$strSQL .= " '', ";
		$strSQL .= " '".date("Y/m/d H:i:s")."' ";
		$strSQL .= " ) ";
//echo $strSQL."<hr>";
		$objRec = pg_exec($strSQL);
		if($objRec==false){
			echo("SQL実行に失敗しました(INSERT)");
			exit;
		}
		
		//ポイント更新
		include("./inc/dbcon_MLP_ADM.inc");
		$strSQL  = "";
		$strSQL .= "UPDATE point_tbl ";
		$strSQL .= "SET use_point = ".$strPointUPDATE." ";
		$strSQL .= "WHERE user_id = '".$res_param_array['user_id']."'";
//echo $strSQL."<hr>";
		$objRec = pg_exec($strSQL);
		if($objRec==false){
			echo("SQL実行に失敗しました(UPDATE)");
			exit;
		}
		
		//メール送信
		//各種設定-----------//
		include("./inc/jcode.php");
		$strFrom = "From: support@media-tek.co.jp\n";
		$strSubject = "【め〜るNiポン】ポイントご購入完了のお知らせ";
		$strSubject = "=?iso-2022-jp?B?" . base64_encode(jcodeconvert($strSubject, 0, 3)) . "?=";
		$GMT = date("Z");
		$GMT_ABS	= abs($GMT);
		$GMT_HOUR = floor($GMT_ABS / 3600);
		$GMT_MIN = floor(($GMT_ABS - $GMT_HOUR * 3600) / 60);
		if ($GMT >= 0) $GMT_FLG = "+"; else $GMT_FLG = "-";
		$GMT_RFC = date("D, d M Y H:i:s ").sprintf($GMT_FLG."%02d%02d", $GMT_HOUR, $GMT_MIN);
		$Headers	= "Date: ".$GMT_RFC."\n";
		$Headers .= $strFrom;
		$Headers .= "Bcc: support@media-tek.co.jp\n";
		$Headers .= "Subject: $strSubject\n";
		$Headers .= "MIME-Version: 1.0\n";
		$Headers .= "X-Mailer: PHP/".phpversion()."\n";
		$Headers .= "Content-type: text/plain; charset=ISO-2022-JP\n";
		$Headers .= "Content-Transfer-Encoding: 7bit";
		//本文
		$strComment  = "";
		$strComment .= $res_param_array['user_name']." 様\n";
		$strComment .= "\n";
		$strComment .= "この度は【め〜るNiポン】のポイントをご購入いただき、ありがとうございます。\n";
		$strComment .= "\n";
		$strComment .= "ご購入内容------------------------------------------------------------------\n";
		$strComment .= "■ご利用団体名 :".$pg_user_name." 様\n";
		$strComment .= "■ご購入ポイント:".number_format($res_param_array['memo2'])."ポイント\n";
		$strComment .= "■ご購入価格合計:".number_format($res_param_array['item_price'])."円\n";
		$strComment .= "\n";
		$strComment .= "■お支払い方法 :".$payment_name."\n";
		$strComment .= "----------------------------------------------------------------------------\n";
		$strComment .= "\n";
		$strComment .= "■ご利用可能ポイント数(".date("Y年m月d日 H時i分")." 現在)\n";
		$strComment .= "  ".number_format($strPointUPDATE)."ポイント\n";
		$strComment .= "\n";
		$strComment .= "※ご購入されたポイントは即時追加させていただいております\n";
		$strComment .= " サービスの性質上、返品・返金は出来ません。\n";
		$strComment .= "\n";
		$strComment .= "※このメールに心当たりのない場合、<support@media-tek.co.jp>までご連絡ください。\n";
		$strComment .= "\n";
		$strComment .= "今後とも【め〜るNiポン】をよろしくお願いいたします。\n";
		$strComment .= "----------------------------------------------------------------------------\n";
		$strComment .= "め〜るNiポン:http://www.mail-ni-pon.net\n";
		$strComment .= "メディアテック株式会社:http://www.media-tek.co.jp\n";
		$strComment .= "----------------------------------------------------------------------------\n";
		//エンコード設定
		$strComment = mb_convert_encoding($strComment, "JIS", "auto");
		//メール送信プログラム
		$intBool = mail($res_param_array['user_mail_add'], $strSubject, $strComment, $Headers);
	
	}
	
	$result_html .= "<br>(め〜るNiポン!での画面を更新、または別ページへの移動でポイント表示が更新されます)";
}

$o_smarty->assign('payment_name' ,    $payment_name);
$o_smarty->assign('item_name' ,       $item_name);
$o_smarty->assign('item_price' ,      number_format($item_price));
$o_smarty->assign('result_html' , $result_html);
$o_smarty->assign('err_msg' ,         $err_msg);

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

?>