文档目录
用户订单API

简介

本文件面向用户端应用开发者,提供“用户订单”相关API的完整参考。覆盖以下能力:

  • 用户订单列表查询:支持按订单状态、分页等条件筛选(时间范围、商品类型等由模块层扩展)。
  • 用户订单详情:包含订单基本信息、商品明细、物流信息、支付凭证、评价入口等。
  • 用户订单操作:取消订单、结算下单、收银台支付、上传离线付款凭证等。
  • 工作台订单:订单列表、详情、取消、线下支付审核、发货/更新物流。
  • 购物车:数量查询、添加/更新/删除购物车项。
  • 权限控制:所有用户侧接口均基于登录态校验,确保仅能访问自身订单数据;工作台接口需具备工作端权限。
  • 通知机制:通过订单状态日志与回调点(如自动取消、自动售后状态更新、自动评价)驱动消息通知。

注意:本项目中未直接实现“导出Excel”和“收藏订单”两个独立API,但可通过现有订单列表/详情接口组合实现或作为后续扩展点。

项目结构

订单API采用声明式路由+控制器+服务层的分层组织:

  • 路由层:集中定义 /api/?route=order/* 下的所有订单相关接口映射。
  • 控制器层:按职责拆分为用户订单、购物车、结算、收银台、工作台等子控制器。
  • 服务层:前端服务负责组装视图数据与业务规则,核心订单服务处理通用逻辑。
graph TB
A["客户端"] --> B["API 路由<br/>order.php"]
B --> C["UserController<br/>我的订单"]
B --> D["CartController<br/>购物车"]
B --> E["CheckoutController<br/>结算/下单"]
B --> F["CashierController<br/>收银台"]
B --> G["WorkController<br/>工作台"]
C --> H["UserService<br/>用户订单视图"]
D --> I["CartService"]
E --> J["CheckoutService"]
F --> K["CashierService"]
G --> L["WorkOrderService"]

核心组件

  • 用户订单控制器与服务:提供订单列表、详情、取消等操作,并集成自动取消、自动售后状态更新、自动评价等后台任务触发。
  • 购物车控制器与服务:提供购物车数量、增删改查,支持规格参数透传。
  • 结算控制器与服务:提供结算页数据、下单提交、成功页、运费重算、优惠券使用重算。
  • 收银台控制器与服务:提供支付页面、离线支付流程、凭证上传。
  • 工作台控制器与服务:提供工作台订单列表、详情、取消、线下支付审核、发货/物流更新。

架构总览

订单API遵循“路由-控制器-服务”的分层模式,并通过模块开关(order/aftersale/coupon/payment)进行功能裁剪与降级。

sequenceDiagram
participant U as "用户"
participant R as "路由 order.php"
participant UC as "UserController"
participant US as "UserService"
participant M as "模块(order/aftersale/coupon)"
U->>R : GET /api/?route=order/user?page&status
R->>UC : index()
UC->>US : buildOrderListData(userId, page, status)
US->>M : 自动取消/售后状态/评价
US-->>UC : 订单列表+状态标签
UC-->>U : 响应(订单列表/状态列表/默认支付方式)

详细接口说明

一、用户订单列表

  • 接口路径:GET /api/?route=order/user
  • 鉴权:需要登录
  • 请求参数
    • page:页码,默认1
    • status:订单状态筛选,all/0/1/10/-2(非法值回退为all)
  • 返回字段(节选)
    • title:标题
    • order_list:订单列表(含订单号、金额、状态、收货人、支付方式、可售后标记、支付时限、商品明细等)
    • status_list:状态标签列表(含链接)
    • payment:默认支付方式标识
  • 行为说明
    • 若未启用订单模块,返回空列表与默认信息
    • 列表构建时触发自动取消未付款订单、自动更新售后状态、自动更新评价
    • 地址信息从 order_address 批量读取,避免N+1查询

二、用户订单详情

  • 接口路径:GET /api/?route=order/user/{order_sn}
  • 鉴权:需要登录
  • 请求参数
    • order_sn:订单号(数字校验)
  • 返回字段(节选)
    • title:标题
    • order:订单详情(基本信息、收货地址、金额格式化、支付方式名、支付凭证、商品明细、售后入口、支付跳转等)
    • payment:默认支付方式标识
  • 行为说明
    • 仅允许查看当前登录用户的订单
    • 根据订单状态触发自动取消/售后状态更新/评价更新
    • 状态时间线来自 order_status_log,展示每次状态变更的时间、操作人、原因

三、用户订单操作

  • 取消订单
    • 接口路径:POST /api/?route=order/user/cancel
    • 鉴权:需要登录
    • 请求参数:order_sn
    • 行为:仅允许取消状态为“待付款”的订单;取消后释放库存、关联模块状态同步、钱包退款(混合支付场景)
    • 返回:ok=true/false
  • 结算页数据
    • 接口路径:POST /api/?route=order/checkout/index
    • 鉴权:需要登录
    • 请求参数:mode(money/point)
    • 返回:购物车、配送方式、优惠券列表、金额计算占位
  • 提交下单
    • 接口路径:POST /api/?route=order/checkout/checkout_post
    • 鉴权:需要登录
    • 请求参数:contact_id、shipping_id、mode、coupon_id、postcode、update_user_information、user_update_data
    • 返回:cashier_url(支付页)、order_sn、mode
  • 下单成功页
    • 接口路径:POST /api/?route=order/checkout/success
    • 鉴权:需要登录
    • 请求参数:order_sn
    • 返回:订单基础信息与金额格式化
  • 切换配送方式重算
    • 接口路径:POST /api/?route=order/checkout/change_shipping
    • 鉴权:需要登录
    • 请求参数:shipping_id、coupon_amount
    • 返回:运费、优惠券金额、订单总额格式化
  • 使用优惠券重算
    • 接口路径:POST /api/?route=order/checkout/use_coupon
    • 鉴权:需要登录
    • 请求参数:coupon_id、shipping_fee
    • 返回:运费、优惠券金额、订单总额格式化

四、收银台与支付

  • 收银台
    • 接口路径:GET /api/?route=order/cashier
    • 鉴权:需要登录
    • 请求参数:order_sn
    • 返回:订单信息与默认支付方式
  • 离线支付页
    • 接口路径:GET /api/?route=order/cashier/pay
    • 鉴权:需要登录
    • 请求参数:order_sn
    • 行为:幂等创建 pending offlinepay 支付记录,返回 payment_sn
    • 返回:订单信息与 payment_sn
  • 上传付款凭证
    • 接口路径:POST /api/?route=order/cashier/pay_evidence
    • 鉴权:需要登录
    • 请求参数:order_sn、payment_sn、文件 pay_evidence
    • 行为:存储图片并关联到对应支付记录
    • 返回:成功空对象

五、工作台订单(运营/核销端)

  • 工作台订单列表
    • 接口路径:GET /api/?route=order/work
    • 鉴权:需要登录且具备工作端权限
    • 请求参数:status、page
    • 返回:订单列表、状态标签、默认支付方式
  • 工作台订单详情
    • 接口路径:GET /api/?route=order/work/{order_sn}
    • 鉴权:需要登录且具备工作端权限
    • 请求参数:order_sn
    • 返回:订单详情、支付方式名、配送方式、是否需要线下支付审核
  • 取消订单
    • 接口路径:POST /api/?route=order/work/order_cancel
    • 鉴权:需要登录且具备工作端权限
    • 请求参数:order_sn
    • 行为:仅允许取消“待付款”订单,释放库存并同步关联模块状态
  • 线下支付审核通过
    • 接口路径:POST /api/?route=order/work/pay_check
    • 鉴权:需要登录且具备工作端权限
    • 请求参数:order_id
    • 行为:将订单状态变更为已支付
  • 发货/更新物流
    • 接口路径:POST /api/?route=order/work/tracking
    • 鉴权:需要登录且具备工作端权限
    • 请求参数:order_id、shipping_id、tracking_no
    • 行为:首次发货完成则置为已完成并开启售后;更新物流则记录物流公司单号与发货时间

六、购物车

  • 购物车数量
    • 接口路径:GET /api/?route=order/cart/cart_number
    • 鉴权:未登录静默返回0,已登录返回总数
    • 返回:cart_number
  • 添加购物车
    • 接口路径:POST /api/?route=order/cart
    • 鉴权:需要登录
    • 请求参数:module、item_id、itemnumber、mode、action、att* 规格参数
    • 行为:调用 CartService.addToCart,失败返回业务错误
  • 更新购物车数量
    • 接口路径:PUT /api/?route=order/cart/{id}
    • 鉴权:需要登录
    • 请求参数:action(plus/minus/input)、item_number(当action=input)
    • 行为:计算目标数量并更新
  • 删除购物车项
    • 接口路径:DELETE /api/?route=order/cart/{id}
    • 鉴权:需要登录
    • 行为:删除指定购物车项

七、权限控制

  • 用户侧接口:通过 mustLoginUserId 或 auth('api')->id() 校验登录态,未登录返回401
  • 工作台接口:mustLoginAndPermission 同时校验登录与工作端权限,无权限返回403
  • 数据隔离:用户订单列表/详情严格以 user_id 过滤,确保只能访问自己的订单

八、消息通知机制

  • 自动取消:在订单列表/详情构建时,对“待付款”订单执行自动取消
  • 自动售后状态更新:在订单列表/详情构建时,根据规则更新售后状态
  • 自动评价:在订单列表/详情构建时,触发评价更新
  • 状态日志:订单状态变更记录于 order_status_log,可用于通知与审计

九、关于“收藏订单”与“导出Excel”

  • 收藏订单:当前代码库未发现独立的“收藏订单”API;可在订单详情基础上扩展收藏表与接口,用于快速复购与分享。
  • 导出Excel:当前代码库未发现订单导出API;可复用订单列表接口并结合服务端导出工具生成Excel下载。

依赖关系分析

  • 路由到控制器:order.php 将 /api/?route=order/* 映射至各子控制器
  • 控制器到服务:各控制器依赖相应 Service 完成业务逻辑
  • 服务到模块:UserService/WorkOrderService 通过 Module::make('order'/'aftersale'/'coupon') 获取扩展能力
  • 服务到数据库:通过 ORM/DB 访问 order、order_item、order_address、order_status_log、order_cart 等表
graph LR
R["路由 order.php"] --> C1["UserController"]
R --> C2["CartController"]
R --> C3["CheckoutController"]
R --> C4["CashierController"]
R --> C5["WorkController"]
C1 --> S1["UserService"]
C2 --> S2["CartService"]
C3 --> S3["CheckoutService"]
C4 --> S4["CashierService"]
C5 --> S5["WorkOrderService"]
S1 --> M["模块(order/aftersale/coupon)"]
S5 --> M

性能与扩展性

  • 批量加载收货地址:通过收集 order_id 列表一次性查询 order_address,减少N+1查询
  • 分页与筛选:列表接口使用 paginate,支持状态筛选与翻页参数保留
  • 模块开关:未启用 order/aftersale/coupon 时优雅降级,避免无效查询
  • 缓存建议:可考虑对常用配置(支付方式、配送方式)做短期缓存
  • 扩展点:
    • 时间范围筛选:可在 UserService.buildOrderListData 中增加 created_at 范围过滤
    • 商品类型筛选:可在 Order::filterByStatus 基础上叠加 module/item 维度过滤
    • 统计接口:可新增统计接口聚合消费金额、订单数、平均客单价等指标

故障排查指南

  • 401 未登录:检查是否携带有效会话/令牌;确认 mustLoginUserId 或 auth('api')->id() 返回值
  • 403 无权限:工作台接口需具备工作端权限;检查 workService.checkPermission
  • 404 订单不存在:确认 order_sn 正确且属于当前用户;检查订单是否存在
  • 422 业务规则违反:常见于购物车更新、下单提交、取消订单等;检查输入参数与订单状态
  • 400 参数错误:检查必填参数与格式(如 postcode、shipping_id、order_id)
  • 常见问题定位
    • 订单列表为空:确认模块是否启用;检查自动取消是否影响订单状态
    • 支付凭证未生效:确认 payment_sn 是否正确回传;检查附件存储与关联

结论

该订单API体系以清晰的层次划分与模块化解耦,提供了完整的用户订单生命周期管理能力。通过严格的权限控制与数据隔离,确保用户仅能访问自身订单;通过自动任务与状态日志,支撑消息通知与审计需求。对于“收藏订单”与“导出Excel”,可作为后续扩展点按需实现。

附录

  • 关键状态枚举:PENDING、PAID、COMPLETED、CANCELLED(用于状态筛选与流转)
  • 关键表:order、order_item、order_address、order_status_log、order_cart、order_coupon
  • 关键服务:UserService、WorkOrderService、CartService、CheckoutService、CashierService
添加日期:2026-10-05