'クレジット',
2 => 'コンビニ'
);
$arrCredit = array(
1 => 'VISA, MASTER, Diners',
2 => 'JCB, AMEX'
);
//ページ管理クラス
class LC_Page {
//コンストラクタ
function LC_Page() {
//メインテンプレートの指定
$this->tpl_mainpage = MODULE_PATH . 'mdl_epsilon/mdl_epsilon.tpl';
$this->tpl_subtitle = 'イプシロン決済モジュール';
global $arrPayment;
$this->arrPayment = $arrPayment;
global $arrCredit;
$this->arrCredit = $arrCredit;
global $arrConvenience;
$this->arrConvenience = $arrConvenience;
}
}
$objPage = new LC_Page();
$objView = new SC_AdminView();
$objQuery = new SC_Query();
// コンビニ入金チェック
lfEpsilonCheck();
// 認証確認
$objSess = new SC_Session();
sfIsSuccess($objSess);
// パラメータ管理クラス
$objFormParam = new SC_FormParam();
$objFormParam = lfInitParam($objFormParam);
// POST値の取得
$objFormParam->setParam($_POST);
// 汎用項目を追加(必須!!)
sfAlterMemo();
switch($_POST['mode']) {
case 'edit':
// 入力エラー判定
$objPage->arrErr = lfCheckError();
// エラーなしの場合にはデータを更新
if(count($objPage->arrErr) == 0) {
// データ更新
lfUpdPaymentDB();
// javascript実行
$objPage->tpl_onload = 'alert("登録完了しました。\n基本情報>支払方法設定より詳細設定をしてください。"); window.close();';
}
break;
case 'module_del':
// 汎用項目の存在チェック
if(sfColumnExists("dtb_payment", "memo01")){
// データの削除フラグをたてる
$objQuery->query("UPDATE dtb_payment SET del_flg = 1 WHERE module_id = ?", array(MDL_EPSILON_ID));
}
break;
default:
// データのロード
lfLoadData();
break;
}
$objPage->arrForm = $objFormParam->getFormParamList();
$objView->assignobj($objPage); //変数をテンプレートにアサインする
$objView->display($objPage->tpl_mainpage); //テンプレートの出力
//-------------------------------------------------------------------------------------------------------
/* パラメータ情報の初期化 */
function lfInitParam($objFormParam) {
$objFormParam->addParam("契約コード", "code", INT_LEN, "KVa", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
$objFormParam->addParam("接続先URL", "url", URL_LEN, "KVa", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "URL_CHECK"));
$objFormParam->addParam("利用決済", "payment", "", "", array("EXIST_CHECK"));
$objFormParam->addParam("利用クレジット", "credit");
$objFormParam->addParam("利用コンビニ", "convenience");
return $objFormParam;
}
// エラーチェックを行う
function lfCheckError(){
global $objFormParam;
$arrErr = $objFormParam->checkError();
// 利用クレジット、利用コンビニのエラーチェック
$arrChkPay = $_POST["payment"];
foreach((array)$arrChkPay as $key => $val){
// 利用クレジット
if($val == 1 and count($_POST["credit"]) <= 0){
$arrErr["credit"] = "利用クレジットが選択されていません。
";
}
// 利用コンビニ
if($val == 2 and count($_POST["convenience"]) <= 0){
$arrErr["convenience"] = "利用コンビニが選択されていません。
";
}
}
// ssl対応判定
if(!extension_loaded('openssl') and ereg( "^https://", $_POST["url"] )){
$arrErr["url"] = "このサーバーはSSLに対応していません。
httpで接続してください。";
}
// 接続チェックを行う
if(count($arrErr) == 0) $arrErr = lfChkConnect();
return $arrErr;
}
// 接続チェックを行う
function lfChkConnect(){
global $objQuery;
global $objPage;
$arrRet = array();
// メールアドレス取得
$email = $objQuery->getone("SELECT email03 FROM dtb_baseinfo");
// 契約コード
(in_array(1, (array)$_POST["payment"])) ? $cre = "1" : $cre = "0";
(in_array(2, (array)$_POST["payment"])) ? $con = "1" : $con = "0";
$st_code = $cre . "0" . $con . "00-0000-00000";
// 送信データ生成
$arrSendData = array(
'contract_code' => $_POST["code"], // 契約コード
'user_id' => "connect_test", // ユーザID
'user_name' => "接続テスト", // ユーザ名
'user_mail_add' => $email, // メールアドレス
'st_code' => $st_code, // 決済区分
'process_code' => '3', // 処理区分(固定)
'xml' => '1', // 応答形式(固定)
);
// データ送信
$arrXML = sfPostPaymentData($_POST["url"], $arrSendData, false);
if($arrXML == "") {
$arrRet["url"] = "接続できませんでした。
";
return $arrRet;
}
// エラーがあるかチェックする
$err_code = sfGetXMLValue($arrXML,'RESULT','ERR_CODE');
switch ($err_code) {
case "":
break;
case "607":
$arrRet["code"] = "契約コードが違います。
";
return $arrRet;
default :
$arrRet["service"] = sfGetXMLValue($arrXML,'RESULT','ERR_DETAIL');
return $arrRet;
}
// コンビニ指定があればコンビニ分ループし、チェックを行う
if(count($_POST["convenience"]) > 0){
foreach($_POST["convenience"] as $key => $val){
// 送信データ生成
$arrSendData['conveni_code'] = $val; // コンビニコード
$arrSendData['user_tel'] = "0300000000"; // ダミー電話番号
$arrSendData['user_name_kana'] = "送信テスト"; // ダミー氏名(カナ)
$arrSendData['haraikomi_mail'] = 0; // 払込メール(送信しない)
// データ送信
$arrXML = sfPostPaymentData($_POST["url"], $arrSendData, false);
if($arrXML == "") {
$arrRet["url"] = "接続できませんでした。
";
return $arrRet;
}
// エラーがあるかチェックする
$err_code = sfGetXMLValue($arrXML,'RESULT','ERR_CODE');
if($err_code != ""){
$arrRet["service"] = sfGetXMLValue($arrXML,'RESULT','ERR_DETAIL');
return $arrRet;
}
}
}
return $arrRet;
}
// 登録データを読み込む
function lfLoadData(){
global $objFormParam;
//データを取得
$arrRet = lfGetPaymentDB(" AND del_flg = '0'");
// 値をセット
$objFormParam->setParam($arrRet[0]);
// 画面表示用にデータを変換
$arrDisp = array();
foreach($arrRet as $key => $val){
// 利用決済を表示用に変換
$arrDisp["payment"][$key] = $val["payment"];
// クレジットの決済区分を取得
if($val["payment"] == 1) $credit = $val["payment_code"];
// コンビニ
if($val["payment"] == 2) $arrDisp["convenience"] = $val["convenience"];
}
$objFormParam->setParam($arrDisp);
$objFormParam->splitParamCheckBoxes("convenience");
// クレジット
if(substr($credit, 0, 1)) $arrCredit["credit"][] = 1;
if(substr($credit, 1, 1)) $arrCredit["credit"][] = 2;
$objFormParam->setParam($arrCredit);
}
// DBからデータを取得する
function lfGetPaymentDB($where = "", $arrWhereVal = array()){
global $objQuery;
$arrVal = array(MDL_EPSILON_ID);
$arrVal = array_merge($arrVal, $arrWhereVal);
$arrRet = array();
$sql = "SELECT
module_id,
memo01 as code,
memo02 as url,
memo03 as payment,
memo04 as payment_code,
memo05 as convenience
FROM dtb_payment WHERE module_id = ? " . $where;
$arrRet = $objQuery->getall($sql, $arrVal);
return $arrRet;
}
// データの更新処理
function lfUpdPaymentDB(){
global $objQuery;
global $objSess;
// 利用コンビニにチェックが入っている場合には、ハイフン区切りに編集する
$convCnt = count($_POST["convenience"]);
if($convCnt > 0){
$convenience = $_POST["convenience"][0];
for($i = 1 ; $i < $convCnt ; $i++){
$convenience .= "-" . $_POST["convenience"][$i];
}
}
// del_flgを削除にしておく
$del_sql = "UPDATE dtb_payment SET del_flg = 1 WHERE module_id = ? ";
$arrDel = array(MDL_EPSILON_ID);
$objQuery->query($del_sql, $arrDel);
// データ登録
foreach($_POST["payment"] as $key => $val){
// ランクの最大値を取得する
$max_rank = $objQuery->getone("SELECT max(rank) FROM dtb_payment");
// 支払方法データを取得
$arrPaymentData = lfGetPaymentDB("AND memo03 = ?", array($val));
// クレジットにチェックが入っていればクレジットを登録する
if($val == 1){
(in_array(1, $_POST["credit"])) ? $visa = "1" : $visa = "0";
(in_array(2, $_POST["credit"])) ? $jcb = "1" : $jcb = "0";
$arrData = array(
"payment_method" => "Epsilonクレジット"
,"fix" => 3
,"creator_id" => $objSess->member_id
,"create_date" => "now()"
,"update_date" => "now()"
,"upper_rule" => 500000
,"module_id" => MDL_EPSILON_ID
,"module_path" => MODULE_PATH . "mdl_epsilon/card.php"
,"memo01" => $_POST["code"]
,"memo02" => $_POST["url"]
,"memo03" => $val
,"memo04" => $visa . $jcb . "000-0000-00000"
,"del_flg" => "0"
,"charge_flg" => "2"
,"upper_rule_max" => CHARGE_MAX
);
}
// コンビニにチェックが入っていればコンビニを登録する
if($val == 2){
// セブンイレブンのみ選択した場合には利用上限を30万にする。
if(count($_POST["convenience"]) == 1 and $_POST["convenience"][0] == 11) {
$upper_rule_max = SEVEN_CHARGE_MAX;
($arrPaymentData["upper_rule"] > $upper_rule_max or $arrPaymentData["upper_rule"] == "") ? $upper_rule = $upper_rule_max : $upper_rule = $arrPaymentData["upper_rule"];
}else{
$upper_rule_max = CHARGE_MAX;
$upper_rule = $upper_rule_max;
}
$arrData = array(
"payment_method" => "Epsilonコンビニ"
,"fix" => 3
,"creator_id" => $objSess->member_id
,"create_date" => "now()"
,"update_date" => "now()"
,"upper_rule" => $upper_rule
,"module_id" => MDL_EPSILON_ID
,"module_path" => MODULE_PATH . "mdl_epsilon/convenience.php"
,"memo01" => $_POST["code"]
,"memo02" => $_POST["url"]
,"memo03" => $val
,"memo04" => "00100-0000-00000"
,"memo05" => $convenience
,"del_flg" => "0"
,"charge_flg" => "1"
,"upper_rule_max" => $upper_rule_max
);
}
// データが存在していればUPDATE、無ければINSERT
if(count($arrPaymentData) > 0){
$objQuery->update("dtb_payment", $arrData, " module_id = '" . MDL_EPSILON_ID . "' AND memo03 = '" . $val ."'");
}else{
$arrData["rank"] = $max_rank + 1;
$objQuery->insert("dtb_payment", $arrData);
}
}
}
// コンビニ入金確認処理
function lfEpsilonCheck(){
global $objQuery;
// trans_code を指定されていて且つ、入金済みの場合
if($_POST["trans_code"] != "" and $_POST["paid"] == 1 and $_POST["order_number"] != ""){
// ステータスを入金済みに変更する
$sql = "UPDATE dtb_order SET status = 6, update_date = now() WHERE order_id = ? AND memo04 = ? ";
$objQuery->query($sql, array($_POST["order_number"], $_POST["trans_code"]));
// POSTの内容を全てログ保存
$log_path = DATA_PATH . "logs/epsilon.log";
gfPrintLog("epsilon conveni start---------------------------------------------------------", $log_path);
foreach($_POST as $key => $val){
gfPrintLog( "\t" . $key . " => " . $val, $log_path);
}
gfPrintLog("epsilon conveni end-----------------------------------------------------------", $log_path);
//応答結果を表示
echo "1";
}
}
?>