post(); $userId = $request->user->id; try { $order = OrderFlowService::createOrder($params, $userId); return jsonResponse([ 'order_id' => $order->id, 'order_no' => $order->order_no, 'pay_amount' => $order->total_price ], '下单成功'); } catch (\Exception $e) { return jsonResponse(null, '下单失败: ' . $e->getMessage(), 400); } } public function list(Request $request) { $status = $request->get('status', 'all'); $userId = $request->user->id; $query = Order::where('user_id', $userId); if ($status !== 'all') { $query->where('status', $status); } $orders = $query->orderBy('id', 'desc')->get(); return jsonResponse(['items' => $orders, 'total' => $orders->count()]); } public function detail(Request $request, $id) { $userId = $request->user->id; $order = Order::with(['logs'])->where('id', $id)->where('user_id', $userId)->first(); if (!$order) { return jsonResponse(null, '订单不存在', 404); } $timeline = []; $isFirst = true; foreach ($order->logs as $log) { $timeline[] = [ 'title' => $log->title, 'time' => $log->created_at->format('Y-m-d H:i:s'), 'desc' => $log->description, 'is_current' => $isFirst, 'is_done' => true ]; $isFirst = false; } return jsonResponse([ 'id' => $order->id, 'order_no' => $order->order_no, 'category' => $order->category, 'service_type' => $order->service_type, 'status' => $order->status, 'is_fast' => (bool)$order->is_fast, 'express_company' => $order->express_company, 'express_no' => $order->express_no, 'express_modify_count' => (int)$order->express_modify_count, 'timeline' => $timeline ]); } public function pay(Request $request) { $orderId = (int)$request->post('order_id'); $userId = $request->user->id; $payType = trim((string)$request->post('pay_type', 'jsapi')); $appId = trim((string)$request->post('app_id', '')); $order = Order::where('id', $orderId)->where('user_id', $userId)->first(); if (!$order) { return jsonResponse(null, '订单不存在', 404); } try { if ($payType === 'native') { $pay = PaymentService::createWechatNativePay($order); return jsonResponse($pay, '支付发起成功'); } if ($appId === '') { return jsonResponse(null, '缺少 app_id,无法发起 JSAPI 支付', 400); } $openid = trim((string)$request->post('openid', '')); $pay = PaymentService::createWechatJsapiPay($order, $appId, $openid); return jsonResponse($pay, '支付发起成功'); } catch (\Throwable $e) { return jsonResponse(null, $e->getMessage(), 400); } } public function ship(Request $request) { $orderId = (int)$request->post('order_id'); $expressCompany = trim($request->post('express_company', '')); $expressNo = trim($request->post('express_no', '')); if (!$expressCompany || !$expressNo) { return jsonResponse(null, '物流信息不完整', 400); } $userId = $request->user->id; $order = Order::where('id', $orderId)->where('user_id', $userId)->first(); if (!$order) { return jsonResponse(null, '订单不存在', 404); } try { $isModify = ($order->status === 'wait_receive'); OrderFlowService::userShip($order, $expressCompany, $expressNo); return jsonResponse(null, $isModify ? '物流信息修改成功' : '发货信息已提交'); } catch (\Exception $e) { return jsonResponse(null, $e->getMessage(), 400); } } }