user = $this->getUser(); // 验证类 $this->validate = new CheckoutValidate; } /** * 订单结算台 * @return array * @throws \app\common\exception\BaseException * @throws \think\Exception * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException * @throws \Exception */ public function checkout() { // 实例化结算台服务 $Checkout = new CheckoutModel; // 订单结算api参数 $params = $Checkout->setParam($this->getParam([ 'goods_id' => 0, 'goods_num' => 0, 'goods_sku_id' => '', ])); // 表单验证 if (!$this->validate->scene('buyNow')->check($params)) { return $this->renderError($this->validate->getError()); } // 立即购买:获取订单商品列表 $model = new OrderModel; $goodsList = $model->getOrderGoodsListByNow($params); // 获取订单确认信息 $orderInfo = $Checkout->onCheckout($this->user, $goodsList); if ($this->request->isGet()) { return $this->renderSuccess($orderInfo); } // 订单结算提交 if ($Checkout->hasError()) { return $this->renderError($Checkout->getError()); } // 创建订单 if (!$Checkout->createOrder($orderInfo)) { return $this->renderError($Checkout->getError() ?: '订单创建失败'); } // 构建微信支付请求 $payment = $model->onOrderPayment($this->user, $Checkout->model, $params['pay_type']); // 返回结算信息 return $this->renderSuccess([ 'order_id' => $Checkout->model['order_id'], // 订单id 'pay_type' => $params['pay_type'], // 支付方式 'payment' => $payment // 微信支付参数 ], ['success' => '支付成功', 'error' => '订单未支付']); } /** * 订单结算提交的参数 * @param array $define * @return array */ private function getParam($define = []) { return array_merge($define, $this->request->param()); } /** * 我的拼团订单列表 * @param $dataType * @return array * @throws \think\exception\DbException */ public function lists($dataType) { $model = new OrderModel; $list = $model->getList($this->user['user_id'], $dataType); return $this->renderSuccess(compact('list')); } /** * 拼团订单详情信息 * @param $order_id * @return array * @throws \app\common\exception\BaseException */ public function detail($order_id) { // 订单详情 $model = OrderModel::getUserOrderDetail($order_id, $this->user['user_id']); // 该订单是否允许申请售后 $model['isAllowRefund'] = $model->isAllowRefund(); return $this->renderSuccess([ 'order' => $model, // 订单详情 'setting' => [ // 积分名称 'points_name' => SettingModel::getPointsName(), ], ]); } /** * 获取物流信息 * @param $order_id * @return array * @throws \app\common\exception\BaseException */ public function express($order_id) { // 订单信息 $order = OrderModel::getUserOrderDetail($order_id, $this->user['user_id']); if (!$order['express_no']) { return $this->renderError('没有物流信息'); } // 获取物流信息 /* @var \app\store\model\Express $model */ $model = $order['express']; $express = $model->dynamic($model['express_name'], $model['express_code'], $order['express_no']); if ($express === false) { return $this->renderError($model->getError()); } return $this->renderSuccess(compact('express')); } /** * 取消订单 * @param $order_id * @return array * @throws \app\common\exception\BaseException */ public function cancel($order_id) { $model = OrderModel::getUserOrderDetail($order_id, $this->user['user_id']); if ($model->cancel($this->user)) { return $this->renderSuccess($model->getError() ?: '订单取消成功'); } return $this->renderError($model->getError() ?: '订单取消失败'); } /** * 确认收货 * @param $order_id * @return array * @throws \app\common\exception\BaseException */ public function receipt($order_id) { $model = OrderModel::getUserOrderDetail($order_id, $this->user['user_id']); if ($model->receipt()) { return $this->renderSuccess(); } return $this->renderError($model->getError()); } /** * 立即支付 * @param int $order_id 订单id * @param int $payType 支付方式 * @return array * @throws \app\common\exception\BaseException * @throws \think\Exception * @throws \think\exception\DbException */ public function pay($order_id, $payType = PayTypeEnum::WECHAT) { // 订单详情 $model = OrderModel::getUserOrderDetail($order_id, $this->user['user_id']); // 订单支付事件 if (!$model->onPay($payType)) { return $this->renderError($model->getError() ?: '订单支付失败'); } // 构建微信支付请求 $payment = $model->onOrderPayment($this->user, $model, $payType); // 支付状态提醒 return $this->renderSuccess([ 'order_id' => $model['order_id'], // 订单id 'pay_type' => $payType, // 支付方式 'payment' => $payment // 微信支付参数 ], ['success' => '支付成功', 'error' => '订单未支付']); } /** * 获取订单核销二维码 * @param $order_id * @return array * @throws \app\common\exception\BaseException * @throws \think\exception\DbException */ public function extractQrcode($order_id) { // 订单详情 $order = OrderModel::getUserOrderDetail($order_id, $this->user['user_id']); // 判断是否为待核销订单 if (!$order->checkExtractOrder($order)) { return $this->renderError($order->getError()); } $Qrcode = new ExtractQRcode( $this->wxapp_id, $this->user, $order_id, OrderTypeEnum::SHARING ); return $this->renderSuccess([ 'qrcode' => $Qrcode->getImage(), ]); } }