tpl_mainpage = MODULE_PATH . 'mdl_remise/mdl_remise.tpl'; $this->tpl_subtitle = 'ルミーズ決済モジュール'; global $arrPayment; $this->arrPayment = $arrPayment; global $arrCredit; $this->arrCredit = $arrCredit; global $arrCreditDivide; $this->arrCreditDivide = $arrCreditDivide; } } $objPage = new LC_Page(); $objView = new SC_AdminView(); $objQuery = new SC_Query(); // ルミーズカードクレジット決済結果通知処理 lfRemiseCreditResultCheck(); // コンビニ入金チェック lfRemiseConveniCheck(); // 認証確認 $objSess = new SC_Session(); sfIsSuccess($objSess); // パラメータ管理クラス $objFormParam = new SC_FormParam(); $objFormParam = lfInitParam($objFormParam); // POST値の取得 $objFormParam->setParam($_POST); // 汎用項目を追加(必須!!) sfAlterMemo(); $mode = ""; if (isset($_POST['mode'])) { $mode = $_POST['mode']; } switch($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_REMISE_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")); $objFormParam->addParam("ホスト番号", "host_id", INT_LEN, "KVa", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK")); $objFormParam->addParam("クレジット接続先URL(PC)", "credit_url", URL_LEN, "KVa", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "URL_CHECK")); $objFormParam->addParam("クレジット接続先URL(モバイル)", "mobile_credit_url"); $objFormParam->addParam("支払い方法", "credit_method"); $objFormParam->addParam("オプション", "payment"); $objFormParam->addParam("コンビニ接続先URL(PC)", "convenience_url"); $objFormParam->addParam("コンビニ接続先URL(モバイル)", "mobile_convenience_url"); return $objFormParam; } // エラーチェックを行う function lfCheckError(){ global $objFormParam; $arrErr = $objFormParam->checkError(); // 利用クレジット、利用コンビニのエラーチェック $arrChkPay = $_POST["payment"]; // クレジットの支払い方法 if (count($_POST["credit_method"]) <= 0) { $arrErr["credit_method"] = "支払い方法が選択されていません。
"; } // 利用コンビニ if (isset($arrChkPay)) { if ($_POST["convenience_url"] == "" && $_POST["mobile_convenience_url"] == "") { $arrErr["convenience_url"] = "コンビニ接続先URL(PC)またはコンビニ接続先URL(モバイル)が入力されていません。
"; } } return $arrErr; } // 登録データを読み込む function lfLoadData(){ global $objFormParam; //データを取得 $arrRet = lfGetPaymentDB(" AND del_flg = '0'"); // 値をセット $objFormParam->setParam($arrRet[0]); // 画面表示用にデータを変換 $arrDisp = array(); $arrDisp["payment"][0] = 0; foreach($arrRet as $key => $val) { // クレジットの決済区分を取得 if($val["payment"] == 1) { $credit = $val["payment_code"]; $arrDisp["credit_url"] = $val["credit_url"]; $arrDisp["mobile_credit_url"] = $val["mobile_credit_url"]; $arrDisp["credit_method"] = $val["credit_method"]; } // コンビニの決済区分を取得 if($val["payment"] == 2) { $arrDisp["convenience"] = $val["convenience"]; $arrDisp["payment"][0] = 1; $arrDisp["convenience_url"] = $val["convenience_url"]; $arrDisp["mobile_convenience_url"] = $val["mobile_convenience_url"]; } } $objFormParam->setParam($arrDisp); $objFormParam->splitParamCheckBoxes("credit_method"); // クレジット支払い区分 //$objFormParam->splitParamCheckBoxes("credit_method"); } // DBからデータを取得する function lfGetPaymentDB($where = "", $arrWhereVal = array()){ global $objQuery; $arrVal = array(MDL_REMISE_ID); $arrVal = array_merge($arrVal, $arrWhereVal); $arrRet = array(); $sql = "SELECT module_id, memo01 as code, memo02 as host_id, memo03 as payment, memo04 as credit_url, memo05 as convenience_url, memo06 as mobile_credit_url, memo07 as mobile_convenience_url, memo08 as credit_method, memo09 as credit_divide FROM dtb_payment WHERE module_id = ? " . $where; $arrRet = $objQuery->getall($sql, $arrVal); return $arrRet; } // データの更新処理 function lfUpdPaymentDB(){ global $objQuery; global $objSess; // 支払い方法にチェックが入っている場合は、ハイフン区切りに編集する $convCnt = count($_POST["credit_method"]); if ($convCnt > 0) { $credit_method = $_POST["credit_method"][0]; for ($i = 1 ; $i < $convCnt ; $i++) { $credit_method .= "-" . $_POST["credit_method"][$i]; } } // del_flgを削除にしておく $del_sql = "UPDATE dtb_payment SET del_flg = 1 WHERE module_id = ? "; $arrDel = array(MDL_REMISE_ID); $objQuery->query($del_sql, $arrDel); $arrEntry = array('1'); if (count($_POST["payment"]) > 0) { $arrEntry[] = '2'; } foreach($arrEntry as $key => $val){ // ランクの最大値を取得する $max_rank = $objQuery->getone("SELECT max(rank) FROM dtb_payment"); // 支払方法データを取得 $arrPaymentData = lfGetPaymentDB("AND memo03 = ?", array($val)); // クレジット決済登録 if($val == 1) { $arrData = array( "payment_method" => "remiseクレジット" ,"fix" => 3 ,"creator_id" => $objSess->member_id ,"create_date" => "now()" ,"update_date" => "now()" ,"upper_rule" => REMISE_CREDIT_UPPER ,"module_id" => MDL_REMISE_ID ,"module_path" => MODULE_PATH . "mdl_remise/card.php" ,"memo01" => $_POST["code"] ,"memo02" => $_POST["host_id"] ,"memo03" => $val ,"memo04" => $_POST["credit_url"] ,"memo06" => $_POST["mobile_credit_url"] ,"memo08" => $credit_method ,"memo09" => REMISE_PAYMENT_DIVIDE_MAX ,"del_flg" => "0" ,"charge_flg" => "2" ,"upper_rule_max" => REMISE_CREDIT_UPPER ); } // コンビニにチェックが入っていればコンビニを登録する if($val == 2) { $arrData = array( "payment_method" => "remiseコンビニ" ,"fix" => 3 ,"creator_id" => $objSess->member_id ,"create_date" => "now()" ,"update_date" => "now()" ,"upper_rule" => REMISE_CONVENIENCE_UPPER ,"module_id" => MDL_REMISE_ID ,"module_path" => MODULE_PATH . "mdl_remise/convenience.php" ,"memo01" => $_POST["code"] ,"memo02" => $_POST["host_id"] ,"memo03" => $val ,"memo05" => $_POST["convenience_url"] ,"memo07" => $_POST["mobile_convenience_url"] ,"del_flg" => "0" ,"charge_flg" => "1" ,"upper_rule_max" => REMISE_CONVENIENCE_UPPER ,"rule_min" => REMISE_CONVENIENCE_BOTTOM ); } // データが存在していればUPDATE、無ければINSERT if (count($arrPaymentData) > 0) { $objQuery->update("dtb_payment", $arrData, " module_id = '" . MDL_REMISE_ID . "' AND memo03 = '" . $val ."'"); } else { $arrData["rank"] = $max_rank + 1; $objQuery->insert("dtb_payment", $arrData); } } } // ルミーズカードクレジット決済結果通知処理 function lfRemiseCreditResultCheck(){ global $objQuery; $log_path = DATA_PATH . "logs/remise_card_result.log"; gfPrintLog("remise card result : ".$_POST["X-TRANID"] , $log_path); // TRAN_ID を指定されていて、カード情報がある場合 if (isset($_POST["X-TRANID"]) && isset($_POST["X-PARTOFCARD"])) { $errFlg = FALSE; gfPrintLog("remise card result start----------", $log_path); foreach($_POST as $key => $val){ gfPrintLog( "\t" . $key . " => " . $val, $log_path); } gfPrintLog("remise credit result end ----------", $log_path); // IPアドレス制御する場合 if (REMISE_IP_ADDRESS_DENY == 1) { gfPrintLog("remise remoto ip address : ".$_SERVER["REMOTE_HOST"]."-".$_SERVER["REMOTE_ADDR"], $log_path); if (!isset($_SERVER["REMOTE_ADDR"]) || !lfIpAddressDenyCheck($_SERVER["REMOTE_ADDR"])) { print("NOT REMISE SERVER"); exit; } } // 請求番号と金額の取得 $order_id = 0; $payment_total = 0; if (isset($_POST["X-S_TORIHIKI_NO"])) { $order_id = $_POST["X-S_TORIHIKI_NO"]; } if (isset($_POST["X-TOTAL"])) { $payment_total = $_POST["X-TOTAL"]; } gfPrintLog("order_id : ".$order_id, $log_path); gfPrintLog("payment_total : ".$payment_total, $log_path); // 注文データ取得 $arrTempOrder = $objQuery->getall("SELECT payment_total FROM dtb_order_temp WHERE order_id = ? ", array($order_id)); // 金額の相違 if (count($arrTempOrder) > 0) { gfPrintLog("ORDER payment_total : ".$arrTempOrder[0]['payment_total'], $log_path); if ($arrTempOrder[0]['payment_total'] == $payment_total) { $errFlg = TRUE; } } if ($errFlg) { print(REMISE_PAYMENT_CHARGE_OK); exit; } print("ERROR"); exit; } } // コンビニ入金確認処理 function lfRemiseConveniCheck(){ global $objQuery; $log_path = DATA_PATH . "logs/remise_cv_charge.log"; gfPrintLog("remise conveni result : ".$_POST["JOB_ID"] , $log_path); // 必要なデータが送信されていて、収納通知の自動受信を許可している場合 if(isset($_POST["JOB_ID"]) && isset($_POST["REC_FLG"]) && REMISE_CONVENIENCE_RECIVE == 1){ $errFlg = FALSE; // 収納済みの場合 if ($_POST["REC_FLG"] == REMISE_CONVENIENCE_CHARGE) { // POSTの内容を全てログ保存 gfPrintLog("remise conveni charge start----------", $log_path); foreach($_POST as $key => $val){ gfPrintLog( "\t" . $key . " => " . $val, $log_path); } gfPrintLog("remise conveni charge end ----------", $log_path); // IPアドレス制御する場合 if (REMISE_IP_ADDRESS_DENY == 1) { gfPrintLog("remise remoto ip address : ".$_SERVER["REMOTE_HOST"]."-".$_SERVER["REMOTE_ADDR"], $log_path); if (!isset($_SERVER["REMOTE_ADDR"]) || !lfIpAddressDenyCheck($_SERVER["REMOTE_ADDR"])) { print("NOT REMISE SERVER"); exit; } } // 請求番号と金額の取得 $order_id = 0; $payment_total = 0; if (isset($_POST["S_TORIHIKI_NO"])) { $order_id = $_POST["S_TORIHIKI_NO"]; } if (isset($_POST["TOTAL"])) { $payment_total = $_POST["TOTAL"]; } gfPrintLog("order_id : ".$order_id, $log_path); gfPrintLog("payment_total : ".$payment_total, $log_path); // 注文データ取得 $arrTempOrder = $objQuery->getall("SELECT payment_total FROM dtb_order_temp WHERE order_id = ? ", array($order_id)); // 金額の相違 if (count($arrTempOrder) > 0) { gfPrintLog("ORDER payment_total : ".$arrTempOrder[0]['payment_total'], $log_path); if ($arrTempOrder[0]['payment_total'] == $payment_total) { $errFlg = TRUE; } } // JOB_IDと請求番号。入金金額が一致する場合のみ、ステータスを入金済みに変更する if ($errFlg) { $sql = "UPDATE dtb_order SET status = 6, update_date = now() ". "WHERE order_id = ? AND memo04 = ? "; $objQuery->query($sql, array($order_id, $_POST["JOB_ID"])); //応答結果を表示 print(REMISE_CONVENIENCE_CHARGE_OK); exit; } } print("ERROR"); exit; } } /** * IPアドレス帯域チェック * @param $ip IPアドレス * @return boolean */ function lfIpAddressDenyCheck($ip) { // IPアドレス範囲に入ってない場合 if (ip2long(REMISE_IP_ADDRESS_S) > ip2long($ip) || ip2long(REMISE_IP_ADDRESS_E) < ip2long($ip)) { return FALSE; } return TRUE; } ?>