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

Revision 15080, 12.5 KB checked in by nanasess, 17 years ago (diff)

svn properties 設定

  • svn:mime-type - application/x-httpd-php; charset=UTF-8
  • svn:keywords - Id
  • Property svn:keywords set to Id
  • Property svn:mime-type set to application/x-httpd-php; charset=UTF-8
Line 
1<?php
2/**
3 *
4 * @copyright   2000-2007 LOCKON CO.,LTD. All Rights Reserved.
5 * @version CVS: $Id$
6 * @link        http://www.lockon.co.jp/
7 *
8 */
9require_once(MODULE_PATH . "mdl_remise/mdl_remise.inc");
10
11//ページ管理クラス
12class LC_Page {
13    //コンストラクタ
14    function LC_Page() {
15        //メインテンプレートの指定
16        $this->tpl_mainpage = MODULE_PATH . 'mdl_remise/mdl_remise.tpl';
17        $this->tpl_subtitle = 'ルミーズ決済モジュール';
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
30// ルミーズカードクレジット決済結果通知処理
31lfRemiseCreditResultCheck();
32
33// コンビニ入金チェック
34lfRemiseConveniCheck();
35
36// 認証確認
37$objSess = new SC_Session();
38sfIsSuccess($objSess);
39
40// パラメータ管理クラス
41$objFormParam = new SC_FormParam();
42$objFormParam = lfInitParam($objFormParam);
43
44// POST値の取得
45$objFormParam->setParam($_POST);
46
47// 汎用項目を追加(必須!!)
48sfAlterMemo();
49
50$mode = "";
51if (isset($_POST['mode'])) {
52    $mode = $_POST['mode'];
53}
54
55switch($mode) {
56    case 'edit':
57        // 入力エラー判定
58        $objPage->arrErr = lfCheckError();
59
60        // エラーなしの場合にはデータを更新
61        if (count($objPage->arrErr) == 0) {
62            // データ更新
63            lfUpdPaymentDB();
64           
65            // javascript実行
66            $objPage->tpl_onload = 'alert("登録完了しました。\n基本情報>支払方法設定より詳細設定をしてください。"); window.close();';
67        }
68        break;
69    case 'module_del':
70        // 汎用項目の存在チェック
71        if (sfColumnExists("dtb_payment", "memo01")) {
72            // データの削除フラグをたてる
73            $objQuery->query("UPDATE dtb_payment SET del_flg = 1 WHERE module_id = ?", array(MDL_REMISE_ID));
74        }
75        break;
76    default:
77        // データのロード
78        lfLoadData();
79        break;
80}
81
82$objPage->arrForm = $objFormParam->getFormParamList();
83
84$objView->assignobj($objPage);                  //変数をテンプレートにアサインする
85$objView->display($objPage->tpl_mainpage);      //テンプレートの出力
86//-------------------------------------------------------------------------------------------------------
87/* パラメータ情報の初期化 */
88function lfInitParam($objFormParam) {
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");
97    return $objFormParam;
98}
99
100// エラーチェックを行う
101function lfCheckError(){
102    global $objFormParam;
103   
104    $arrErr = $objFormParam->checkError();
105   
106    // 利用クレジット、利用コンビニのエラーチェック
107    $arrChkPay = $_POST["payment"];
108
109    // クレジットの支払い方法
110    if (count($_POST["credit_method"]) <= 0) {
111        $arrErr["credit_method"] = "支払い方法が選択されていません。<br />";
112    }
113
114    // 利用コンビニ
115    if (isset($arrChkPay)) {
116        if ($_POST["convenience_url"] == "" && $_POST["mobile_convenience_url"] == "") {
117            $arrErr["convenience_url"] = "コンビニ接続先URL(PC)またはコンビニ接続先URL(モバイル)が入力されていません。<br />";
118        }
119    }
120
121    return $arrErr;
122}
123
124// 登録データを読み込む
125function lfLoadData(){
126    global $objFormParam;
127   
128    //データを取得
129    $arrRet = lfGetPaymentDB(" AND del_flg = '0'");
130
131    // 値をセット
132    $objFormParam->setParam($arrRet[0]);
133
134    // 画面表示用にデータを変換
135    $arrDisp = array();
136    $arrDisp["payment"][0] = 0;
137
138    foreach($arrRet as $key => $val) {
139        // クレジットの決済区分を取得
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
147        // コンビニの決済区分を取得
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   
159    // クレジット支払い区分
160    //$objFormParam->splitParamCheckBoxes("credit_method");
161}
162
163// DBからデータを取得する
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
189// データの更新処理
190function lfUpdPaymentDB(){
191    global $objQuery;
192    global $objSess;
193   
194    // 支払い方法にチェックが入っている場合は、ハイフン区切りに編集する
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
203    // del_flgを削除にしておく
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){
215        // ランクの最大値を取得する
216        $max_rank = $objQuery->getone("SELECT max(rank) FROM dtb_payment");
217
218        // 支払方法データを取得           
219        $arrPaymentData = lfGetPaymentDB("AND memo03 = ?", array($val));
220
221        // クレジット決済登録
222        if($val == 1) {
223
224            $arrData = array(
225                "payment_method" => "remiseクレジット"
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
246        // コンビニにチェックが入っていればコンビニを登録する
247        if($val == 2) {
248           
249            $arrData = array(
250                "payment_method" => "remiseコンビニ"
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
270        // データが存在していればUPDATE、無ければINSERT
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
280// ルミーズカードクレジット決済結果通知処理
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   
287    // TRAN_ID を指定されていて、カード情報がある場合
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
298        // IPアドレス制御する場合
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       
307        // 請求番号と金額の取得
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
322        // 注文データ取得
323        $arrTempOrder = $objQuery->getall("SELECT payment_total FROM dtb_order_temp WHERE order_id = ? ", array($order_id));
324
325        // 金額の相違
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
342// コンビニ入金確認処理
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   
349    // 必要なデータが送信されていて、収納通知の自動受信を許可している場合
350    if(isset($_POST["JOB_ID"]) && isset($_POST["REC_FLG"]) && REMISE_CONVENIENCE_RECIVE == 1){
351       
352        $errFlg = FALSE;
353           
354        // 収納済みの場合
355        if ($_POST["REC_FLG"] == REMISE_CONVENIENCE_CHARGE) {
356            // POSTの内容を全てログ保存
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
363            // IPアドレス制御する場合
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           
372            // 請求番号と金額の取得
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           
387            // 注文データ取得
388            $arrTempOrder = $objQuery->getall("SELECT payment_total FROM dtb_order_temp WHERE order_id = ? ", array($order_id));
389
390            // 金額の相違
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           
398            // JOB_IDと請求番号。入金金額が一致する場合のみ、ステータスを入金済みに変更する
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           
404                //応答結果を表示
405                print(REMISE_CONVENIENCE_CHARGE_OK);
406                exit;
407            }
408        }
409        print("ERROR");
410        exit;
411    }
412}
413
414/**
415 * IPアドレス帯域チェック
416 * @param $ip IPアドレス
417 * @return boolean
418 */
419function lfIpAddressDenyCheck($ip) {
420   
421    // IPアドレス範囲に入ってない場合
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.