# 订单支付流程 创建订单成功后,`POST /Order/CreateOrder` 会返回 `pay.autoSubmit = true`。前端应使用 `pay.payUrl` 与 `pay.payData` 自动提交 POST 表单到支付网关,当前页面保留在订单详情页。 订单详情 `GET /Order/Detail` 在待支付状态下返回: - `data.canChangePayType`: 是否允许切换付款方式。 - `data.paymentMethods`: 后台支付配置中启用的支付方式。 用户在订单详情页切换付款方式时调用: ```json { "uuid": "...", "session": "...", "orderId": "...", "pay_type": "wxpay" } ``` 每次支付都会生成独立的易支付 `out_trade_no`,并写入 `order_payment_attempts`。切换支付方式不会尝试修改易支付平台已经创建的旧订单;回调和主动轮询会检查该业务订单下的所有支付尝试,任意一个支付成功都会完成原业务订单。 需要手动执行的表结构: ```sql CREATE TABLE order_payment_attempts ( gateway_order_no VARCHAR(64) NOT NULL, order_id VARCHAR(64) NOT NULL, pay_type VARCHAR(32) NOT NULL, create_time BIGINT NOT NULL, PRIMARY KEY (gateway_order_no), KEY idx_order_payment_attempt_order_id (order_id), KEY idx_order_payment_attempt_order_time (order_id, create_time) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` 订单关闭规则: - 用户主动取消待支付订单时,订单状态改为取消,并返还商品库存、释放优惠券占用、删除支付缓存。 - 轮询超时仍未支付时执行同样的关闭逻辑。 - 支付平台非成功回调不会立即关闭业务订单,避免旧支付尝试失败影响用户切换后的新支付。 - 支付成功会校验实付金额与订单金额,金额不一致不会发货。