此端点也有 customer 侧的 session-token 调用流程:见 取消订阅(Customer)。
取消行为
| 当前状态 | 操作 | 结果状态 |
|---|---|---|
pending | 立即取消 | canceled |
active | 在周期结束时取消(通过 PSP) | canceling -> 周期结束时变为 canceled |
- pending:直接取消,状态变为
canceled - active:触发 PSP 取消(在计费周期结束时生效)。本地状态变为
canceling,然后在周期结束时通过 Webhook 更新为canceled
请求体
| 字段 | 类型 | 必需 | 说明 |
|---|---|---|---|
orderId | string | 是 | 订阅订单 ID(Short ID 格式 ORD_xxx) |
请求示例
成功响应 (200) — 活跃订阅
成功响应 (200) — 待处理订阅
响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
orderId | string | 订单 ID(Short ID) |
status | string | 新的订单状态(canceling 或 canceled) |
错误响应
重试策略:4xx 一律不要重试 — 修正请求后重发。5xx 指数退避重试(起步 5s,最多 3 次)。
| 状态码 | errors[0].message | 含义 | 推荐处理 |
|---|---|---|---|
| 400 | Missing X-Context-Merchant-Id header | API Key 认证下 merchant 上下文缺失 | 检查认证流水线 |
| 400 | Missing required field: orderId | 请求体未提供 orderId | 修正请求体后重新提交 |
| 400 | Expected format: ORD_xxx, got "..." | orderId Short ID 解码失败 | 修正 orderId 格式后重新提交 |
| 400 | Subscription cannot be canceled, current status: X | 订单状态非 pending 或 active(如已 canceled、canceling、expired) | 该订阅已不可取消 |
| 401 | Authentication failed | API Key 签名无效 | 检查认证请求头 |
| 403 | Order does not belong to user | 归属校验失败 | 验证调用方拥有该订单 |
| 404 | Order not found | 订单不存在 | 验证 order ID |
| 500 | Internal server error | 服务端意外失败 | 指数退避重试(起步 5s,最多 3 次) |
| 502 | Failed to cancel subscription | 本地更新或 PSP 取消失败 | 指数退避重试(起步 5s,最多 3 次) |