postData()['params'], true); $productList = ProductModel::getAdvanceProduct($params); $user = $this->getUser(); // 实例化订单service $orderService = new FrontOrderSettledService($user, $productList, $params); // 获取订单信息 $orderInfo = $orderService->paySettlement(); if ($this->request->isGet()) { // 如果来源是小程序, 则获取小程序订阅消息id.获取支付成功,发货通知. $template_arr = MessageModel::getMessageByNameArr($params['pay_source'], ['order_pay_user', 'order_delivery_user']); return $this->renderSuccess('', compact('orderInfo', 'template_arr')); } // 订单结算提交 if ($orderService->hasError()) { return $this->renderError($orderService->getError()); } // 创建订单 $order_id = $orderService->createPayOrder($orderInfo); if (!$order_id) { return $this->renderError($orderService->getError() ?: '订单创建失败'); } // 返回结算信息 return $this->renderSuccess('', [ 'order_id' => $order_id, // 订单id 'order_type' => OrderTypeEnum::FRONT, //订单类型 ]); } /** * 立即支付定金 */ public function pay($order_id) { $user = $this->getUser(); // 获取订单详情 $model = OrderAdvanceModel::getUserOrderDetail($order_id, $user['user_id']); $params = $this->postData(); if ($this->request->isGet()) { // 开启的支付类型 $payTypes = AppModel::getPayType($model['app_id'], $params['pay_source']); // 支付金额 $payPrice = $model['pay_price']; $balance = $user['balance']; return $this->renderSuccess('', compact('payTypes', 'payPrice', 'balance')); } // 订单支付事件 if (!$model->onPay()) { return $this->renderError($model->getError() ?: '订单支付失败'); } $OrderModel = new OrderAdvanceModel; // 构建微信支付请求 $payInfo = $OrderModel->OrderPay($params, $model, $user); if (!$payInfo) { return $this->renderError($OrderModel->getError() ?: '订单支付失败'); } // 支付状态提醒 return $this->renderSuccess('', [ 'order_advance_id' => $order_id, // 定金订单id 'order_id' => $model['order_id'], // 主订单id 'pay_type' => $payInfo['payType'], // 支付方式 'payment' => $payInfo['payment'], // 微信支付参数 'order_type' => OrderTypeEnum::FRONT, //订单类型 'use_balance' => $payInfo['use_balance'],// 是否使用余额 'return_Url' => $params['pay_source'] == 'h5' ? urlencode(base_url() . "h5/pages/order/myorder") : '', //h5支付跳转地址 ]); } /** * 取消定金订单 */ public function cancelFront($order_id) { $user = $this->getUser(); $model = OrderAdvanceModel::getUserOrderDetail($order_id, $user['user_id']); if ($model->cancel($user)) { return $this->renderSuccess('订单取消成功'); } return $this->renderError($model->getError() ?: '订单取消失败'); } }