<?php use Action\AbstractAction; use Index\CartModel; use Index\UserModel; use Plugin\Helpers; use Plugin\UnionTrans; /** * 购物车相关的控制器 * * @name IndexController * @package Cart * @copyright yoho.inc * @version 1.0 (2015-12-16 11:47:20) * @author gtskk <iamgtskk@gmail.com> */ class IndexController extends AbstractAction { /** * 通过当前用户审判是否跳到登录 * * @param boolean $useSession (true:从服务端session中检查, false:从客户端cookie中检查) * @return void */ protected function auditJumpLogin($useSession = true) { $uid = $this->getUid($useSession); if (!$uid) { $this->go(Helpers::url('/signin.html', array('refer' => $this->server('HTTP_REFERER', SITE_MAIN)))); } } /* * 购物车首页 */ public function indexAction() { $this->setTitle('购物车'); $this->setNavHeader('购物车', true, ''); $shoppingKey = Helpers::getShoppingKeyByCookie(); $uid = $this->getUid(true); $cartType = $this->get('cartType', 'all'); $data = array( 'shoppingCartPage' => true, 'shoppingCart' => CartModel::getCartData($uid, $shoppingKey, $cartType) ); // 渲染模板 $this->_view->display('index', $data); } /* * 异步获取购物车数据 */ public function getCartDataAction() { $result = array(); if ($this->isAjax()) { $shoppingKey = Helpers::getShoppingKeyByCookie(); $uid = $this->getUid(true); $result = CartModel::getCartData($uid, $shoppingKey); } if (empty($result)) { echo ' '; } else { $this->echoJson($result); } } /** * 异步获取购物车商品数目 */ public function countAction() { $result = array(); if ($this->isAjax()) { $uid = $this->getUid(true); $shoppingKey = Helpers::getShoppingKeyByCookie(); $result = CartModel::getCartCount($uid, $shoppingKey); } $this->echoJson($result); } /** * 购物车商品选择与取消 */ public function selectAction() { $result = array(); if ($this->isAjax()) { $productId = $this->post('skuList', 0); $uid = $this->getUid(true); $shoppingKey = Helpers::getShoppingKeyByCookie(); $result = CartModel::selectGoods($uid, $productId, $shoppingKey); } $this->echoJson($result); } /** * 移出购物车 */ public function delAction() { $result = array(); if ($this->isAjax()) { $sku = $this->post('sku', 0); $count = $this->post('count', 0); $uid = $this->getUid(true); $shoppingKey = Helpers::getShoppingKeyByCookie(); $result = CartModel::removeFromCart($uid, $sku, $count, $shoppingKey); } $this->echoJson($result); } /** * 移入收藏夹 */ public function colAction() { $result = array(); if ($this->isAjax()) { $productId = $this->post('id', 0); $uid = $this->getUid(true); $result = CartModel::addToFav($uid, $productId); } $this->echoJson($result); } /* * 赠品页面 */ public function giftAction() { $this->setTitle('赠品'); $this->setNavHeader('赠品', true, false); $shoppingKey = Helpers::getShoppingKeyByCookie(); $uid = $this->getUid(true); $cartType = $this->get('cartType', 'ordinary'); $data = array('giftPage' => true, 'cartType' => $cartType); $data += CartModel::getCartData($uid, $shoppingKey, $cartType, true); // 渲染模板 $this->_view->display('gift-advance', $data); } /* * 加价购页面 */ public function advanceBuyAction() { $this->setTitle('加价购'); $this->setNavHeader('加价购', true, false); $shoppingKey = Helpers::getShoppingKeyByCookie(); $uid = $this->getUid(true); $cartType = $this->get('cartType', 'ordinary'); $data = array('advanceBuyPage' => true, 'cartType' => $cartType); $data += CartModel::getCartData($uid, $shoppingKey, $cartType, false, true); // 渲染模板 $this->_view->display('gift-advance', $data); } /* * 获取购物车商品数据 */ public function goodinfoAction() { $result = array(); if ($this->isAjax()) { $num = $this->get('buy_num', 1); $skn = $this->get('skn', 1); $uid = $this->getUid(true); $result = CartModel::cartProductData($uid, $skn, $num); // 测试skn的ID为51172055 $result['num'] = $num; } if (!isset($result['code'])) { $this->_view->display('gift-info', array( 'cartInfo' => $result )); } else { echo ' '; } } // /* // * 获取购物车加价购商品数据模板 // */ // public function giftinfoTplAction() // { // if ($this->isAjax()) { // echo file_get_contents($this->_view->getScriptPath() . '/../partials/cart/chose-panel.phtml'); // } // } /* * 获取购物车加价购商品数据 */ public function giftinfoAction() { $result = array(); if ($this->isAjax()) { $skn = $this->get('skn', null); $promotionId = $this->get('promotionId', null); $result = CartModel::giftProductData($skn, $promotionId); } $this->_view->display('gift-info', array( 'promotionId' => $promotionId, 'cartInfo' => $result )); } /** * 修改购物车商品数量 */ public function modifyNumAction() { $result = array(); if ($this->isAjax()) { $shoppingKey = $this->getSession('shoppingKey'); $uid = $this->getUid(true); $sku = $this->post('sku', 0); $increaseNum = $this->post('increaseNum', null); $decreaseNum = $this->post('decreaseNum', null); $result = CartModel::modifyProductNum($uid, $sku, $increaseNum, $decreaseNum, $shoppingKey); } $this->echoJson($result); } /** * 修改购物车商品数据 */ public function modifyAction() { $result = array(); if ($this->isAjax()) { $shoppingKey = Helpers::getShoppingKeyByCookie(); $uid = $this->getUid(true); $params = array(); $params['old_product_sku'] = $this->post('old_product_sku', 0); $params['new_product_sku'] = $this->post('new_product_sku', 0); $params['buy_number'] = $this->post('buy_number', 0); $params['selected'] = $this->post('selected', null); $result = CartModel::modifyCartProduct($uid, $params, $shoppingKey); } $this->echoJson($result); } /** * 购物车结算请求 */ public function orderEnsureAction() { // 审判跳转登录页 $this->auditJumpLogin(); $this->setTitle('确认订单'); $this->setNavHeader('确认订单', Helpers::url('/cart/index/index'), false); // 不显示右上角home按钮 // 购物车商品为空跳转到购物车页面 $cartType = $this->get('cartType', ''); $cookieData = $this->getCookie('order-info', null); $orderInfo = array(); if (!empty($cookieData)) { $orderInfo = json_decode($cookieData, true); $cartType = $orderInfo['cartType']; } $uid = $this->getUid(true); $order = CartModel::cartPay($uid, $cartType, $orderInfo); if (isset($order['cartUrl'])) { $this->go($order['cartUrl']); } $data = array( 'orderEnsurePage' => true, 'isOrdinaryCart' => ($cartType !== 'advance'), 'orderEnsure' => $order ); $this->_view->display('order-ensure', $data); } /** * 购物车选择改变字段,重新运算订单数据 */ public function orderComputeAction() { $result = array(); if ($this->isAjax()) { $cartType = $this->post('cartType', 'ordinary'); $deliveryWay = $this->post('deliveryId', 1); $paymentType = $this->post('paymentTypeId', 1); $couponCode = $this->post('couponCode', null); $yohoCoin = $this->post('yohoCoin', null); $uid = $this->getUid(true); $result = CartModel::orderCompute($uid, $cartType, $deliveryWay, $paymentType, $couponCode, $yohoCoin); } $this->echoJson($result); } /** * 购物车输入优惠券码使用优惠券 */ public function couponSearchAction() { $result = array(); if ($this->isAjax()) { $couponCode = $this->post('couponCode', ''); $uid = $this->getUid(true); $result = CartModel::searchCoupon($uid, $couponCode); } $this->echoJson($result); } /** * 购物车结算--获取优惠券列表 */ public function couponListAction() { $result = array(); if ($this->isAjax()) { $uid = $this->getUid(true); $result = CartModel::getCouponList($uid); } if (empty($result)) { // 这儿需要返回空数组,勿改!!! echo '[]'; } else { $this->echoJson($result); } } /** * 下单流程 选择地址 */ public function selectAddressAction() { // 审判跳转登录页 $this->auditJumpLogin(); // 设置网站标题 $this->setTitle('选择地址'); $this->setNavHeader('选择地址', Helpers::url('/cart/index/orderEnsure'), false); $uid = $this->getUid(true); $address = UserModel::getAddressData($uid); $this->_view->display('select-address', array( 'selectAddressPage' => true, 'pageFooter' => true, 'address' => $address )); } /** * 下单流程 选择优惠券 */ public function selectCouponAction() { // 审判跳转登录页 $this->auditJumpLogin(); // 设置网站标题 $this->setTitle('选择优惠券'); $this->setNavHeader('选择优惠券', Helpers::url('/cart/index/orderEnsure'), false); $this->_view->display('select-coupon', array( 'selectCouponPage' => true, 'pageFooter' => true )); } /** * 确认结算订单 */ public function orderSubAction() { if ($this->isAjax()) { $uid = $this->getUid(true); $addressId = $this->post('addressId', null); $cartType = $this->post('cartType', 'ordinary'); // 默认普通购物车 $deliveryTime = $this->post('deliveryTimeId', 1); // 默认只工作日配送 $deliveryWay = $this->post('deliveryId', 1); // 默认普通快递 $invoiceTitle = $this->post('invoiceText', null); $invoiceId = $this->post('invoiceType', null); $paymentId = $this->post('paymentTypeId', 15); $paymentType = $this->post('paymentType', 1); // 默认在线支付 $remark = $this->post('msg', null); $couponCode = $this->post('couponCode', null); $yohoCoin = $this->post('yohoCoin', 1); $result = CartModel::orderSub($uid, $addressId, $cartType, $deliveryTime, $deliveryWay, $invoiceTitle, $invoiceId, $paymentId, $paymentType, $remark, $couponCode, $yohoCoin); // 记录下单异常的数据 if (empty($result)) { $message = 'uid:' . $uid . ',addressId:' . $addressId . ',cartType:' . $cartType . ',deliveryTime:' . $deliveryTime . ',deliveryWay:' . $deliveryWay . 'invoiceTitle:' . $invoiceTitle . ',invoiceId:' . $invoiceId . ',yohoCoin:' . $yohoCoin . ',paymentId:' . $paymentId . ',paymentType:' . $paymentType . ',remark:' . $remark . ',couponCode:' . $couponCode . "\n"; error_log($message, 3, '/Data/logs/php/h5_error/order.' . date('Ym') . '.log'); } // 返回数据 else { // 提交成功清除Cookie $this->setCookie('order-info', null); $this->echoJson($result); } if ($uid && !empty($result['data'])) { try { UnionTrans::set($uid, $result['data']['order_code'], $result['data']['order_amount']); } catch (Exception $e) { // do nothing } } } else { echo ' '; } } /** * 加入购物车 * * @param string productSku 商品的SKU * @param int buyNumber 购买数量 * @param int promotionId 促销ID, 加价购有关 * @param int goodsType 商品类型,0表示普通商品,1表示加价购商品 * @param int isEdit 是否是编辑商品SKU,0表示不是编辑 * @return json */ public function addAction() { $result = array(); if ($this->isAjax()) { $shoppingKey = Helpers::getShoppingKeyByCookie(); $productSku = $this->post('productSku'); $buyNumber = $this->post('buyNumber', 1); $goodsType = $this->post('goodsType', 0); $promotionId = $this->post('promotionId', 0); $isEdit = $this->post('isEdit', 0); $uid = $this->getUid(true); // 执行加入购物车操作 $result = CartModel::addToCart($productSku, $buyNumber, $goodsType, $isEdit, $promotionId, $uid, $shoppingKey); // 设置加入购物车凭证到客户端浏览器 if (empty($shoppingKey) && isset($result['data']['shopping_key'])) { $this->setCookie('_SPK', $result['data']['shopping_key'], time() + 86400 * 360); } } $this->echoJson($result); } }