| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- <?php
- namespace app\api\controller\product;
- use app\common\controller\Frontend;
- use think\facade\Db;
- class OrderStatus extends Frontend
- {
- protected array $noNeedPermission = ['check'];
- protected array $noNeedLogin = ['check']; // 允许未登录用户查询(通过订单号)
- /**
- * 查询订单状态(前端轮询调用)
- * GET /api/product/orderStatus/check?order_no=BUV202601161721166683
- */
- public function check()
- {
- // 1. 获取订单号
- $orderNo = $this->request->get('order_no', '');
- if (empty($orderNo)) {
- return json([
- 'code' => 400,
- 'msg' => '订单号不能为空',
- 'data' => null
- ]);
- }
- // 2. 查询订单信息
- $order = Db::name('order')
- ->where('order_no', $orderNo)
- ->field('id, order_no, user_id, pay_amount, pay_method,
- pay_status, order_status, pay_time, create_time')
- ->find();
- if (!$order) {
- return json([
- 'code' => 404,
- 'msg' => '订单不存在',
- 'data' => null
- ]);
- }
- // 3. 查询支付记录(如果有)
- $paymentRecord = Db::name('payment_record')
- ->where('order_no', $orderNo)
- ->field('id, trade_no, status, pay_time as payment_pay_time')
- ->find();
- // 4. 查询订单商品信息
- $orderItem = Db::name('order_item')
- ->where('order_id', $order['id'])
- ->field('item_name, spec_name, quantity, unit_price')
- ->find();
- // 5. 格式化返回数据
- $result = [
- 'order_no' => $order['order_no'],
- 'pay_status' => $order['pay_status'], // 0=待支付, 1=已支付, 2=支付失败
- 'order_status' => $order['order_status'], // 0=待处理, 1=已确认, 2=已发货, 3=已完成, 4=已取消
- 'pay_method' => $order['pay_method'],
- 'pay_amount' => $order['pay_amount'],
- 'pay_time' => $order['pay_time'],
- 'trade_no' => $paymentRecord['trade_no'] ?? '',
- 'product_name' => $orderItem['item_name'] ?? '商品',
- 'product_spec' => $orderItem['spec_name'] ?? '',
- 'quantity' => $orderItem['quantity'] ?? 1,
- 'status_text' => $this->getStatusText($order['pay_status'], $order['order_status'])
- ];
- return json([
- 'code' => 1,
- 'msg' => 'success',
- 'data' => $result
- ]);
- }
- /**
- * 获取状态文本
- */
- private function getStatusText($payStatus, $orderStatus)
- {
- // 支付状态文本
- $payStatusMap = [
- 0 => '待支付',
- 1 => '已支付',
- 2 => '支付失败'
- ];
- // 订单状态文本
- $orderStatusMap = [
- 0 => '待处理',
- 1 => '已确认',
- 2 => '已发货',
- 3 => '已完成',
- 4 => '已取消'
- ];
- $text = $payStatusMap[$payStatus] ?? '未知支付状态';
- // 如果已支付,显示订单状态
- if ($payStatus == 1) {
- $text .= '/' . ($orderStatusMap[$orderStatus] ?? '未知订单状态');
- }
- return $text;
- }
- /**
- * 手动查询微信订单状态(用于调试)
- */
- public function queryWechat()
- {
- if (!$this->auth->isLogin() || !$this->auth->isAdmin()) {
- $this->error('权限不足');
- }
- $orderNo = $this->request->get('order_no', '');
- if (empty($orderNo)) {
- $this->error('订单号不能为空');
- }
- try {
- // 查询支付记录
- $paymentRecord = Db::name('ba_payment_record')
- ->where('order_no', $orderNo)
- ->find();
- if (!$paymentRecord) {
- $this->error('支付记录不存在');
- }
- // 查询支付配置
- $payConfig = Db::name('ba_pay_config')
- ->where('id', $paymentRecord['pay_config_id'])
- ->find();
- if (!$payConfig) {
- $this->error('支付配置不存在');
- }
- // 调用微信查询接口
- $paymentService = \app\common\service\PaymentFactory::create(
- $paymentRecord['pay_method'],
- $payConfig['id']
- );
- $result = $paymentService->queryOrder($orderNo);
- $this->success('查询成功', $result);
- } catch (\Exception $e) {
- $this->error('查询失败: ' . $e->getMessage());
- }
- }
- }
|