模块说明
order 覆盖完整交易闭环:购物车(增删改查)→ 结算(配送/优惠券/金额重算)→ 下单(生成订单)→ 收银台(在线支付入口 / 离线付款与凭证上传)→ 我的订单(列表/详情/取消);工作端另提供订单核销、线下支付审核与发货。
鉴权级别:购物车数量可选(未登录静默返回 0);其余会员侧全部必须登录;工作端必须员工身份。
重要:结算/收银台依赖 Cookie 会话(配送费、优惠券金额暂存于 Session)。浏览器端调用需开启
withCredentials,服务端 CORS 需对应开启credentials。
接口一览
购物车
| 方法 | URL | 鉴权 | 说明 |
|---|---|---|---|
| GET | /api/order |
必须 | 查看购物车(页面数据) |
| GET | /api/order/cart/cart_number |
可选 | 购物车商品总数量 |
| POST | /api/order/cart |
必须 | 添加购物车 |
| PUT | /api/order/cart/{id} |
必须 | 更新数量(加减/输入) |
| DELETE | /api/order/cart/{id} |
必须 | 删除购物车项 |
结算与下单
| 方法 | URL | 鉴权 | 说明 |
|---|---|---|---|
| POST | /api/order/checkout |
必须 | 结算页数据 |
| POST | /api/order/checkout/change_shipping |
必须 | 切换配送方式重算金额 |
| POST | /api/order/checkout/use_coupon |
必须 | 使用优惠券重算金额 |
| POST | /api/order/checkout/checkout_post |
必须 | 提交订单 |
| POST | /api/order/checkout/success |
必须 | 下单成功页数据 |
收银台
| 方法 | URL | 鉴权 | 说明 |
|---|---|---|---|
| POST | /api/order/cashier |
必须 | 收银台数据(支付方式入口) |
| GET | /api/order/cashier/pay |
必须 | 离线付款页(下发 payment_sn) |
| POST | /api/order/cashier/pay_evidence |
必须 | 上传付款凭证(multipart) |
我的订单
| 方法 | URL | 鉴权 | 说明 |
|---|---|---|---|
| GET | /api/order/user |
必须 | 我的订单列表(按状态筛选) |
| GET | /api/order/user/{order_sn} |
必须 | 订单详情 |
| POST | /api/order/user/cancel |
必须 | 取消订单 |
工作端(work_required)
| 方法 | URL | 鉴权 | 说明 |
|---|---|---|---|
| GET | /api/order/work |
员工 | 工作台订单列表 |
| GET | /api/order/work/{order_sn} |
员工 | 工作台订单详情 |
| POST | /api/order/work/order_cancel |
员工 | 取消订单 |
| POST | /api/order/work/pay_check |
员工 | 线下支付审核通过 |
| POST | /api/order/work/tracking |
员工 | 发货 / 更新物流 |
购物车
查看购物车 GET /api/order
{
"code": "OK",
"message": "",
"data": {
"title": "购物车",
"cart": { "...": "购物车数据(含商品项与金额)" }
},
"errors": {},
"request_id": "9f2a5c8e1b3d7f40"
}
购物车数量 GET /api/order/cart/cart_number
未登录也返回 200(cart_number: 0),适用于徽标展示:
{
"code": "OK",
"message": "",
"data": { "cart_number": 3 },
"errors": {},
"request_id": "9f2a5c8e1b3d7f40"
}
添加购物车 POST /api/order/cart
| 参数 | 必填 | 说明 |
|---|---|---|
item_id |
是 | 商品(内容)ID |
item_number |
否 | 数量,默认 1 |
module |
否 | 模块名,默认 product |
mode |
否 | 购买模式:money(默认)/ point |
action |
否 | 行为,默认 addtocart |
att_* |
否 | 规格参数(如 att_1=红色),键前缀 att_ |
兼容小程序历史形态:可将以上字段打包为 JSON 字符串放在
post参数中提交。
{
"code": "OK",
"message": "",
"data": { "mode": "money" },
"errors": {},
"request_id": "9f2a5c8e1b3d7f40"
}
| 场景 | 响应 |
|---|---|
| 加购失败(库存/属性校验等) | 422 BUSINESS_RULE_VIOLATION(message 为具体原因) |
更新数量 PUT /api/order/cart/{id}
| 参数 | 必填 | 说明 |
|---|---|---|
action |
否 | plus(加 1)/ 其它(减 1)/ input(按 item_number 设置);默认减 1 |
item_number |
否 | action=input 时生效,非法值回退 1 |
响应 data 为金额重算结果(服务返回为准);数量自动保底为 1。
删除购物车项 DELETE /api/order/cart/{id}
成功返回空 data。
浏览器可 POST +
?_method=DELETE伪装。
结算与下单
结算页 POST /api/order/checkout
| 参数 | 必填 | 说明 |
|---|---|---|
mode |
否 | 购买模式,默认 money |
{
"code": "OK",
"message": "",
"data": {
"title": "结算",
"cart": { "...": "购物车数据" },
"shipping_list": [ { "slug": "express", "name": "快递" } ],
"shipping_id": "express",
"coupon_list": [ { "...": "可用优惠券(优惠券模块启用时)" } ],
"coupon_id": 0,
"order": { "...": "订单预览数据(order_data)" },
"amount": {
"shipping_fee": 10,
"shipping_fee_format": "¥10.00",
"coupon_amount": 0,
"coupon_amount_format": "¥0.00",
"order_amount_format": "¥88.00"
}
},
"errors": {},
"request_id": "9f2a5c8e1b3d7f40"
}
| 场景 | 响应 |
|---|---|
| 购物车为空 | 422 BUSINESS_RULE_VIOLATION(order_cart_empty) |
切换配送方式 POST /api/order/checkout/change_shipping
| 参数 | 必填 | 说明 |
|---|---|---|
shipping_id |
是 | 配送方式 slug(仅允许字母数字下划线中划线) |
coupon_amount |
否 | 已用优惠券金额(参与重算) |
返回 data.amount(结构同上)。
使用优惠券 POST /api/order/checkout/use_coupon
| 参数 | 必填 | 说明 |
|---|---|---|
coupon_id |
是 | 优惠券 ID(0 表示不使用) |
shipping_fee |
否 | 当前配送费(参与重算) |
返回 data.amount(同上)。
提交订单 POST /api/order/checkout/checkout_post
| 参数 | 必填 | 说明 |
|---|---|---|
contact_id |
否 | 收货联系人(会员联系方式)ID |
shipping_id |
否 | 配送方式 slug |
mode |
否 | 购买模式,默认 money |
coupon_id |
否 | 优惠券 ID |
postcode |
否 | 邮编 |
update_user_information |
否 | 为真时更新会员资料,同时读取 phone / contact / address / postcode |
{
"code": "OK",
"message": "",
"data": {
"cashier_url": "pages/order/cashier?order_sn=202601018888",
"order_sn": "202601018888",
"mode": "money"
},
"errors": {},
"request_id": "9f2a5c8e1b3d7f40"
}
cashier_url为小程序形态 URL(mode=money时返回;积分模式为空串),通用客户端请自行拼接收银台调用;- 下单失败(库存、优惠券失效等)→
422 BUSINESS_RULE_VIOLATION。
成功页 POST /api/order/checkout/success
参数 order_sn;返回 title + order(含 order_amount_format);订单不存在/非本人时 order 为空对象。
收银台
收银台数据 POST /api/order/cashier
参数 order_sn;返回 title + order + payment(默认支付方式 slug);订单不属于当前会员时 order 为空对象。
离线付款 GET /api/order/cashier/pay
参数 order_sn(查询串)。本动作会幂等创建一行 pending 的 offlinepay 支付记录,并把 payment_sn 随订单数据下发;上传凭证时回传该 payment_sn。
{
"code": "OK",
"message": "",
"data": {
"title": "离线付款",
"order": { "order_sn": "202601018888", "payment_sn": "P202601010001", "...": "" }
},
"errors": {},
"request_id": "9f2a5c8e1b3d7f40"
}
上传付款凭证 POST /api/order/cashier/pay_evidence(multipart)
| 参数 | 必填 | 说明 |
|---|---|---|
order_sn |
是 | 订单号(表单字段) |
payment_sn |
否 | 支付单号;不传时自动查找当前 pending 的 offlinepay 记录 |
pay_evidence |
是 | 凭证图片文件(multipart) |
| 场景 | 响应 |
|---|---|
| 订单不存在 | 404 NOT_FOUND |
| 未携带文件 | 400 INVALID_PARAMS |
| 无可用支付单 | 422 BUSINESS_RULE_VIOLATION |
| 成功 | 200 OK,空 data |
我的订单
列表 GET /api/order/user
| 参数 | 必填 | 说明 |
|---|---|---|
status |
否 | 订单状态筛选,默认 all;非法值回退 all |
page |
否 | 页码,默认 1 |
{
"code": "OK",
"message": "",
"data": {
"title": "我的订单",
"order_list": [ { "order_sn": "202601018888", "status": "...", "...": "" } ],
"status_list": [ { "slug": "all", "name": "全部" } ],
"payment": "offlinepay"
},
"errors": {},
"request_id": "9f2a5c8e1b3d7f40"
}
订单模块被禁用时返回空列表(
order_list: []、status_list: []),不会报错。
详情 GET /api/order/user/{order_sn}
返回 title + order(含订单项等)+ payment;订单不存在或非本人时 order 为空对象。
取消订单 POST /api/order/user/cancel
参数 order_sn;成功 data.ok=true;不可取消(状态不符等)→ 422 BUSINESS_RULE_VIOLATION(order_cancel_wrong)。
工作端接口
工作端全部要求员工对 order 的权限(未登录 401 / 非员工 403 work_no_permission)。
- 列表
GET /api/order/work:参数status(默认all)、page;返回订单列表与状态标签(含title); - 详情
GET /api/order/work/{order_sn}:返回order_sn、order、payment、shipping_list、need_pay_check(离线支付且待确认时为true,用于显示"确认收款"按钮);订单不存在 404; - 取消
POST /api/order/work/order_cancel:参数order_sn;失败 422; - 支付审核
POST /api/order/work/pay_check:参数order_id;缺参 400,失败 422; - 发货/物流
POST /api/order/work/tracking:参数order_id、shipping_id、tracking_no;缺order_id400,失败 422。
注意事项
- Cookie 会话依赖:结算页的配送费(
fee)与优惠券(coupon)暂存于 Session,change_shipping/use_coupon/checkout_post链路必须在同一会话(Cookie)中调用;浏览器端axios需withCredentials: true,服务端 CORS 需credentials=true且不能用*白名单; - 方法伪装:
PUT/DELETE类接口浏览器端可 POST +_method(body)或X-HTTP-Method-Override(header)伪装; - 订单禁用兜底:订单模块未启用时,我的订单系列接口返回空数据(不报错),加购等写操作会失败;
- 支付方式 slug(
payment)来自站点支付插件配置,客户端可据此决定展示"在线支付 / 线下付款"入口; - 工作端
need_pay_check为true时,可用pay_check完成线下收款确认。