Переглянути джерело

login member_logout member_info

stanley-king 9 роки тому
батько
коміт
d978086c86

+ 1 - 1
core/framework/function/core.php

@@ -96,7 +96,7 @@ function setNcCookie($name, $value, $expire='3600', $path='', $domain='', $secur
 	$name = defined('COOKIE_PRE') ? COOKIE_PRE.$name : strtoupper(substr(md5(MD5_KEY),0,4)).'_'.$name;
 	$expire = intval($expire)?intval($expire):(intval(SESSION_EXPIRE)?intval(SESSION_EXPIRE):3600);
 	if(is_mobile()) {
-		$result = fcgi_setcookie($name, $value, time()+$expire, $path, $domain, $secure);
+		//$result = fcgi_setcookie($name, $value, time()+$expire, $path, $domain, $secure);
 	} else {
 		$result = setcookie($name, $value, time()+$expire, $path, $domain, $secure);
 	}

+ 1 - 2
core/framework/libraries/sms.php

@@ -72,8 +72,7 @@ class Sms
         $time = $content['time'];
         $type = intval($content['type']);
 
-		static $templates = array(self::register_code => '59006');
-
+		static $templates = array(self::register_code => '59006',self::resetpass_code => '63477', self::getbonus_code => '63479');
 		if(!array_key_exists($type,$templates)) return -1;
 
         return $this->send_msg($mobile,$code,$templates[$type],$time);

+ 105 - 5
data/model/cart.model.php

@@ -42,9 +42,24 @@ class cartModel extends Model
      *
      * @param
      */
-    public function checkCart($condition = array())
+    public function checkCart($condition = array(),$save_type = 'db')
     {
-        return $this->table('cart')->where($condition)->find();
+        if($save_type == 'db') {
+            return $this->table('cart')->where($condition)->find();
+        }
+        elseif ($save_type == 'Session')
+        {
+            $carts = $_SESSION['carts'];
+            if(empty($carts) ||count($carts) == 0) {
+                return false;
+            }
+            //todo ——套装的话需要另外处理,需要了解套装逻辑
+            if(array_key_exists($condition['goods_id'],$carts)) {
+                return true;
+            } else {
+                return false;
+            }
+        }
     }
 
     /**
@@ -151,6 +166,69 @@ class cartModel extends Model
     }
 
     /**
+     * 添加到cookie购物车,最多保存5个商品
+     *
+     * @param unknown_type $goods_info
+     * @param unknown_type $quantity
+     * @return unknown
+     */
+    private function _addCartSession($goods_info = array(), $quantity = null)
+    {
+        //验证购物车商品是否已经存在
+        $condition = array();
+        $condition['goods_id'] = $goods_info['goods_id'];
+        $condition['buyer_id'] = $goods_info['buyer_id'];
+        if (isset($goods_info['bl_id'])) {
+            $condition['bl_id'] = $goods_info['bl_id'];
+        } else {
+            $condition['bl_id'] = 0;
+        }
+        $isExist = $this->checkCart($condition,'Session');
+        if ($isExist)
+        {
+            $goods_model = Model("goods");
+            $goods_storage = $goods_model->getGoodsStorageById($goods_info['goods_id']);
+
+            $cart = &$_SESSION['cards'][$goods_info['goods_id']];
+            if (intval($goods_storage) < intval($cart['goods_num']) + $quantity) {
+                return false;
+            } else {
+                // 更新数量
+                $cart['goods_num'] = intval($cart['goods_num']) + $quantity;
+            }
+
+            $cart['store_id'] = $goods_info['store_id'];
+            $cart['goods_id'] = $goods_info['goods_id'];
+            $cart['goods_name'] = $goods_info['goods_name'];
+            $cart['goods_price'] = $goods_info['goods_price'];
+            $cart['goods_image'] = $goods_info['goods_image'];
+            $cart['store_name'] = $goods_info['store_name'];
+            $cart['bl_id'] = isset($goods_info['bl_id']) ? $goods_info['bl_id'] : 0;
+        }
+        else
+        {
+            $cart = array();
+            //$cart['buyer_id'] = $goods_info['buyer_id']; //todo 在合并购物车的时候,需要加入这个字段到数据库中。
+            $cart['store_id'] = $goods_info['store_id'];
+            $cart['goods_id'] = $goods_info['goods_id'];
+            $cart['goods_name'] = $goods_info['goods_name'];
+            $cart['goods_price'] = $goods_info['goods_price'];
+            $cart['goods_num'] = $quantity;
+            $cart['goods_image'] = $goods_info['goods_image'];
+            $cart['store_name'] = $goods_info['store_name'];
+            $cart['bl_id'] = isset($goods_info['bl_id']) ? $goods_info['bl_id'] : 0;
+
+            if(!is_array($_SESSION['carts'])) {
+                $_SESSION['carts'] = array();
+            }
+
+            $_SESSION['carts'][$goods_info['goods_id']] = $cart;
+        }
+
+        return true;
+    }
+
+    /**
      * 更新购物车
      *
      * @param    array $param 商品信息
@@ -206,6 +284,8 @@ class cartModel extends Model
             $cart_str = get_magic_quotes_gpc() ? stripslashes(cookie('cart')) : cookie('cart');
             $cart_str = base64_decode(decrypt($cart_str));
             $cart_list = @unserialize($cart_str);
+        } elseif ($type == 'Session') {
+            $cart_list = $_SESSION['carts'];
         }
         $cart_list = is_array($cart_list) ? $cart_list : array();
         //顺便设置购物车商品数和总金额
@@ -269,7 +349,8 @@ class cartModel extends Model
      */
     public function getCartNum($type, $condition = array())
     {
-        if ($type == 'db') {
+        if ($type == 'db')
+        {
             $cart_all_price = 0;
             $cart_goods = $this->listCart('db', $condition);
             $this->cart_goods_num = count($cart_goods);
@@ -279,7 +360,9 @@ class cartModel extends Model
                 }
             }
             $this->cart_all_price = ncPriceFormat($cart_all_price);
-        } elseif ($type == 'cookie') {
+        }
+        elseif ($type == 'cookie')
+        {
             $cart_str = get_magic_quotes_gpc() ? stripslashes(cookie('cart')) : cookie('cart');
             $cart_str = base64_decode(decrypt($cart_str));
             $cart_array = @unserialize($cart_str);
@@ -291,6 +374,17 @@ class cartModel extends Model
             }
             $this->cart_all_price = $cart_all_price;
         }
