source: branches/feature-module-update/data/downloads/module/mdl_remise/mdl_remise.php @ 15078

Revision 15078, 12.6 KB checked in by nanasess, 17 years ago (diff)

r15064 から svn cp
とりあえず暫定コミット.

  • UTF-8 に変更
  • slib.php, glib.php のクラス化
  • LC_Page の抽象化(一部)
RevLine 
[12157]1<?php
2/**
3 *
4 * @copyright   2000-2007 LOCKON CO.,LTD. All Rights Reserved.
5 * @version CVS: $Id: mdl_remise.php 1.0 2007-02-05 06:08:28Z inoue $
6 * @link        http://www.lockon.co.jp/
7 *
8 */
9require_once(MODULE_PATH . "mdl_remise/mdl_remise.inc");
10
[15078]11//ページ管理クラス
[12157]12class LC_Page {
[15078]13    //コンストラクタ
[12157]14    function LC_Page() {
[15078]15        //メインテンプレートの指定
[12157]16        $this->tpl_mainpage = MODULE_PATH . 'mdl_remise/mdl_remise.tpl';
[15078]17        $this->tpl_subtitle = 'ルミーズ決済モジュール';
[12157]18        global $arrPayment;
19        $this->arrPayment = $arrPayment;
20        global $arrCredit;
21        $this->arrCredit = $arrCredit;
22        global $arrCreditDivide;
23        $this->arrCreditDivide = $arrCreditDivide;
24    }
25}
26$objPage = new LC_Page();
27$objView = new SC_AdminView();
28$objQuery = new SC_Query();
29
[15078]30// ルミーズカードクレジット決済結果通知処理
[12157]31lfRemiseCreditResultCheck();
32
[15078]33// コンビニ入金チェック
[12157]34lfRemiseConveniCheck();
35
[15078]36// 認証確認
[12157]37$objSess = new SC_Session();
38sfIsSuccess($objSess);
39
[15078]40// パラメータ管理クラス
[12157]41$objFormParam = new SC_FormParam();
42$objFormParam = lfInitParam($objFormParam);
43
[15078]44// POST値の取得
[12157]45$objFormParam->setParam($_POST);
46
[15078]47// 汎用項目を追加(必須!!)
[12157]48sfAlterMemo();
49
50$mode = "";
51if (isset($_POST['mode'])) {
52    $mode = $_POST['mode'];
53}
54
55switch($mode) {
56    case 'edit':
[15078]57        // 入力エラー判定
[12157]58        $objPage->arrErr = lfCheckError();
59
[15078]60        // エラーなしの場合にはデータを更新
[12157]61        if (count($objPage->arrErr) == 0) {
[15078]62            // データ更新
[12157]63            lfUpdPaymentDB();
64           
[15078]65            // javascript実行
66            $objPage->tpl_onload = 'alert("登録完了しました。\n基本情報>支払方法設定より詳細設定をしてください。"); window.close();';
[12157]67        }
68        break;
69    case 'module_del':
[15078]70        // 汎用項目の存在チェック
[12157]71        if (sfColumnExists("dtb_payment", "memo01")) {
[15078]72            // データの削除フラグをたてる
[12157]73            $objQuery->query("UPDATE dtb_payment SET del_flg = 1 WHERE module_id = ?", array(MDL_REMISE_ID));
74        }
75        break;
76    default:
[15078]77        // データのロード
[12157]78        lfLoadData();
79        break;
80}
81
82$objPage->arrForm = $objFormParam->getFormParamList();
83
[15078]84$objView->assignobj($objPage);                  //変数をテンプレートにアサインする
85$objView->display($objPage->tpl_mainpage);      //テンプレートの出力
[12157]86//-------------------------------------------------------------------------------------------------------
[15078]87/* パラメータ情報の初期化 */
[12157]88function lfInitParam($objFormParam) {
[15078]89    $objFormParam->addParam("加盟店コード", "code", INT_LEN, "KVa", array("EXIST_CHECK", "MAX_LENGTH_CHECK"));
90    $objFormParam->addParam("ホスト番号", "host_id", INT_LEN, "KVa", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
91    $objFormParam->addParam("クレジット接続先URL(PC)", "credit_url", URL_LEN, "KVa", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "URL_CHECK"));
92    $objFormParam->addParam("クレジット接続先URL(モバイル)", "mobile_credit_url");
93    $objFormParam->addParam("支払い方法", "credit_method");
94    $objFormParam->addParam("オプション", "payment");
95    $objFormParam->addParam("コンビニ接続先URL(PC)", "convenience_url");
96    $objFormParam->addParam("コンビニ接続先URL(モバイル)", "mobile_convenience_url");
[12157]97    return $objFormParam;
98}
99
[15078]100// エラーチェックを行う
[12157]101function lfCheckError(){
102    global $objFormParam;
103   
104    $arrErr = $objFormParam->checkError();
105   
[15078]106    // 利用クレジット、利用コンビニのエラーチェック
[12157]107    $arrChkPay = $_POST["payment"];
108
[15078]109    // クレジットの支払い方法
[12157]110    if (count($_POST["credit_method"]) <= 0) {
[15078]111        $arrErr["credit_method"] = "支払い方法が選択されていません。<br />";
[12157]112    }
113
[15078]114    // 利用コンビニ
[12157]115    if (isset($arrChkPay)) {
116        if ($_POST["convenience_url"] == "" && $_POST["mobile_convenience_url"] == "") {
[15078]117            $arrErr["convenience_url"] = "コンビニ接続先URL(PC)またはコンビニ接続先URL(モバイル)が入力されていません。<br />";
[12157]118        }
119    }
120
121    return $arrErr;
122}
123
[15078]124// 登録データを読み込む
[12157]125function lfLoadData(){
126    global $objFormParam;
127   
[15078]128    //データを取得
[12157]129    $arrRet = lfGetPaymentDB(" AND del_flg = '0'");
130
[15078]131    // 値をセット
[12157]132    $objFormParam->setParam($arrRet[0]);
133
[15078]134    // 画面表示用にデータを変換
[12157]135    $arrDisp = array();
136    $arrDisp["payment"][0] = 0;
137
138    foreach($arrRet as $key => $val) {
[15078]139        // クレジットの決済区分を取得
[12157]140        if($val["payment"] == 1) {
141            $credit = $val["payment_code"];
142            $arrDisp["credit_url"] = $val["credit_url"];
143            $arrDisp["mobile_credit_url"] = $val["mobile_credit_url"];
144            $arrDisp["credit_method"] = $val["credit_method"];
145        }
146
[15078]147        // コンビニの決済区分を取得
[12157]148        if($val["payment"] == 2) {
149            $arrDisp["convenience"] = $val["convenience"];
150            $arrDisp["payment"][0] = 1;
151            $arrDisp["convenience_url"] = $val["convenience_url"];
152            $arrDisp["mobile_convenience_url"] = $val["mobile_convenience_url"];
153        }
154    }
155
156    $objFormParam->setParam($arrDisp);
157    $objFormParam->splitParamCheckBoxes("credit_method");
158   
[15078]159    // クレジット支払い区分
[12157]160    //$objFormParam->splitParamCheckBoxes("credit_method");
161}
162
[15078]163// DBからデータを取得する
[12157]164function lfGetPaymentDB($where = "", $arrWhereVal = array()){
165    global $objQuery;
166   
167    $arrVal = array(MDL_REMISE_ID);
168    $arrVal = array_merge($arrVal, $arrWhereVal);
169   
170    $arrRet = array();
171    $sql = "SELECT
172                module_id,
173                memo01 as code,
174                memo02 as host_id,
175                memo03 as payment,
176                memo04 as credit_url,
177                memo05 as convenience_url,
178                memo06 as mobile_credit_url,
179                memo07 as mobile_convenience_url,
180                memo08 as credit_method,
181                memo09 as credit_divide
182            FROM dtb_payment WHERE module_id = ? " . $where;
183    $arrRet = $objQuery->getall($sql, $arrVal);
184
185    return $arrRet;
186}
187
188
[15078]189// データの更新処理
[12157]190function lfUpdPaymentDB(){
191    global $objQuery;
192    global $objSess;
193   
[15078]194    // 支払い方法にチェックが入っている場合は、ハイフン区切りに編集する
[12157]195    $convCnt = count($_POST["credit_method"]);
196    if ($convCnt > 0) {
197        $credit_method = $_POST["credit_method"][0];
198        for ($i = 1 ; $i < $convCnt ; $i++) {
199            $credit_method .= "-" . $_POST["credit_method"][$i];
200        }
201    }
202
[15078]203    // del_flgを削除にしておく
[12157]204    $del_sql = "UPDATE dtb_payment SET del_flg = 1 WHERE module_id = ? ";
205    $arrDel = array(MDL_REMISE_ID);
206    $objQuery->query($del_sql, $arrDel);
207
208    $arrEntry = array('1');
209
210    if (count($_POST["payment"]) > 0) {
211        $arrEntry[] = '2';
212    }
213
214    foreach($arrEntry as $key => $val){
[15078]215        // ランクの最大値を取得する
[12157]216        $max_rank = $objQuery->getone("SELECT max(rank) FROM dtb_payment");
217
[15078]218        // 支払方法データを取得           
[12157]219        $arrPaymentData = lfGetPaymentDB("AND memo03 = ?", array($val));
220
[15078]221        // クレジット決済登録
[12157]222        if($val == 1) {
223
224            $arrData = array(
[15078]225                "payment_method" => "remiseクレジット"
[12157]226                ,"fix" => 3
227                ,"creator_id" => $objSess->member_id
228                ,"create_date" => "now()"
229                ,"update_date" => "now()"
230                ,"upper_rule" => REMISE_CREDIT_UPPER
231                ,"module_id" => MDL_REMISE_ID
232                ,"module_path" => MODULE_PATH . "mdl_remise/card.php"
233                ,"memo01" => $_POST["code"]
234                ,"memo02" => $_POST["host_id"]
235                ,"memo03" => $val
236                ,"memo04" => $_POST["credit_url"]
237                ,"memo06" => $_POST["mobile_credit_url"]
238                ,"memo08" => $credit_method
239                ,"memo09" => REMISE_PAYMENT_DIVIDE_MAX
240                ,"del_flg" => "0"
241                ,"charge_flg" => "2"
242                ,"upper_rule_max" => REMISE_CREDIT_UPPER
243            );
244        }
245
[15078]246        // コンビニにチェックが入っていればコンビニを登録する
[12157]247        if($val == 2) {
248           
249            $arrData = array(
[15078]250                "payment_method" => "remiseコンビニ"
[12157]251                ,"fix" => 3
252                ,"creator_id" => $objSess->member_id
253                ,"create_date" => "now()"
254                ,"update_date" => "now()"
255                ,"upper_rule" => REMISE_CONVENIENCE_UPPER
256                ,"module_id" => MDL_REMISE_ID
257                ,"module_path" => MODULE_PATH . "mdl_remise/convenience.php"
258                ,"memo01" => $_POST["code"]
259                ,"memo02" => $_POST["host_id"]
260                ,"memo03" => $val
261                ,"memo05" => $_POST["convenience_url"]
262                ,"memo07" => $_POST["mobile_convenience_url"]
263                ,"del_flg" => "0"
264                ,"charge_flg" => "1"
265                ,"upper_rule_max" => REMISE_CONVENIENCE_UPPER
266                ,"rule_min" => REMISE_CONVENIENCE_BOTTOM
267            );
268        }
269
[15078]270        // データが存在していればUPDATE、無ければINSERT
[12157]271        if (count($arrPaymentData) > 0) {
272            $objQuery->update("dtb_payment", $arrData, " module_id = '" . MDL_REMISE_ID . "' AND memo03 = '" . $val ."'");
273        } else {
274            $arrData["rank"] = $max_rank + 1;
275            $objQuery->insert("dtb_payment", $arrData);
276        }
277    }
278}
279
[15078]280// ルミーズカードクレジット決済結果通知処理
[12157]281function lfRemiseCreditResultCheck(){
282    global $objQuery;
283   
284    $log_path = DATA_PATH . "logs/remise_card_result.log";
285    gfPrintLog("remise card result : ".$_POST["X-TRANID"] , $log_path);
286   
[15078]287    // TRAN_ID を指定されていて、カード情報がある場合
[12157]288    if (isset($_POST["X-TRANID"]) && isset($_POST["X-PARTOFCARD"])) {
289       
290        $errFlg = FALSE;
291       
292        gfPrintLog("remise card result start----------", $log_path);
293        foreach($_POST as $key => $val){
294            gfPrintLog( "\t" . $key . " => " . $val, $log_path);
295        }
296        gfPrintLog("remise credit result end  ----------", $log_path);
297
[15078]298        // IPアドレス制御する場合
[12157]299        if (REMISE_IP_ADDRESS_DENY == 1) {
300            gfPrintLog("remise remoto ip address : ".$_SERVER["REMOTE_HOST"]."-".$_SERVER["REMOTE_ADDR"], $log_path);
301            if (!isset($_SERVER["REMOTE_ADDR"]) || !lfIpAddressDenyCheck($_SERVER["REMOTE_ADDR"])) {
302                print("NOT REMISE SERVER");
303                exit;
304            }
305        }
306       
[15078]307        // 請求番号と金額の取得
[12157]308        $order_id = 0;
309        $payment_total = 0;
310       
311        if (isset($_POST["X-S_TORIHIKI_NO"])) {
312            $order_id = $_POST["X-S_TORIHIKI_NO"];
313        }
314       
315        if (isset($_POST["X-TOTAL"])) {
316            $payment_total = $_POST["X-TOTAL"];
317        }
318       
319        gfPrintLog("order_id : ".$order_id, $log_path);
320        gfPrintLog("payment_total : ".$payment_total, $log_path);
321
[15078]322        // 注文データ取得
[12157]323        $arrTempOrder = $objQuery->getall("SELECT payment_total FROM dtb_order_temp WHERE order_id = ? ", array($order_id));
324
[15078]325        // 金額の相違
[12157]326        if (count($arrTempOrder) > 0) {
327            gfPrintLog("ORDER payment_total : ".$arrTempOrder[0]['payment_total'], $log_path);
328            if ($arrTempOrder[0]['payment_total'] == $payment_total) {
329                $errFlg = TRUE;
330            }
331        }
332       
333        if ($errFlg) {
334            print(REMISE_PAYMENT_CHARGE_OK);
335            exit;
336        }
337        print("ERROR");
338        exit;
339    }
340}
341
[15078]342// コンビニ入金確認処理
[12157]343function lfRemiseConveniCheck(){
344    global $objQuery;
345   
346    $log_path = DATA_PATH . "logs/remise_cv_charge.log";
347    gfPrintLog("remise conveni result : ".$_POST["JOB_ID"] , $log_path);
348   
[15078]349    // 必要なデータが送信されていて、収納通知の自動受信を許可している場合
[12157]350    if(isset($_POST["JOB_ID"]) && isset($_POST["REC_FLG"]) && REMISE_CONVENIENCE_RECIVE == 1){
351       
352        $errFlg = FALSE;
353           
[15078]354        // 収納済みの場合
[12157]355        if ($_POST["REC_FLG"] == REMISE_CONVENIENCE_CHARGE) {
[15078]356            // POSTの内容を全てログ保存
[12157]357            gfPrintLog("remise conveni charge start----------", $log_path);
358            foreach($_POST as $key => $val){
359                gfPrintLog( "\t" . $key . " => " . $val, $log_path);
360            }
361            gfPrintLog("remise conveni charge end  ----------", $log_path);
362
[15078]363            // IPアドレス制御する場合
[12157]364            if (REMISE_IP_ADDRESS_DENY == 1) {
365                gfPrintLog("remise remoto ip address : ".$_SERVER["REMOTE_HOST"]."-".$_SERVER["REMOTE_ADDR"], $log_path);
366                if (!isset($_SERVER["REMOTE_ADDR"]) || !lfIpAddressDenyCheck($_SERVER["REMOTE_ADDR"])) {
367                    print("NOT REMISE SERVER");
368                    exit;
369                }
370            }
371           
[15078]372            // 請求番号と金額の取得
[12157]373            $order_id = 0;
374            $payment_total = 0;
375           
376            if (isset($_POST["S_TORIHIKI_NO"])) {
377                $order_id = $_POST["S_TORIHIKI_NO"];
378            }
379           
380            if (isset($_POST["TOTAL"])) {
381                $payment_total = $_POST["TOTAL"];
382            }
383           
384            gfPrintLog("order_id : ".$order_id, $log_path);
385            gfPrintLog("payment_total : ".$payment_total, $log_path);
386           
[15078]387            // 注文データ取得
[12157]388            $arrTempOrder = $objQuery->getall("SELECT payment_total FROM dtb_order_temp WHERE order_id = ? ", array($order_id));
389
[15078]390            // 金額の相違
[12157]391            if (count($arrTempOrder) > 0) {
392                gfPrintLog("ORDER payment_total : ".$arrTempOrder[0]['payment_total'], $log_path);
393                if ($arrTempOrder[0]['payment_total'] == $payment_total) {
394                    $errFlg = TRUE;
395                }
396            }
397           
[15078]398            // JOB_IDと請求番号。入金金額が一致する場合のみ、ステータスを入金済みに変更する
[12157]399            if ($errFlg) {
400                $sql = "UPDATE dtb_order SET status = 6, update_date = now() ".
401                    "WHERE order_id = ? AND memo04 = ? ";
402                $objQuery->query($sql, array($order_id, $_POST["JOB_ID"]));
403           
[15078]404                //応答結果を表示
[12157]405                print(REMISE_CONVENIENCE_CHARGE_OK);
406                exit;
407            }
408        }
409        print("ERROR");
410        exit;
411    }
412}
413
414/**
[15078]415 * IPアドレス帯域チェック
416 * @param $ip IPアドレス
[12157]417 * @return boolean
418 */
419function lfIpAddressDenyCheck($ip) {
420   
[15078]421    // IPアドレス範囲に入ってない場合
[12157]422    if (ip2long(REMISE_IP_ADDRESS_S) > ip2long($ip) ||
423        ip2long(REMISE_IP_ADDRESS_E) < ip2long($ip)) {
424        return FALSE;
425    }
426    return TRUE;
427}
428
429?>
Note: See TracBrowser for help on using the repository browser.