加载中…
订单与交易 order

模块说明

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_id 400,失败 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 完成线下收款确认。
添加日期:2026-10-06