display(); } //验证登录 function validate_login(){ //是否已经登录 $json=array(); if (is_login()) { $json['redirect'] = U('/checkout'); } if (!$json) { $d=I('post.'); $user=M('Member')->getByUname($d['uname']); if(!$user){ $user=M('Member')->getByEmail($d['uname']); } //用户存在且可用 if(!($user&&$user['status']==1)){ $json['error']['warning']='用户不存在或被禁用!!'; } if(think_ucenter_encrypt($d['password'],C('PWD_KEY'))!=$user['pwd']){ $json['error']['warning']='密码错误!!'; } } if (!$json) { $auth = array( 'uid' => $user['member_id'], 'username' => $user['uname'], ); session('user_auth', $auth); session('user_auth_sign', data_auth_sign($auth)); $data = array(); $data['member_id'] = $user['member_id']; $data['last_login_time'] = time(); $data['login_count'] = array('exp','login_count+1'); $data['last_login_ip'] = get_client_ip(); M('Member')->save($data); storage_user_action($user['member_id'],$user['uname'],C('FRONTEND_USER'),'登录了网站'); if($user['address_id']!=0){ session('shipping_address_id',$user['address_id']); } //是否有货 $cart=new \Lib\Cart(); if ((!$cart->has_goods()) ) { $json['redirect'] = U('/cart'); $this->ajaxReturn($json); die; } $json['redirect'] = U('/checkout'); } $this->ajaxReturn($json); die(); } //选择是注册购买还是不注册购买 function user(){ if(I('u')=='register'){ $this->province=M('area')->where('area_parent_id=0')->select(); $this->display('register'); } if(I('u')=='guest'){ } } //用户注册验证写入 function register(){ if(IS_POST){ //未登录 $json=array(); if(!is_login()){ //验证是否有货 $cart=new \Lib\Cart(); if ((!$cart->has_goods())) { $json['redirect'] = U('/cart'); } //验证最小商品数量 $products = $cart->get_all_goods(); foreach ($products as $product) { $product_total = 0; foreach ($products as $product_2) { if ($product_2['goods_id'] == $product['goods_id']) { $product_total += $product_2['quantity']; } } if ($product['minimum'] > $product_total) { $json['redirect'] =U('/cart'); break; } } if (!$json) { $d=I('post.'); if ((utf8_strlen($d['uname']) <= 1) || (utf8_strlen($d['uname']) > 20)) { $json['error']['uname'] = '用户名长度必须大于1,小于20位!!'; } if ((utf8_strlen($d['name']) <= 1) || (utf8_strlen($d['name']) > 20)) { $json['error']['name'] = '性名长度必须大于1,小于20位!!'; } if (M('Member')->getByUname($d['uname'])) { $json['error']['uname'] = '用户名已经存在!!'; } if(empty($d['email'])){ $json['error']['email'] = 'email必填!!'; } if(!empty($d['email'])){ if ((utf8_strlen($d['email']) > 96) || !preg_match('/^[^\@]+@.*\.[a-z]{2,6}$/i', $d['email'])) { $json['error']['email'] = 'email格式错误!!'; } if (M('Member')->getByEmail($d['email'])) { $json['error']['email'] = 'email已经存在!!'; } } if ((utf8_strlen($d['telephone']) < 3) || (utf8_strlen($d['telephone']) > 32)) { $json['error']['telephone'] = '电话长度错误!!'; } if ((utf8_strlen($d['address']) < 3) || (utf8_strlen($d['address']) > 128)) { $json['error']['address'] = '地址长度错误!!'; } if ((utf8_strlen($d['password']) < 4) || (utf8_strlen($d['password']) > 20)) { $json['error']['password'] = '密码长度错误!!'; } if ($d['confirm'] != $d['password']) { $json['error']['confirm'] = '两次密码输入不一致!!'; } if($d['province_id']==-1){ $json['error']['area'] = '请选择省份!!'; } if($d['city_id']==-1){ $json['error']['area'] = '请选择城市!!'; } } if (!$json) { $uid=D('Member')->add_member(); $auth = array( 'uid' => $uid, 'username' => $d['uname'], ); storage_user_action($uid,$d['uname'],C('FRONTEND_USER'),'注册成为会员'); $email_content='您好,感谢您注册成为'.C('SITE_NAME').'会员
'. '您的账号是 '.$d['uname'].'
'. '邮箱是 '.$d['email'].'
'. '密码是 '.$d['password'].'
'. '您可以使用账号或者邮箱来进行网站的登录点此进行登录'; //发送邮件 think_send_mail($d['email'],$d['uname'],C('SITE_NAME').'会员注册成功',$email_content); session('user_auth', $auth); session('user_auth_sign', data_auth_sign($auth)); session('shipping_address_id', D('Member')->getAddress($uid)); } }else{ $json['redirect'] = U('/checkout'); } $this->ajaxReturn($json); die(); } $this->display(); } //收货地址 function shipping_address(){ $s=session('shipping_address_id'); if (isset($s)) { $this->address_id=$s; } else { $this->address_id=D('Member')->get_address_id(session('user_auth.uid')); } $this->province=M('area')->where('area_parent_id=0')->select(); $this->addresses=D('Member')->getAddress(session('user_auth.uid')); $this->display(); } function validate($cart,$json){ if (!is_login()) { $json['redirect'] = U('/checkout'); } //验证是否需要运送 if (!$cart->has_shipping()) { $json['redirect'] = U('/checkout'); } // 验证是否有货 if ((!$cart->has_goods() ) ) { $json['redirect'] = U('/cart'); } // 验证商品数量 $products = $cart->get_all_goods(); foreach ($products as $product) { $product_total = 0; foreach ($products as $product_2) { if ($product_2['goods_id'] == $product['goods_id']) { $product_total += $product_2['quantity']; } } if ($product['minimum'] > $product_total) { $json['redirect'] = U('/cart'); break; } } } //验证收货地址 function validate_shipping_address(){ $cart=new \Lib\Cart(); $json=array(); $this->validate($cart,$json); $w=new \Lib\Weight(); $weight=$w->format($cart->getWeight(), C('WEIGHT_ID')); session('weight',$weight['num']); if (!$json) { $d=I('post.'); if (isset($d['shipping_address']) && $d['shipping_address'] == 'existing') { if (empty($d['address_id'])) { $json['error']['warning'] ='请选择送货地址!!'; } elseif (!in_array($d['address_id'], array_keys(D('Member')->getAddress(session('user_auth.uid'))))) { $json['error']['warning'] = '无效地址!!'; } if (!$json) { session('shipping_address_id',$d['address_id']); $address_info = M('Address')->where('address_id='.$d['address_id'])->find(); if ($address_info) { session('shipping_city_id',$address_info['city_id']); //session('postcode',$address_info['postcode']); session('shipping_name',$address_info['name']); } else { session('shipping_city_id',null); //session('postcode',null); } session('shipping_method',null); } } if ($d['shipping_address'] == 'new') { if ((utf8_strlen($d['name']) < 1) || (utf8_strlen($d['name']) > 32)) { $json['error']['name'] = '姓名必须大于1位,小于32位!!'; } if ((utf8_strlen($d['address']) < 3) || (utf8_strlen($d['address']) > 128)) { $json['error']['address'] = '地址必须大于3位小于128位!!'; } if ((utf8_strlen($d['telephone']) < 3) || (utf8_strlen($d['telephone']) > 32)) { $json['error']['telephone'] = '电话长度错误!!'; } if($d['province_id']==-1){ $json['error']['area'] = '请选择省份!!'; } if($d['city_id']==-1){ $json['error']['area'] = '请选择城市!!'; } if (!$json) { session('shipping_address_id',D('Member')->add_address()); storage_user_action(session('user_auth.uid'),session('user_auth.username'),C('FRONTEND_USER'),'新增了收货地址'); session('shipping_city_id',$d['city_id']); session('shipping_method',null); } } } $this->ajaxReturn($json); die(); } function shipping_method_ajax() { } //货运方式 function shipping_method(){ $list=M('Transport')->select(); if(isset($list)&&is_array($list)){ foreach ($list as $k => $v) { $sm[$k]['id']=$v['id']; $sm[$k]['name']=$v['title']; $sm[$k]['info']=D('Transport')->calc_transport($v['id'], session('weight'), session('shipping_city_id') ); } } $this->sm=$sm; $this->display(); } //验证货运方式 function validate_shipping_method(){ $cart=new \Lib\Cart(); $json=array(); $this->validate($cart,$json); if (!$json) { $d=I('post.'); if (!isset($d['shipping_method'])) { $json['error']['warning'] = '请选择货运方式!!'; } else { if ($d['shipping_method']!=$d['shipping_method']) { $json['error']['warning'] ='非法操作!!'; } } if (!$json) { session('shipping_method',$d['shipping_method']); session('comment',strip_tags($d['comment'])); } } $this->ajaxReturn($json); die(); } //支付方式 function payment_method(){ $this->list=M('payment')->where(array('payment_state'=>'1'))->select(); $this->display(); } function validate_payment_method(){ $cart=new \Lib\Cart(); $json=array(); $this->validate($cart,$json); if (!$json) { $d=I('post.'); if (!isset($d['payment_method'])) { $json['error']['warning'] = '请选择支付方式!!'; } elseif (!M('Payment')->where(array('payment_code'=>$d['payment_method']))->find()) { //支付方式不存在 $json['error']['warning'] = '非法操作!!'; } if (!$json) { session('payment_method',$d['payment_method']); } } $this->ajaxReturn($json); die(); } function confirm_done() { $data = I('post.'); $cart=new \Lib\Cart(); $token=pay_token('token'); $goods=$cart->get_all_goods(); $goods_data = array_pop($goods); $hashids = new \Lib\Hashids(C('PWD_KEY'), C('URL_ID')); $goods_id=$hashids->decode($goods_data['goods_id']); $result = array('code' => 0); if (!is_login()) { $result['msg'] = '登录失效'; echo json_encode($result); die(); } //需要送货 if ($cart->has_shipping()) { $address_id=session('shipping_address_id'); $member_id = session('user_auth.uid'); $shipping_address = M('Address')->where(array('member_id'=>$member_id,'address_id' => $data['address_id']))->find(); if (empty($shipping_address)) { $result['msg'] = '请填写收货地址'; echo json_encode($result); die(); } else { $address_id = $shipping_address['address_id']; session('shipping_address_id',$address_id); } //是否选定了配送方式 session('shipping_method',$data['transport_id']); session('payment_method',$data['payment_method']); //payment_method shipping_method $shipping_method=session('shipping_method'); if (!isset($shipping_method)) { $result['msg'] = '请选择配送方式'; echo json_encode($result); die(); } }else{ session('shipping_method',null); } session('remark',$data['remark']); session('shipping_method',$data['delivery']); if($data['delivery'] == 'pickup') { session('express_id',0); }else { session('express_id',$data['express_id']); } session('pick_up_id',$data['pick_up_id']); if($data['delivery'] == 'pickup' && $data['pick_up_id'] == 0) { $result['msg'] = '请选择自提地点'; echo json_encode($result); die(); } session('shipping_address_id',$data['address_id']); // 验证是否有货 if ((!$cart->has_goods() ) ) { $result['msg'] = '购物车是空的'; echo json_encode($result); die(); } //商品规格库存状态 $goods_option_data = R('Goods/get_goods_options',$goods_id); $goods_info = M('goods')->where( array('goods_id' => $goods_id) )->find(); $max_quantity = $goods_info['quantity']; if(!empty($goods_data['option'])) { $opt_arr = array(); foreach($goods_data['option'] as $val){ $opt_arr[] = $val['option_value_id'].'_'.$val['goods_option_value_id']; } //判断规格库存是否比商品库存还小 foreach($goods_option_data['list'] as $vv) { foreach($vv['option_value'] as $option_value) { $tp_opt_str = $option_value['option_value_id'].'_'.$val['goods_option_value_id']; if(in_array($tp_opt_str,$opt_arr)){ if($max_quantity > $option_value['quantity']){ $max_quantity = $option_value['quantity']; } } } } $mul_opt_arr = array(); foreach($goods_data['option'] as $val){ $mul_opt_arr[] = $val['option_value_id']; } if(!empty($mul_opt_arr)) { $rela_goodsoption_valueid = implode('_', $mul_opt_arr); $goods_option_mult_value = M('goods_option_mult_value')->where( array('rela_goodsoption_valueid' => $rela_goodsoption_valueid,'goods_id'=>$goods_id) )->find(); if( !empty($goods_option_mult_value) ) { if($goods_option_mult_value['quantity']<$data['num']){ $result['msg'] = '商品数量不足,剩余'.$goods_option_mult_value['quantity'].'个!'; echo json_encode($result); die(); } } } } if($data['num'] > $max_quantity) { $result['msg'] = '库存不足'; echo json_encode($result); die(); } $goods_model = D('Home/Goods'); //检测商品限购 $can_buy_count = $goods_model->check_goods_user_canbuy_count(is_login(), $goods_id[0]); if($can_buy_count == -1) { $result['msg'] = '该商品限购,您已经不能再买了。'; echo json_encode($result); die(); }else if($can_buy_count >0 && $data['num'] >$can_buy_count) { $result['msg'] = '该商品限购,您还能购买'.$can_buy_count.'份'; echo json_encode($result); die(); } session('quantity',$data['num']); session('payment_voucher_id', $data['voucher_id']); //更新购物车数量 $cart->update($goods_data['key'], $data['num']); $result['code'] = 1; $pay_url = U('Payment/pay',array('token'=>$token)); $result['url'] = $pay_url; echo json_encode($result); die(); } function confirm(){ $cart=new \Lib\Cart(); $this->token=pay_token('token'); //需要送货 if ($cart->has_shipping()) { $address_id=session('shipping_address_id'); if (is_login()&& isset($address_id)) { $shipping_address = M('Address')->find($address_id); } if (empty($shipping_address)) { $redirect =U('/checkout'); } //是否选定了配送 $shipping_method=session('shipping_method'); if (!isset($shipping_method)) { $redirect =U('/checkout'); } }else{ session('shipping_method',null); } //是否有选择支付方法 $payment_method=session('payment_method'); if (!isset($payment_method)) { $redirect =U('/checkout'); } // 验证是否有货 if ((!$cart->has_goods() ) ) { $redirect = U('/cart'); } // 验证商品数量 $products = $cart->get_all_goods(); foreach ($products as $product) { $product_total = 0; foreach ($products as $product_2) { if ($product_2['goods_id'] == $product['goods_id']) { $product_total += $product_2['quantity']; } } if ($product['minimum'] > $product_total) { $redirect = U('/cart'); break; } } if (!isset($redirect)) { if($products){ //运费 $sm=D('Transport')->calc_transport(session('shipping_method'), session('weight'), session('shipping_city_id')); $this->sm=$sm; foreach ($products as $product) { $p[] = array( 'key' => $product['key'], 'image' => $product['image'], 'name' => $product['name'], 'model' => $product['model'], 'quantity' => $product['quantity'], 'price' => $product['price'], 'total' => $product['total'], 'goods_id' =>$product['goods_id'], 'total_price' =>$product['total'], 'option' =>$product['option'] ); } $this->products=$p; } } $this->display(); } //获取地区 function get_area(){ $goods_id = I('post.goods_id', 0); $where['area_parent_id']=$_REQUEST['areaId']; $hashids = new \Lib\Hashids(C('PWD_KEY'), C('URL_ID')); if(!empty($goods_id)) { $goods_id=$hashids->decode($goods_id ); $goods_id = $goods_id[0]; } if($where['area_parent_id'] == 0 && $goods_id > 0) { $goods_area_limit = M('goods_area')->where( array('goods_id' => $goods_id) )->find(); if(!empty($goods_area_limit)) { $area_limit_ids = unserialize($goods_area_limit['area_ids_text']); if(empty($area_limit_ids)) { $par_list = M('area')->where()->select(); } else { $par_list = M('area')->where(array('area_id' => array('in', implode(',',$area_limit_ids) ) ))->select(); } $par_ids = array(); foreach($par_list as $val) { if(empty($par_ids) || !in_array($val['area_parent_id'], $par_ids)) { $par_ids[] = $val['area_parent_id']; } } if(!empty($par_ids)) { $where['area_id'] = array('in', implode(',',$par_ids)); } } } else if($where['area_parent_id'] > 0 && $goods_id > 0) { $goods_area_limit = M('goods_area')->where( array('goods_id' => $goods_id) )->find(); if(!empty($goods_area_limit)) { $area_limit_ids = unserialize($goods_area_limit['area_ids_text']); if(!empty($area_limit_ids)) { $where['area_id'] = array('in', implode(',',$area_limit_ids)); } } } $area=M('area')->where($where)->select(); $this->ajaxReturn($area); } }