postData()['params'], true); $store_setting = SettingModel::getItem('store'); if(!empty($store_setting["stop_business_time"])){ $start_time = strtotime($store_setting["stop_business_time"][0]); $end_time = strtotime($store_setting["stop_business_time"][1]) + 86399; $now_time = time(); $tips = empty($store_setting["stop_business_tips"]) ? '停业中,暂不支持付款' : $store_setting["stop_business_tips"]; if($now_time >=$start_time && $end_time >= $now_time){ return $this->renderError($tips); } } $user = $this->getUser(); if(!empty($user["addressDefault"])){ if(empty($user["addressDefault"]["province_id"]) || empty($user["addressDefault"]["city_id"]) || empty($user["addressDefault"]["region_id"])){ return $this->renderError("获取不到您准确的收货地址,请重新添加收货地址"); } } if(empty($params['activity_id'])){ return $this->renderError("活动id参数不正确"); } $params['user_id'] = $user['user_id']; $params['user'] = $user; $price_model = new ProductPriceModel(); $supplierData = $price_model::getOrderProductListByNow($params); // 实例化订单service $orderService = new BranchActivitySettledService($user, $supplierData, $params); // 获取订单信息 $orderInfo = $orderService->settlement(); // 订单结算提交 if ($orderService->hasError()) { return $this->renderError($orderService->getError()); } if ($this->request->isGet()) { // 如果来源是小程序, 则获取小程序订阅消息id.获取支付成功,发货通知. $template_arr = MessageModel::getMessageByNameArr($params['pay_source'], ['order_pay_user', 'order_delivery_user']); //是否显示店铺信息 $store_open=SettingModel::getStoreOpen(); // 是否开启支付宝支付 $show_alipay = PayService::isAlipayOpen($params['pay_source'], $user['app_id']); $balance = $user['balance']; if(!empty($user['address_default'])){ $detailAddress =$user['address_default']->toArray(); } $addressStr=empty($detailAddress)?'':$detailAddress['region']['province'].$detailAddress['region']['city'].$detailAddress['region']['region'].$detailAddress['detail']; $addressZb = empty($addressStr)?array('lng'=>'','lat'=>'') : ($detailAddress['longitude'] ? array('lng' => $detailAddress['longitude'], 'lat' => $detailAddress['latitude']) : $this->getAddress($addressStr)); return $this->renderSuccess('', compact('orderInfo', 'template_arr', 'store_open', 'show_alipay' , 'balance','addressZb','addressStr')); } // 创建订单 $order_id = $orderService->createOrder($orderInfo); if (!$order_id) { return $this->renderError($orderService->getError() ?: '订单创建失败'); } // 返回订单信息 return $this->renderSuccess('', [ 'order_id' => $order_id, // 订单号 ]); } /** * 订单确认-立即购买 */ public function cart() { // 立即购买:获取订单商品列表 if ($this->request->isGet()) { $params = json_decode($this->postData()['params'], true); }else{ $params = json_decode($this->postData()['params'], true); } $user = $this->getUser(); // 商品结算信息 $CartModel = new CartModel(); // 购物车商品列表 $supplierData = $CartModel->getList($user, $params['cart_ids'],$params['activity_id']); // 实例化订单service $orderService = new BranchActivitySettledService($user, $supplierData, $params); // 获取订单信息 $orderInfo = $orderService->settlement(); if ($this->request->isGet()) { // 如果来源是小程序, 则获取小程序订阅消息id.获取支付成功,发货通知. $template_arr = MessageModel::getMessageByNameArr($params['pay_source'], ['order_pay_user', 'order_delivery_user']); //是否显示店铺信息 $store_open=SettingModel::getStoreOpen(); // 是否开启支付宝支付 $show_alipay = PayService::isAlipayOpen($params['pay_source'], $user['app_id']); $balance = $user['balance']; if(!empty($user['address_default'])){ $detailAddress =$user['address_default']->toArray(); } $addressStr=empty($detailAddress)?'':$detailAddress['region']['province'].$detailAddress['region']['city'].$detailAddress['region']['region'].$detailAddress['detail']; $addressZb = empty($addressStr)?array('lng'=>'','lat'=>'') : ($detailAddress['longitude'] ? array('lng' => $detailAddress['longitude'], 'lat' => $detailAddress['latitude']) : $this->getAddress($addressStr)); return $this->renderSuccess('', compact('orderInfo', 'template_arr','store_open', 'show_alipay', 'balance','addressZb','addressStr')); } // 订单结算提交 if ($orderService->hasError()) { return $this->renderError($orderService->getError()); } // 创建订单 $order_id = $orderService->createOrder($orderInfo); if (!$order_id) { return $this->renderError($orderService->getError() ?: '订单创建失败'); } // 移出购物车中已下单的商品 $CartModel->clearAll($user, $params['cart_ids'],$params['activity_id']); // 返回订单信息 return $this->renderSuccess('', [ 'order_id' => $order_id, // 订单号 ]); } //输入地址获取经纬度(腾讯地图) function getAddress($address) { header("Content-type:text/html;charset=utf-8"); $ak = 'LS7BZ-NHSWK-CWOJQ-AJC7Y-H5HE2-UGBWR';//你腾讯地图的k值 $address = $address; $url = "http://apis.map.qq.com/ws/geocoder/v1/?address={$address}&key={$ak}"; $json = file_get_contents($url); $data = json_decode($json,TRUE); return $data['result']['location'];//获取地址的 经纬度 // ["lng"] => float(113.6401)//经度 // ["lat"] => float(34.72468)//纬度 } /* * 获取两个坐标点的距离 */ private static function getDistance($ulon, $ulat, $slon, $slat) { // 地球半径 $R = 6378137; // 将角度转为狐度 $radLat1 = deg2rad($ulat); $radLat2 = deg2rad($slat); $radLng1 = deg2rad($ulon); $radLng2 = deg2rad($slon); // 结果 $s = acos(cos($radLat1) * cos($radLat2) * cos($radLng1 - $radLng2) + sin($radLat1) * sin($radLat2)) * $R; // 精度 $s = round($s * 10000) / 10000; return round($s); } /** * 订单支付 */ public function pay() { $params = $this->postData(); $user = $this->getUser(); $payDetail = OrderModel::orderInfo($params['order_id'], $user); if ($this->request->isGet()) { // 开启的支付类型 $payTypes = AppModel::getPayType($payDetail['app_id'], $params['pay_source']); // 支付金额 $payPrice = $payDetail['payPrice']; $balance = $user['balance']; return $this->renderSuccess('', compact('payTypes', 'payPrice', 'balance')); } $OrderModel = new OrderModel; $payInfo = $OrderModel->OrderPay($user, $params); if (!$payInfo) { return $this->renderError($OrderModel->getError() ?: '订单支付失败'); } return $this->renderSuccess('', [ 'order_id' => $payInfo['order_id'], // 订单id 'pay_type' => $payInfo['payType'], // 支付方式 'payment' => $payInfo['payment'], // 支付参数 'order_type' => OrderTypeEnum::MASTER, //订单类型 'use_balance' => $payInfo['use_balance']// 是否使用余额 ]); } }