+        else if ($type == 'Session')
+        {
+            $cart_array = $_SESSION['carts'];
+            $cart_all_price = 0;
+            $this->cart_goods_num = count($cart_array);
+            foreach ($cart_array as $v) {
+                $cart_all_price += floatval($v['goods_price']) * intval($v['goods_num']);
+            }
+            $this->cart_all_price = $cart_all_price;
+        }
+
         @setNcCookie('cart_goods_num', $this->cart_goods_num, 2 * 3600);
         return $this->cart_goods_num;
     }
@@ -303,7 +397,13 @@ class cartModel extends Model
     {
         if (!$member_info['member_id']) return;
         // $save_type = C('cache.type') != 'file' ? 'cache' : 'cookie';
-        $save_type = 'cookie';
+
+        if(is_mobile()) {
+            $save_type = 'Session';
+        } else {
+            $save_type = 'cookie';
+        }
+
         $cart_new_list = $this->listCart($save_type);
         if (empty($cart_new_list)) return;
 

+ 1 - 0
data/model/member.model.php

@@ -224,6 +224,7 @@ class memberModel extends Model
         $_SESSION['member_email'] = $member_info['member_email'];
         $_SESSION['is_buy'] = isset($member_info['is_buy']) ? $member_info['is_buy'] : 1;
         $_SESSION['avatar'] = $member_info['member_avatar'];
+        $_SESSION['member_mobile'] = $member_info['member_mobile'];
 
         $seller_info = Model('seller')->getSellerInfo(array('member_id' => $_SESSION['member_id']));
         $_SESSION['store_id'] = $seller_info['store_id'];

+ 2 - 2
helper/exceptionex.php

@@ -10,7 +10,7 @@ class TypeException extends Exception
 {
     public function __construct()
     {
-        $code = errcode::ErrUnLogin;
+        $code = errcode::ErrApptype;
         $message = errcode::msg($code);
 
         parent::__construct($message, $code, null);
@@ -21,7 +21,7 @@ class UnloginException extends Exception
 {
     public function __construct()
     {
-        $code = errcode::ErrApptype;
+        $code = errcode::ErrUnLogin;
         $message = errcode::msg($code);
 
         parent::__construct($message, $code, null);

+ 1 - 0
helper/fcgi_server.php

@@ -43,6 +43,7 @@ class fcgi_server
                 init_cookie($_SERVER['HTTP_COOKIE']);
                 session::instance()->start();
 
+                Log::record(request_helper::req_uri(),Log::DEBUG);
                 $file = request_helper::script_file();
                 if(file_exists($file))
                 {

+ 13 - 11
helper/session.php

@@ -11,7 +11,7 @@ class session
     static $stInstance = NULL;
     private $fdestroy = false;
 
-    const sid_expire = 10;
+    const sid_expire = 10000;
     const prefix = 'PHPSESSID';
     const session_name = 'PHPSESSID';
 
@@ -41,15 +41,14 @@ class session
 
     public function start()
     {
+        $this->fdestroy = false;
         session_start();
     }
 
     public function end()
     {
         // 会触发write 和 close 函数
-        if($this->fdestroy == false) {
-            session_write_close();
-        }
+        session_write_close();
 
         foreach($_SESSION as $key=>$value) {
             unset($_SESSION[$key]);
@@ -58,11 +57,15 @@ class session
         foreach($_COOKIE as $key=>$value) {
             unset($_COOKIE[$key]);
         }
+        foreach($_SERVER as $key=>$value) {
+            unset($_SERVER[$key]);
+        }
     }
 
     public function destroy() {
         $this->fdestroy = true;
-        session_destroy();//会触发destroy 和 close 函数
+
+        //session_destroy();//会触发destroy 和 close 函数
     }
 
     public function onOpen() {
@@ -81,7 +84,6 @@ class session
                 dcache($rsid,self::prefix);
                 $rsid = session_id();
                 fcgi_setcookie("PHPSESSID","{$rsid}",time() + self::sid_expire * 60);
-                fcgi_setcookie("username","stanley");
             }
 
             return '';
@@ -94,7 +96,6 @@ class session
                 session_regenerate_id(false);
                 $rsid = session_id();
                 fcgi_setcookie("PHPSESSID","{$rsid}",time() + self::sid_expire * 60);
-                fcgi_setcookie("username","stanley");
 
                 return '';
             } else {
@@ -109,11 +110,12 @@ class session
     }
 
     public function onWrite($sid, $data) {
-//        Log::record("onWrite sid={$sid}",Log::DEBUG);
-        $ret = wcache($sid,array(self::session_name => $data),self::prefix,self::sid_expire);
-        if(!$ret) {
-            Log::record("onWrite sid={$sid} error.",Log::ERR);
+        if($this->fdestroy) {
+            dcache($sid,self::prefix);
+        } else {
+            $ret = wcache($sid,array(self::session_name => $data),self::prefix,self::sid_expire);
         }
+
         return true;
     }
 

+ 1 - 6
helper/sms_helper.php

@@ -21,12 +21,7 @@ class sms_helper
         if ($type == 'register') {
             $itype = Sms::register_code;
         }
-        elseif ($type == 'resetpass')
-        { //重置密码需要在登录的状态下才可以执行。
-            if($_SESSION['is_login'] == false) {
-                return array('code' => errcode::ErrUnLogin,'msg' => '');
-            }
-
+        elseif ($type == 'resetpass') { //重置密码需要在登录的状态下才可以执行。
             $itype = Sms::resetpass_code;
         } elseif ($type == 'getbonus') {
             $itype = Sms::bonus_code;

+ 4 - 13
mobile/control/bonus.php

@@ -36,14 +36,9 @@ class bonusControl extends mbMemberControl
      */
     public function bonus_listOp()
     {
-        $token = trim($_GET['key']);
-        if (false == $this->checkToken($token)) {
-            return joutput_error($this->err_code);
-        }
-
         // 根据token获取用户ID
         $condition = array();
-        $condition['user_id'] = $this->member_info['member_id'];
+        $condition['user_id'] = $_SESSION['member_id'];
         if (!empty($condition['user_id']))
         {
             // 红包总值(直接等于预存款值)
@@ -127,13 +122,9 @@ class bonusControl extends mbMemberControl
     // 红包绑定
     public function bind_bonusOp()
     {
-        $token = trim($_GET['key']);
-        if (false == $this->checkToken($token)) {
-            return joutput_error($this->err_code);
-        }
         // 获取user_id
         $condition = array();
-        $condition['member_id'] = $this->member_info['member_id'];
+        $condition['member_id'] = $_SESSION['member_id'];
         if (!empty($condition['member_id'])) {
 
             // get member_mobile 获取用户手机号
@@ -157,7 +148,7 @@ class bonusControl extends mbMemberControl
                         array_push($bonus_info, $info);
 
                         // 添加预存款
-                        $ret = $this->_add_money_ex($this->member_info['member_id'], $value['bonus_value'], $value["bonus_sn"], '', $bonus_type['type_name']);
+                        $ret = $this->_add_money_ex($_SESSION['member_id'], $value['bonus_value'], $value["bonus_sn"], '', $bonus_type['type_name']);
                         if (0 != $ret) {
                             Model::rollback();
                             return joutput_error(errcode::ErrDB);
@@ -165,7 +156,7 @@ class bonusControl extends mbMemberControl
                     }
                     // 更新为已领取
                     $data = array();
-                    $data['user_id'] = $this->member_info['member_id'];
+                    $data['user_id'] = $_SESSION['member_id'];
                     $data['status'] = '1';
                     $ret = Model()->table('user_bonus')->where(array('user_mobile' => $member[0]['member_mobile']))->update($data);
                     if (0 == $ret) {

+ 161 - 48
mobile/control/member_cart.php

@@ -12,23 +12,78 @@
 
 defined('InShopNC') or exit('Access Invalid!');
 
-class member_cartControl extends mbMemberControl
+class cartControl extends mobileControl
 {
     public function __construct()
     {
         parent::__construct();
     }
 
+    public function listOp()
+    {
+        $model_cart	= Model('cart');
+        $logic_buy_1 = logic('buy_1');
+
+        //购物车列表
+        if($_SESSION['is_login'] == 1) {
+            $cart_list	= $model_cart->listCart('db',array('buyer_id'=>$_SESSION['member_id']));
+        } else {
+            $cart_list	= $model_cart->listCart('Session',array('buyer_id'=>$_SESSION['member_id']));
+        }
+
+        //购物车列表 [得到最新商品属性及促销信息]
+        $cart_list = $logic_buy_1->getGoodsCartList($cart_list);
+
+        //购物车商品以店铺ID分组显示,并计算商品小计,店铺小计与总价由JS计算得出
+        $store_cart_list = array();
+        foreach ($cart_list as $cart) {
+            $cart['goods_total'] = ncPriceFormat($cart['goods_price'] * $cart['goods_num']);
+            $cart['goods_image'] = cthumb($cart['goods_image'], $cart['store_id']);
+            $store_cart_list[$cart['store_id']][] = $cart;
+        }
+
+        //店铺信息
+        $store_list = Model('store')->getStoreMemberIDList(array_keys($store_cart_list));
+        //取得店铺级活动 - 可用的满即送活动
+        $mansong_rule_list = $logic_buy_1->getMansongRuleList(array_keys($store_cart_list));
+        //取得哪些店铺有满免运费活动
+        $free_freight_list = $logic_buy_1->getFreeFreightActiveList(array_keys($store_cart_list));
+
+        if(in_array($_SESSION['client_type'],array('android', 'ios','ajax'))) {
+            $data = $this->format_cart($store_cart_list,$store_list,$mansong_rule_list,$free_freight_list);
+            self::outsuccess($data);
+        } else {
+            $data = $this->format_cart($store_cart_list,$store_list,$mansong_rule_list,$free_freight_list);
+            self::outsuccess($data);
+            //self::outsuccess($store_cart_list,$store_list,$mansong_rule_list,$free_freight_list);
+        }
+    }
+
+    private function format_cart($store_cart_list,$store_list,$mansong_rule_list,$free_freight_list)
+    {
+        $ret = array();
+        foreach($store_cart_list as $key => $val) {
+            $store_goods = array();
+            $store_goods['store_info'] = $store_list[$key];
+            $store_goods['free_freight'] = $free_freight_list[$key];
+            $store_goods['mansong_rule'] = $mansong_rule_list[$key];
+
+            $store_goods['goods_info'] = array();
+            foreach($val as $index => $goods) {
+                array_push($store_goods['goods_info'],$goods);
+            }
+
+            array_push($ret,$store_goods);
+        }
+
+        return $ret;
+    }
+
     /**
      * 购物车列表
      */
     public function cart_listOp()
     {
-        $token = trim($_GET['key']);
-        if (false == $this->checkToken($token)) {
-            return joutput_error($this->err_code);
-        }
-
         $page = trim($_GET['page']);
         $curpage = trim($_GET['curpage']);
         if (!isset($_GET['page'])) {
@@ -41,8 +96,7 @@ class member_cartControl extends mbMemberControl
         $model_cart = Model('cart');
         $model_goods = Model('goods');
 
-//        $condition = array('buyer_id' => trim($_GET['buyer_id']));
-        $condition = array('buyer_id' => $this->member_info['member_id']);
+        $condition = array('buyer_id' => $_SESSION['member_id']);
         $cart_list = $model_cart->getCartList($condition, $this->page);
         $page_count = $model_cart->gettotalpage();
         $model_cart->cls();
@@ -79,64 +133,123 @@ class member_cartControl extends mbMemberControl
             $cart_list[$key]['goods_sum'] = ncPriceFormat($value['goods_price'] * $value['goods_num']);
         }
 
-        joutput_data(array('cart_list' => $cart_list, 'mobile_page' => mobile_page($page_count)));
+        self::outsuccess(array('cart_list' => $cart_list, 'mobile_page' => mobile_page($page_count)));
     }
 
     /**
      * 购物车添加
      */
-    public function cart_addOp()
+    public function addOp()
     {
-        $token = trim($_GET['key']);
-        if (false == $this->checkToken($token)) {
-            return joutput_error($this->err_code);
-        }
-
-        $goods_id = intval($_POST['goods_id']);
-        $quantity = intval($_POST['quantity']);
-        if ($goods_id <= 0 || $quantity <= 0) {
-            return joutput_error(errcode::ErrInputParam);
-        }
-
         $model_goods = Model('goods');
-        $model_cart = Model('cart');
         $logic_buy_1 = Logic('buy_1');
 
-        $goods_info = $model_goods->getGoodsOnlineInfoAndPromotionById($goods_id);
+        if (is_numeric($_GET['goods_id']) && is_numeric($_POST['quantity']))
+        {
+            $goods_id = intval($_POST['goods_id']);
+            $quantity = intval($_POST['quantity']);
 
-        //验证是否可以购买
-        if (empty($goods_info)) {
-            return joutput_error(errcode::ErrGoodsOff, '商品已下架或不存在');
-        }
+            if ($goods_id <= 0 || $quantity <= 0) {
+                return self::outerr(errcode::ErrInputParam);
+            }
+
+            $goods_info = $model_goods->getGoodsOnlineInfoAndPromotionById($goods_id);
+            //抢购
+            $logic_buy_1->getGroupbuyInfo($goods_info);
+            //限时折扣
+            $logic_buy_1->getXianshiInfo($goods_info, $quantity);
 
-        //抢购
-        $logic_buy_1->getGroupbuyInfo($goods_info);
+            $ret = $this->check_goods($goods_info, $quantity);
+            if(is_array($ret)) {
+                return self::outerr($ret['code'],$ret['msg']);
+            }
+        }
+        elseif (is_numeric($_GET['bl_id']))
+        {
+            //优惠套装加入购物车(单套)
+            if ($_SESSION['is_login'] != 1) {
+                return self::outerr(errcode::ErrUnLogin);
+            }
+            $bl_id = intval($_GET['bl_id']);
+            if ($bl_id <= 0) return ;
+            $model_bl = Model('p_bundling');
+            $bl_info = $model_bl->getBundlingInfo(array('bl_id'=>$bl_id));
+            if (empty($bl_info) || $bl_info['bl_state'] == '0') {
+                return self::outerr(errcode::ErrBLUnExist);
+            }
 
-        //限时折扣
-        $logic_buy_1->getXianshiInfo($goods_info, $quantity);
+            //检查每个商品是否符合条件,并重新计算套装总价
+            $bl_goods_list = $model_bl->getBundlingGoodsList(array('bl_id'=>$bl_id));
+            $goods_id_array = array();
+            $bl_amount = 0;
+            foreach ($bl_goods_list as $goods) {
+                $goods_id_array[] = $goods['goods_id'];
+                $bl_amount += $goods['bl_goods_price'];
+            }
+            $model_goods = Model('goods');
+            $goods_list = $model_goods->getGoodsOnlineListAndPromotionByIdArray($goods_id_array);
+            foreach ($goods_list as $goods) {
+                $this->check_goods($goods,1);
+            }
 
-        if ($goods_info['store_id'] == $this->member_info['store_id']) {
-            return joutput_error(errcode::ErrCanNotBuyOwn);
+            //优惠套装作为一条记录插入购物车,图片取套装内的第一个商品图
+            $goods_info    = array();
+            $goods_info['store_id']	= $bl_info['store_id'];
+            $goods_info['goods_id']	= $goods_list[0]['goods_id'];
+            $goods_info['goods_name'] = $bl_info['bl_name'];
+            $goods_info['goods_price'] = $bl_amount;
+            $goods_info['goods_num']   = 1;
+            $goods_info['goods_image'] = $goods_list[0]['goods_image'];
+            $goods_info['store_name'] = $bl_info['store_name'];
+            $goods_info['bl_id'] = $bl_id;
+            $quantity = 1;
         }
-        if (intval($goods_info['goods_storage']) < 1 || intval($goods_info['goods_storage']) < $quantity) {
-            return joutput_error(errcode::ErrStorageShort);
+
+        //已登录状态,存入数据库,未登录时,存入COOKIE
+        if($_SESSION['member_id']) {
+            $save_type = 'db';
+            $goods_info['buyer_id'] = $_SESSION['member_id'];
+        } else {
+            $save_type = 'Session';
         }
 
-        $param = array();
-        $param['buyer_id'] = $this->member_info['member_id'];
-        $param['store_id'] = $goods_info['store_id'];
-        $param['goods_id'] = $goods_info['goods_id'];
-        $param['goods_name'] = $goods_info['goods_name'];
-        $param['goods_price'] = $goods_info['goods_price'];
-        $param['goods_image'] = $goods_info['goods_image'];
-        $param['store_name'] = $goods_info['store_name'];
-
-        $result = $model_cart->addCart($param, 'db', $quantity);
-        if ($result) {
-            joutput_data(array('result' => '1'));
+        $model_cart = Model('cart');
+        $insert = $model_cart->addCart($goods_info, $save_type , $quantity);
+        if ($insert) { //todo 此处返回结果有变化
+            $data = array('result' => 1, 'num' => $model_cart->cart_goods_num, 'amount' => ncPriceFormat($model_cart->cart_all_price));
+            return self::outsuccess($data);
         } else {
-            return joutput_error(errcode::ErrAddCart);
+            return self::outerr(errcode::ErrAddCart);
+        }
+    }
+
+    /**
+     * 检查商品是否符合加入购物车条件
+     * @param unknown $goods
+     * @param number $quantity
+     */
+    private function check_goods($goods_info, $quantity)
+    {
+        if(empty($quantity)) {
+            return array('code' => errcode::ErrInputParam, 'msg' => errcode::msg(errcode::ErrInputParam));
+        }
+        if(empty($goods_info)) {
+            return array('code' => errcode::ErrGoodsOff, 'msg'=> '商品已下架或不存在');
+        }
+        if ($goods_info['store_id'] == $_SESSION['store_id']) {
+            return array('code' => errcode::ErrCanNotBuyOwn, 'msg'=> errcode::msg(errcode::ErrCanNotBuyOwn));
+        }
+        if(intval($goods_info['goods_storage']) < 1) {
+            return array('code' => errcode::ErrGoodsOutofStock, 'msg' => errcode::msg(errcode::ErrGoodsOutofStock));
         }
+        if(intval($goods_info['goods_storage']) < $quantity) {
+            return array('code' => errcode::ErrStorageShort, 'msg' => errcode::msg(errcode::ErrStorageShort));
+        }
+        if ($goods_info['is_virtual'] || $goods_info['is_fcode'] || $goods_info['is_presell']) {
+            return array('code' => errcode::ErrGoodsSpecial, 'msg' => errcode::msg(errcode::ErrGoodsSpecial));
+        }
+
+        return true;
     }
 
     public function cart_editOp()

+ 23 - 12
mobile/control/control.php

@@ -32,10 +32,7 @@ class mobileControl
             $this->page = $page;
         }
 
-        if($this->check_app_type() == false) {
-            Log::record("Err client type.",Log::ERR);
-            throw new TypeException();
-        }
+        $this->check_app_type();
     }
 
     private static function eclipse_time() {
@@ -44,17 +41,24 @@ class mobileControl
 
     protected function check_app_type()
     {
-        $client = $_COOKIE['client'];
+        $client = $_SERVER['HTTP_CLIENT_TYPE'];
+        $version = $_SERVER['HTTP_CLIENT_VERSION'];
+
         if(empty($client)) {
-            $client = $_POST['client'];
+            $client = $_POST['CLIENT_TYPE'];
         }
 
-        if (empty($client) || !in_array($client, $this->client_type_array)) {
-            return false;
+        if (empty($client)|| !in_array($client, $this->client_type_array)) {
+            $_SESSION['client_type'] = 'wap';
         } else {
             $_SESSION['client_type'] = $client;
-            return true;
         }
+
+        if(!empty($version)) {
+            $_SESSION['client_version'] = $version;
+        }
+
+        return true;
     }
 
     static public function outerr($code,$msg = '',$page = '')
@@ -62,11 +66,15 @@ class mobileControl
         static $json_clients = array('android', 'ios','ajax');
         if(in_array($_SESSION['client_type'],$json_clients)) {
             joutput_error($code,$msg);
-        } else {
+        }
+        else if($_SESSION['client_type'] == 'wap') {
+
+        }
+        else {
             if(empty($msg)) {
                 $msg = errcode::msg($code);
             }
-            echo "code = {$code}, msg = {$msg}<br/>";
+            echo joutput_error($code,$msg,'web') . "<br/>";
             echo "eclipse_time = " . self::eclipse_time() . "<br/><br/>";
 
             $sqls = Log::sql_log();
@@ -82,10 +90,13 @@ class mobileControl
         if(in_array($_SESSION['client_type'],$json_clients)) {
             joutput_data($data);
         }
+        else if($_SESSION['client_type'] == 'wap') {
+
+        }
         else
         {
             echo 'success: return data=<br/>';
-            var_dump($data);
+            joutput_data($data,'web');
             echo "<br/><br/>";
             echo "eclipse_time = " . self::eclipse_time() . "<br/><br/>";
 

+ 31 - 2
mobile/control/login.php

@@ -78,7 +78,7 @@ class loginControl extends mobileHomeControl
             if($type == self::wxopen_login) { //如果是开放平台帐号,此处先需要注册
                 return self::outerr(errcode::ErrWxNotExist);
             } else {
-                return self::outerr(errcode::ErrLogin, "用户名或密码错误");
+                return self::outerr(errcode::ErrUserOrPass, "用户名或密码错误");
             }
         }
 
@@ -168,7 +168,7 @@ class loginControl extends mobileHomeControl
         }
 
         $mobile = trim($_POST['mobile']);
-        $password = trim($_POST['password']);
+        $password = trim($_POST['passwd']);
         $code = trim($_POST['code']);
 
         $validator = new Validate();
@@ -201,6 +201,35 @@ class loginControl extends mobileHomeControl
         }
     }
 
+    public function resetpassOp()
+    {
+        $mobile = trim($_POST['mobile']);
+        $password = trim($_POST['passwd']);
+        $code = trim($_POST['code']);
+
+        $validator = new Validate();
+        $validator->setValidate(Validate::verify_mobile($mobile));
+        $validator->setValidate(Validate::verify_password($password));
+        $validator->setValidate(Validate::smscode($code));
+        $err = $validator->validate();
+        if ($err != '') {
+            return self::outerr(errcode::ErrParamter, $err);
+        }
+
+        $ret = sms_helper::check_code(Sms::resetpass_code,$code);
+        if(is_array($ret)) {
+            return self::outerr($ret['code'], $ret['msg']);
+        }
+
+        $model = Model('member');
+        $ret = $model->editMember(array('member_mobile' => $mobile),array('member_passwd' => md5($password)));
+        if($ret == false) {
+            return self::outerr($ret['code'],$ret['msg']);
+        } else {
+            return self::outsuccess(NULL);
+        }
+    }
+
 //    //以下代码需要挪动
 //    public function bindOp()
 //    {

+ 10 - 46
mobile/control/member_address.php

@@ -25,13 +25,8 @@ class member_addressControl extends mbMemberControl
      */
     public function address_listOp()
     {
-        $token = trim($_GET['key']);
-        if (false == $this->checkToken($token)) {
-            return joutput_error($this->err_code);
-        }
-
         $model_address = Model('address');
-        $address_list = $model_address->getAddressList(array('member_id' => $this->member_info['member_id']));
+        $address_list = $model_address->getAddressList(array('member_id' => $_SESSION['member_id']));
         joutput_data(array('address_list' => $address_list));
     }
 
@@ -40,11 +35,6 @@ class member_addressControl extends mbMemberControl
      */
     public function address_infoOp()
     {
-        $token = trim($_GET['key']);
-        if (false == $this->checkToken($token)) {
-            return joutput_error($this->err_code);
-        }
-
         $address_id = intval($_POST['address_id']);
         if (empty($_POST['address_id']) || $address_id < 0) {
             return joutput_error(errcode::ErrParamter, "address_id = {$address_id}. must > 0.");
@@ -54,8 +44,7 @@ class member_addressControl extends mbMemberControl
         $condition = array();
         $condition['address_id'] = $address_id;
         $address_info = $model_address->getAddressInfo($condition);
-        if (!empty($address_id) && $address_info['member_id'] == $this->member_info['member_id']) {
-//            joutput_data(array('address_info' => $address_info));
+        if (!empty($address_id) && $address_info['member_id'] == $_SESSION['member_id']) {
             joutput_data($address_info);
         } else {
             return joutput_error(errcode::ErrAddress, '地址不存在');
@@ -67,11 +56,6 @@ class member_addressControl extends mbMemberControl
      */
     public function address_delOp()
     {
-        $token = trim($_GET['key']);
-        if (false == $this->checkToken($token)) {
-            return joutput_error($this->err_code);
-        }
-
         $address_id = intval($_POST['address_id']);
         if (empty($_POST['address_id']) || $address_id < 0) {
             return joutput_error(errcode::ErrParamter, "address_id = {$address_id}. must > 0.");
@@ -81,9 +65,9 @@ class member_addressControl extends mbMemberControl
 
         $condition = array();
         $condition['address_id'] = $address_id;
-        $condition['member_id'] = $this->member_info['member_id'];
+        $condition['member_id'] = $_SESSION['member_id'];
         $model_address->delAddress($condition);
-        $default_address_info = $model_address->getDefaultAddressInfo(array('member_id' => $this->member_info['member_id']));
+        $default_address_info = $model_address->getDefaultAddressInfo(array('member_id' => $_SESSION['member_id']));
         if (intval($default_address_info['is_default']) === 0) {
             $this->_set_default($default_address_info['address_id'], 1);
         }
@@ -95,11 +79,6 @@ class member_addressControl extends mbMemberControl
      */
     public function address_addOp()
     {
-        $token = trim($_GET['key']);
-        if (false == $this->checkToken($token)) {
-            return joutput_error($this->err_code);
-        }
-
         $model_address = Model('address');
         $err = '';
         $address_info = $this->_address_valid($err, $err_code);
@@ -107,7 +86,7 @@ class member_addressControl extends mbMemberControl
             return joutput_error($err_code, $err);
         }
 
-        $addr_acount = $model_address->field('count(*) as address_count')->where(array('member_id' => $this->member_info['member_id']))->select();
+        $addr_acount = $model_address->field('count(*) as address_count')->where(array('member_id' => $_SESSION['member_id']))->select();
 
         if (intval($addr_acount[0]['address_count']) >= self::MAX_ADDRESS_COUNT) {
             return joutput_error(errcode::ErrAddress, '地址数量已达上限');
@@ -115,7 +94,7 @@ class member_addressControl extends mbMemberControl
 
         $result = $model_address->addAddress($address_info);
         if ($result) {
-            $address_count = $model_address->field('count(*) as address_count')->where(array('member_id' => $this->member_info['member_id']))->select();
+            $address_count = $model_address->field('count(*) as address_count')->where(array('member_id' => $_SESSION['member_id']))->select();
             if (!empty($address_count) && count($address_count) > 0 && intval($address_count[0]['address_count']) === 1) {
                 $this->_set_default($result, 1);
             }
@@ -130,11 +109,6 @@ class member_addressControl extends mbMemberControl
      */
     public function address_editOp()
     {
-        $token = trim($_GET['key']);
-        if (false == $this->checkToken($token)) {
-            return joutput_error($this->err_code);
-        }
-
         $address_id = intval($_POST['address_id']);
         if (empty($_POST['address_id']) || $address_id < 0) {
             return joutput_error(errcode::ErrParamter, "address_id = {$address_id}. must > 0.");
@@ -143,7 +117,7 @@ class member_addressControl extends mbMemberControl
         $model_address = Model('address');
         //验证地址是否为本人
         $address_info = $model_address->getOneAddress($address_id);
-        if ($address_info['member_id'] != $this->member_info['member_id']) {
+        if ($address_info['member_id'] != $_SESSION['member_id']) {
             return joutput_error(errcode::ErrAddress, '参数错误');
         } else {
             $address_info = $this->_address_valid();
@@ -176,7 +150,7 @@ class member_addressControl extends mbMemberControl
         }
 
         $data = array();
-        $data['member_id'] = $this->member_info['member_id'];
+        $data['member_id'] = $_SESSION['member_id'];
         $data['true_name'] = urldecode($_POST['true_name']);
         $data['area_id'] = intval($_POST['area_id']);
         $data['city_id'] = intval($_POST['city_id']);
@@ -192,11 +166,6 @@ class member_addressControl extends mbMemberControl
      */
     public function set_defaultOp()
     {
-        $token = trim($_GET['key']);
-        if (false == $this->checkToken($token)) {
-            return joutput_error($this->err_code);
-        }
-
         $address_id = intval($_POST['address_id']);
         $is_default = intval($_POST['is_default']);
 
@@ -204,7 +173,7 @@ class member_addressControl extends mbMemberControl
 
         //验证地址是否为本人
         $address_info = $model_address->getOneAddress($address_id);
-        if ($address_info['member_id'] != $this->member_info['member_id']) {
+        if ($address_info['member_id'] != $_SESSION['member_id']) {
             return joutput_error(errcode::ErrAddress, '参数错误');
         } else {
             if ($this->_set_default($address_id, $is_default)) {
@@ -215,7 +184,7 @@ class member_addressControl extends mbMemberControl
 
     private function _set_default($address_id, $is_default)
     {
-        $member_id = $this->member_info['member_id'];
+        $member_id = $_SESSION['member_id'];
         $model_address = Model('address');
         if ($is_default === 1) {
             if ($model_address->where(array('member_id' => $member_id))->update(array('is_default' => '0'))) {
@@ -239,11 +208,6 @@ class member_addressControl extends mbMemberControl
      */
     public function area_listOp()
     {
-        $token = trim($_GET['key']);
-        if (false == $this->checkToken($token)) {
-            return joutput_error($this->err_code);
-        }
-
         $area_id = intval($_POST['area_id']);
         $from = $_POST['from'];
         if ($from === 'app') {

+ 17 - 34
mobile/control/member_info.php

@@ -49,21 +49,29 @@ class member_infoControl extends mbMemberControl
         $member_name = urldecode($_GET['member_name']);
         $member_sex = urldecode($_GET['member_sex']);
 
-        if (empty($member_name) || empty($member_sex)) {
+        if (empty($member_name) && is_numeric($member_sex) ) {
             return self::outerr(errcode::ErrInputParam);
         }
 
-        $member_id = $_SESSION['member_id'];
-        $condition = array('member_id' => $member_id);
-        $data = array('member_name' => $member_name, 'member_sex' => $member_sex);
+        $data = array();
+        if(!empty($member_name)) {
+            $data['member_name'] = $member_name;
+        }
+        $iSex = intval($member_sex);
+        if($iSex == 0 || $iSex ==1) {
+            $data['member_sex'] = $iSex;
+        }
 
-        $ret = Model('member')->editMember($condition,$data);
+        if(empty($data)) {
+            return self::outerr(errcode::ErrInputParam);
+        }
+        $ret = Model('member')->editMember(array('member_id' => $_SESSION['member_id']),$data);
 
         //todo 这下面$result['ret'] 什么意思
         if ($ret) {
-            $result['ret'] = 0;
-        } else {
             $result['ret'] = 1;
+        } else {
+            $result['ret'] = 0;
         }
 
         self::outsuccess($result);
@@ -105,6 +113,8 @@ class member_infoControl extends mbMemberControl
         $wx_openid = trim($_GET['wx_openid']);
         $wx_info = trim($_GET['user_info']);
 
+        Log::record("wechat info={$wx_info}",Log::DEBUG);
+
         // 输入内容判断
         $validator = new Validate();
         $validator->setValidate(Validate::verify_openid($wx_openid));
@@ -122,31 +132,4 @@ class member_infoControl extends mbMemberControl
             return self::outsuccess(NULL);
         }
     }
-
-    public function resetpassOp()
-    {
-        $password = trim($_POST['password']);
-        $code = trim($_POST['code']);
-
-        $validator = new Validate();
-        $validator->setValidate(Validate::verify_password($password));
-        $validator->setValidate(Validate::smscode($code));
-        $err = $validator->validate();
-        if ($err != '') {
-            return self::outerr(errcode::ErrParamter, $err);
-        }
-
-        $ret = sms_helper::check_code(Sms::resetpass_code,$code);
-        if(is_array($ret)) {
-            return self::outerr($ret['code'], $ret['msg']);
-        }
-
-        $model = Model('member');
-        $ret = $model->editMember(array('member_id' => $_SESSION['member_id']),array('member_passwd' => md5($password)));
-        if($ret == false) {
-            return self::outerr($ret['code'],$ret['msg']);
-        } else {
-            return self::outsuccess(NULL);
-        }
-    }
 }

+ 14 - 42
mobile/control/member_order.php

@@ -24,10 +24,6 @@ class member_orderControl extends mbMemberControl
      */
     public function order_listOp()
     {
-        $token = trim($_GET['key']);
-        if (false == $this->checkToken($token)) {
-            return joutput_error($this->err_code);
-        }
         $page = trim($_GET['page']);
         $curpage = trim($_GET['curpage']);
         if (!isset($_GET['page'])) {
@@ -39,7 +35,7 @@ class member_orderControl extends mbMemberControl
 
         $model_order = Model('order');
         $condition = array();
-        $condition['buyer_id'] = $this->member_info['member_id'];
+        $condition['buyer_id'] = $_SESSION['member_id'];
         $order_state = intval(trim($_GET['state']));
         if ($order_state >= 10) {
             $condition['order_state'] = $order_state;
@@ -107,14 +103,9 @@ class member_orderControl extends mbMemberControl
      */
     public function order_infoOp()
     {
-        $token = trim($_GET['key']);
-        if (false == $this->checkToken($token)) {
-            return joutput_error($this->err_code);
-        }
-
         $model_order = Model('order');
         $condition = array();
-        $condition['buyer_id'] = $this->member_info['member_id'];
+        $condition['buyer_id'] = $_SESSION['member_id'];
         $condition['pay_sn'] = $_POST['pay_sn'];
         $order_list_array = $model_order->getNormalOrderList($condition, $this->page, '*', 'order_id desc', '', array('order_address', 'order_goods'));
 
@@ -144,11 +135,6 @@ class member_orderControl extends mbMemberControl
      */
     public function order_cancelOp()
     {
-        $token = trim($_GET['key']);
-        if (false == $this->checkToken($token)) {
-            return joutput_error($this->err_code);
-        }
-
         $condition = array();
         if (!empty($_POST['order_id'])) {
             $order_id = intval($_POST['order_id']);
@@ -162,7 +148,7 @@ class member_orderControl extends mbMemberControl
         $model_order = Model('order');
         $logic_order = Logic('order');
 
-        $condition['buyer_id'] = $this->member_info['member_id'];
+        $condition['buyer_id'] = $_SESSION['member_id'];
         Log::record("buyer_id = {$condition['buyer_id']}", Log::DEBUG);
 
         $order_info = $model_order->getOrderInfo($condition);
@@ -175,7 +161,7 @@ class member_orderControl extends mbMemberControl
             return joutput_error(errcode::ErrOrder, "已支付和已发货订单不能取消.");
         }
 
-        $result = $logic_order->changeOrderStateCancel($order_info, 'buyer', $this->member_info['member_name'], '其它原因');
+        $result = $logic_order->changeOrderStateCancel($order_info, 'buyer', $_SESSION['member_name'], '其它原因');
         if (!$result['state']) {
             return joutput_error(errcode::ErrOrder, $result['msg']);
         } else {
@@ -188,17 +174,12 @@ class member_orderControl extends mbMemberControl
      */
     public function order_receiveOp()
     {
-        $token = trim($_GET['key']);
-        if (false == $this->checkToken($token)) {
-            return joutput_error($this->err_code);
-        }
-
         $model_order = Model('order');
         $order_id = intval($_POST['order_id']);
 
         $condition = array();
         $condition['order_id'] = $order_id;
-        $condition['buyer_id'] = $this->member_info['member_id'];
+        $condition['buyer_id'] = $_SESSION['member_id'];
         $order_info = $model_order->getOrderInfo($condition);
         $if_allow = $model_order->getOrderOperateState('receive', $order_info);
         if (!$if_allow) {
@@ -206,7 +187,7 @@ class member_orderControl extends mbMemberControl
         }
 
         $logic_order = Logic('order');
-        $result = $logic_order->changeOrderStateReceive($order_info, 'buyer', $this->member_info['member_name']);
+        $result = $logic_order->changeOrderStateReceive($order_info, 'buyer', $_SESSION['member_name']);
         if (!$result['state']) {
             return joutput_error(errcode::ErrOrder, $result['msg']);
         } else {
@@ -222,16 +203,12 @@ class member_orderControl extends mbMemberControl
         $html_type = "html";
         $cur_type = $html_type;
 
-        $token = trim($_GET['key']);
-        if (false == $this->checkToken($token))
-        {
-            if($cur_type == $html_type) {
-                Tpl::output('query_status', false);
-                Tpl::showpage('express_info');
-                return;
-            } else {
-                return joutput_error($this->err_code);
-            }
+        if($cur_type == $html_type) {
+            Tpl::output('query_status', false);
+            Tpl::showpage('express_info');
+            return;
+        } else {
+            return joutput_error($this->err_code);
         }
 
         $order_id = intval($_POST['order_id']);
@@ -248,7 +225,7 @@ class member_orderControl extends mbMemberControl
 
         $model_order = Model('order');
         $condition['order_id'] = $order_id;
-        $condition['buyer_id'] = $this->member_info['member_id'];
+        $condition['buyer_id'] = $_SESSION['member_id'];
         $order_info = $model_order->getOrderInfo($condition, array('order_common', 'order_goods'));
 
         if (empty($order_info) || !in_array($order_info['order_state'], array(ORDER_STATE_SEND, ORDER_STATE_SUCCESS)))
@@ -347,13 +324,8 @@ class member_orderControl extends mbMemberControl
      */
     public function orderCountStateOp()
     {
-        $token = trim($_GET['key']);
-        if (false == $this->checkToken($token)) {
-            return joutput_error($this->err_code);
-        }
-
         $condition = array();
-        $condition['buyer_id'] = $this->member_info['member_id'];
+        $condition['buyer_id'] = $_SESSION['member_id'];
         $result = Model()->table('order')->field('order_state, count(*) as count')->where($condition)->group('order_state')->select();
 
         joutput_data(array('order_count' => $result));

+ 13 - 4
mobile/framework/function/function.php

@@ -35,7 +35,7 @@ function output_error($message, $extend_data = array(),$code = 200) {
     output_data($datas, $extend_data,$code);
 }
 
-function joutput_data($datas) 
+function joutput_data($datas,$type='')
 {
     $data = array();
 
@@ -44,10 +44,14 @@ function joutput_data($datas)
     $data['message'] = errcode::msg($code);
     $data['datas'] = $datas;
 
-    echo(json_encode($data));
+    if(!empty($type) && $type == 'web') {
+        echo(json_encode($data,JSON_UNESCAPED_UNICODE));
+    } else {
+        echo(json_encode($data));
+    }
 }
 
-function joutput_error($code,$message = '') 
+function joutput_error($code,$message = '',$type='')
 {
     if(empty($message)) {
         $message = errcode::msg($code);
@@ -60,7 +64,12 @@ function joutput_error($code,$message = '')
 
     Log::record("code = {$code} message = {$message}",Log::ERR);
 
-    echo(json_encode($data));
+    if(!empty($type) && $type == 'web') {
+        echo(json_encode($data,JSON_UNESCAPED_UNICODE));
+    } else {
+        echo(json_encode($data));
+    }
+
 }
 
 function mobile_page($page_count) 

+ 16 - 0
mobile/util/errcode.php

@@ -24,6 +24,7 @@ class errcode extends SplEnum
     const ErrAccountStop = 10013;
     const ErrUnLogin = 10014;
     const ErrRegister = 10015;
+    const ErrUserOrPass = 10016;
 
     const ErrSpecial = 10100;
 
@@ -33,6 +34,8 @@ class errcode extends SplEnum
     const ErrCanNotBuyOwn = 10202;
     const ErrStorageShort = 10203;
     const ErrAddCart = 10204;
+    const ErrGoodsOutofStock = 10205;
+    const ErrGoodsSpecial = 10206;
 
     // 订单错误内容
     const ErrOrder = 10300;
@@ -46,6 +49,11 @@ class errcode extends SplEnum
     const ErrExpress = 10700;
     const ErrExpressNotExist = 10701;
 
+    //goods 10800
+
+    //套装
+    const ErrBLUnExist = 10900;
+
     const ErrDB = 11000;
     const ErrSms = 12000;
     const ErrSmsLessRepeateMinTime = 12001;
@@ -127,9 +135,17 @@ class errcode extends SplEnum
                 return '商品库存不足';
             case errcode::ErrAddCart:
                 return '添加购物车失败';
+            case errcode::ErrGoodsOutofStock :
+                return '商品缺货.';
+            case errcode::ErrGoodsSpecial :
+                return '该商品不允许加入购物车,请直接购买';
             case errcode::ErrGetConfig:
                 return '获取配置文件出错';
 
+
+            case errcode::ErrBLUnExist:
+                return '该优惠套装已不存在,建议您单独购买';
+
             case errcode::ErrDB :
                 return '系统错误';
             case errcode::ErrSms :

+ 3 - 1
request_helper.php

@@ -200,11 +200,13 @@ class request_helper
             'PHP_AUTH_PW',
             'AUTH_TYPE',
             'PATH_INFO',
+            'HTTP_CLIENT_TYPE',
+            'HTTP_CLIENT_VERSION',
             'ORIG_PATH_INFO');
 
         foreach ($fields as $field)
         {
-            try{
+            try {
                 unset($_SERVER[$field]);
                 $param = fcgi_getparam($field);
                 $_SERVER[$field] = $param;