source: branches/feature-module-update/html/mobile/shopping/payment.php @ 15080

Revision 15080, 11.7 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(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
5 *
6 * http://www.lockon.co.jp/
7 *
8 */
9
10require_once("../require.php");
11
12class LC_Page {
13    var $arrSession;
14    var $tpl_mode;
15    function LC_Page() {
16        $this->tpl_css = '/css/layout/shopping/pay.css';
17        $this->tpl_mainpage = 'shopping/payment.tpl';
18        $this->tpl_onload = 'fnCheckInputPoint();';
19        $this->tpl_title = "お支払方法の指定";
20        /*
21         session_start時のno-cacheヘッダーを抑制することで
22         「戻る」ボタン使用時の有効期限切れ表示を抑制する。
23         private-no-expire:クライアントのキャッシュを許可する。
24        */
25        session_cache_limiter('private-no-expire');     
26    }
27}
28
29$objPage = new LC_Page();
30$objView = new SC_MobileView();
31$objSiteSess = new SC_SiteSession();
32$objCartSess = new SC_CartSession();
33$objCustomer = new SC_Customer();
34$objSiteInfo = $objView->objSiteInfo;
35$arrInfo = $objSiteInfo->data;
36
37// パラメータ管理クラス
38$objFormParam = new SC_FormParam();
39// パラメータ情報の初期化
40lfInitParam();
41// POST値の取得
42$objFormParam->setParam($_POST);
43
44// ユーザユニークIDの取得と購入状態の正当性をチェック
45$uniqid = sfCheckNormalAccess($objSiteSess, $objCartSess);
46// ユニークIDを引き継ぐ
47$objPage->tpl_uniqid = $uniqid;
48
49// 会員ログインチェック
50if($objCustomer->isLoginSuccess()) {
51    $objPage->tpl_login = '1';
52    $objPage->tpl_user_point = $objCustomer->getValue('point');
53}
54
55// 金額の取得 (購入途中で売り切れた場合にはこの関数内にてその商品の個数が0になる)
56$objPage = sfTotalCart($objPage, $objCartSess, $arrInfo);
57$objPage->arrData = sfTotalConfirm($arrData, $objPage, $objCartSess, $arrInfo);
58
59// カー都内の商品の売り切れチェック
60$objCartSess->chkSoldOut($objCartSess->getCartList(), true);
61
62// 戻るボタンの処理
63if (!empty($_POST['return'])) {
64    switch ($_POST['mode']) {
65    case 'confirm':
66        $_POST['mode'] = 'payment';
67        break;
68    default:
69        // 正常な推移であることを記録しておく
70        $objSiteSess->setRegistFlag();
71        header("Location: " . gfAddSessionId(MOBILE_URL_SHOP_TOP));
72        exit;
73    }
74}
75
76switch($_POST['mode']) {
77// 支払い方法指定 → 配達日時指定
78case 'deliv_date':
79    // 入力値の変換
80    $objFormParam->convParam();
81    $objPage->arrErr = lfCheckError($objPage->arrData);
82    if (!isset($objPage->arrErr['payment_id'])) {
83        // 支払い方法の入力エラーなし
84        $objPage->tpl_mainpage = 'shopping/deliv_date.tpl';
85        $objPage->tpl_title = "配達日時指定";
86        break;
87    } else {
88        // ユーザユニークIDの取得
89        $uniqid = $objSiteSess->getUniqId();
90        // 受注一時テーブルからの情報を格納
91        lfSetOrderTempData($uniqid);
92    }
93    break;
94case 'confirm':
95    // 入力値の変換
96    $objFormParam->convParam();
97    $objPage->arrErr = lfCheckError($objPage->arrData );
98    // 入力エラーなし
99    if(count($objPage->arrErr) == 0) {
100        // DBへのデータ登録
101        lfRegistData($uniqid);
102        // 正常に登録されたことを記録しておく
103        $objSiteSess->setRegistFlag();
104        // 確認ページへ移動
105        header("Location: " . gfAddSessionId(MOBILE_URL_SHOP_CONFIRM));
106        exit;
107    }else{
108        // ユーザユニークIDの取得
109        $uniqid = $objSiteSess->getUniqId();
110        // 受注一時テーブルからの情報を格納
111        lfSetOrderTempData($uniqid);
112        if (!isset($objPage->arrErr['payment_id'])) {
113            // 支払い方法の入力エラーなし
114            $objPage->tpl_mainpage = 'shopping/deliv_date.tpl';
115            $objPage->tpl_title = "配達日時指定";
116        }
117    }
118    break;
119// 前のページに戻る
120case 'return':
121    // 非会員の場合
122    // 正常な推移であることを記録しておく
123    $objSiteSess->setRegistFlag();
124    header("Location: " . gfAddSessionId(MOBILE_URL_SHOP_TOP));
125    exit;
126    break;
127// 支払い方法が変更された場合
128case 'payment':
129    // ここのbreakは、意味があるので外さないで下さい。
130    break;
131default:
132    // 受注一時テーブルからの情報を格納
133    lfSetOrderTempData($uniqid);
134    break;
135}
136
137// 店舗情報の取得
138$arrInfo = $objSiteInfo->data;
139// 購入金額の取得得
140$total_pretax = $objCartSess->getAllProductsTotal($arrInfo);
141// 支払い方法の取得
142$objPage->arrPayment = lfGetPayment($total_pretax);
143// 配送時間の取得
144$arrRet = sfGetDelivTime($objFormParam->getValue('payment_id'));
145$objPage->arrDelivTime = sfArrKeyValue($arrRet, 'time_id', 'deliv_time');
146$objPage->objCustomer = $objCustomer;
147// 配送日一覧の取得
148$objPage->arrDelivDate = lfGetDelivDate();
149
150$objPage->arrForm = $objFormParam->getFormParamList();
151
152$objView->assignobj($objPage);
153$objView->display(SITE_FRAME);
154//--------------------------------------------------------------------------------------------------------------------------
155/* パラメータ情報の初期化 */
156function lfInitParam() {
157    global $objFormParam;
158    $objFormParam->addParam("お支払い方法", "payment_id", INT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"));
159    $objFormParam->addParam("ポイント", "use_point", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK", "ZERO_START"));
160    $objFormParam->addParam("配達時間", "deliv_time_id", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"));
161    $objFormParam->addParam("ご質問", "message", LTEXT_LEN, "KVa", array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
162    $objFormParam->addParam("ポイントを使用する", "point_check", INT_LEN, "n", array("MAX_LENGTH_CHECK", "NUM_CHECK"), '2');
163    $objFormParam->addParam("配達日", "deliv_date", STEXT_LEN, "KVa", array("MAX_LENGTH_CHECK"));
164}
165
166function lfGetPayment($total_pretax) {
167    $objQuery = new SC_Query();
168    $objQuery->setorder("rank DESC");
169    //削除されていない支払方法を取得
170    $arrRet = $objQuery->select("payment_id, payment_method, rule, upper_rule, note, payment_image", "dtb_payment", "del_flg = 0 AND deliv_id IN (SELECT deliv_id FROM dtb_deliv WHERE del_flg = 0) ");
171    //利用条件から支払可能方法を判定
172    foreach($arrRet as $data) {
173        //下限と上限が設定されている
174        if($data['rule'] > 0 && $data['upper_rule'] > 0) {
175            if($data['rule'] <= $total_pretax && $data['upper_rule'] >= $total_pretax) {
176                $arrPayment[] = $data;
177            }
178        //下限のみ設定されている
179        } elseif($data['rule'] > 0) {   
180            if($data['rule'] <= $total_pretax) {
181                $arrPayment[] = $data;
182            }
183        //上限のみ設定されている
184        } elseif($data['upper_rule'] > 0) {
185            if($data['upper_rule'] >= $total_pretax) {
186                $arrPayment[] = $data;
187            }
188        //設定なし
189        } else {
190            $arrPayment[] = $data;
191        }   
192    }
193    return $arrPayment;
194}
195
196/* 入力内容のチェック */
197function lfCheckError($arrData) {
198    global $objFormParam;
199    global $objCustomer;
200    // 入力データを渡す。
201    $arrRet =  $objFormParam->getHashArray();
202    $objErr = new SC_CheckError($arrRet);
203    $objErr->arrErr = $objFormParam->checkError();
204   
205    if($_POST['point_check'] == '1') {
206        $objErr->doFunc(array("ポイントを使用する", "point_check"), array("EXIST_CHECK"));
207        $objErr->doFunc(array("ポイント", "use_point"), array("EXIST_CHECK"));
208        $max_point = $objCustomer->getValue('point');
209        if($max_point == "") {
210            $max_point = 0;
211        }
212        if($arrRet['use_point'] > $max_point) {
213            $objErr->arrErr['use_point'] = "※ ご利用ポイントが所持ポイントを超えています。<br>";
214        }
215        if(($arrRet['use_point'] * POINT_VALUE) > $arrData['subtotal']) {
216            $objErr->arrErr['use_point'] = "※ ご利用ポイントがご購入金額を超えています。<br>";
217        }
218    }
219    return $objErr->arrErr;
220}
221
222/* 支払い方法文字列の取得 */
223function lfGetPaymentInfo($payment_id) {
224    $objQuery = new SC_Query();
225    $where = "payment_id = ?";
226    $arrRet = $objQuery->select("payment_method, charge", "dtb_payment", $where, array($payment_id));
227    return (array($arrRet[0]['payment_method'], $arrRet[0]['charge']));
228}
229
230/* 配送時間文字列の取得 */
231function lfGetDelivTimeInfo($time_id) {
232    $objQuery = new SC_Query();
233    $where = "time_id = ?";
234    $arrRet = $objQuery->select("deliv_id, deliv_time", "dtb_delivtime", $where, array($time_id));
235    return (array($arrRet[0]['deliv_id'], $arrRet[0]['deliv_time']));
236}
237
238/* DBへデータの登録 */
239function lfRegistData($uniqid) {
240    global $objFormParam;
241    $arrRet = $objFormParam->getHashArray();
242    $sqlval = $objFormParam->getDbArray();
243    // 登録データの作成
244    $sqlval['order_temp_id'] = $uniqid;
245    $sqlval['update_date'] = 'Now()';
246   
247    if($sqlval['payment_id'] != "") {
248        list($sqlval['payment_method'], $sqlval['charge']) = lfGetPaymentInfo($sqlval['payment_id']);
249    } else {
250        $sqlval['payment_id'] = '0';
251        $sqlval['payment_method'] = "";
252    }
253   
254    if($sqlval['deliv_time_id'] != "") {
255        list($sqlval['deliv_id'], $sqlval['deliv_time']) = lfGetDelivTimeInfo($sqlval['deliv_time_id']);
256    } else {
257        $sqlval['deliv_time_id'] = '0';
258        $sqlval['deliv_id'] = '0';
259        $sqlval['deliv_time'] = "";
260    }
261   
262    // 使用ポイントの設定
263    if($sqlval['point_check'] != '1') {
264        $sqlval['use_point'] = 0;
265    }
266   
267    sfRegistTempOrder($uniqid, $sqlval);
268}
269
270/* 配達日一覧を取得する */
271function lfGetDelivDate() {
272    $objCartSess = new SC_CartSession();
273    $objQuery = new SC_Query();
274    // 商品IDの取得
275    $max = $objCartSess->getMax();
276    for($i = 1; $i <= $max; $i++) {
277        if($_SESSION[$objCartSess->key][$i]['id'][0] != "") {
278            $arrID['product_id'][$i] = $_SESSION[$objCartSess->key][$i]['id'][0];
279        }
280    }
281    if(count($arrID['product_id']) > 0) {
282        $id = implode(",", $arrID['product_id']);
283        //商品から発送目安の取得
284        $deliv_date = $objQuery->get("dtb_products", "MAX(deliv_date_id)", "product_id IN (".$id.")");
285        //発送目安
286        switch($deliv_date) {
287        //即日発送
288        case '1':
289            $start_day = 1;
290            break;
291        //1-2日後
292        case '2':
293            $start_day = 3;
294            break;
295        //3-4日後
296        case '3':
297            $start_day = 5;
298            break;
299        //1週間以内
300        case '4':
301            $start_day = 8;
302            break;
303        //2週間以内
304        case '5':
305            $start_day = 15;
306            break;
307        //3週間以内
308        case '6':
309            $start_day = 22;
310            break;
311        //1ヶ月以内
312        case '7':
313            $start_day = 32;
314            break;
315        //2ヶ月以降
316        case '8':
317            $start_day = 62;           
318            break;
319        //お取り寄せ(商品入荷後)
320        case '9':
321            $start_day = "";
322            break;
323        default:
324            //お届け日が設定されていない場合
325            $start_day = "";
326            break;
327        }
328        //配達可能日のスタート値から、配達日の配列を取得する
329        $arrDelivDate = lfGetDateArray($start_day, DELIV_DATE_END_MAX);
330    }
331    return $arrDelivDate;
332}
333
334//配達可能日のスタート値から、配達日の配列を取得する
335function lfGetDateArray($start_day, $end_day) {
336    global $arrWDAY;
337    //配達可能日のスタート値がセットされていれば
338    if($start_day >= 1) {
339        $now_time = time();
340        $max_day = $start_day + $end_day;
341        // 集計
342        for ($i = $start_day; $i < $max_day; $i++) {
343            // 基本時間から日数を追加していく
344            $tmp_time = $now_time + ($i * 24 * 3600);
345            list($y, $m, $d, $w) = split(" ", date("y m d w", $tmp_time)); 
346            $val = sprintf("%02d/%02d/%02d(%s)", $y, $m, $d, $arrWDAY[$w]);
347            $arrDate[$val] = $val;
348        }
349    } else {
350        $arrDate = false;
351    }
352    return $arrDate;
353}
354
355//一時受注テーブルからの情報を格納する
356function lfSetOrderTempData($uniqid) {
357    global $objQuery;
358    global $objFormParam;
359   
360    $objQuery = new SC_Query();
361    $col = "payment_id, use_point, deliv_time_id, message, point_check, deliv_date";
362    $from = "dtb_order_temp";
363    $where = "order_temp_id = ?";
364    $arrRet = $objQuery->select($col, $from, $where, array($uniqid));
365    // DB値の取得
366    $objFormParam->setParam($arrRet[0]);
367    return $objFormParam;
368}
369
370
371?>
Note: See TracBrowser for help on using the repository browser.