orderId 必须属于该 session token 所绑定的 customer。为某 customer mint 的 token 不能取消另一 customer 的订阅。取消行为
取消待生效的换方案新订阅会作废那笔变更:新订阅直接变为
canceled,其 PSP 取消按发起时刻投递,因此原定切换时刻既不激活也不扣款。原订阅不会被放回生效 —— 它保持 canceling 并单向走向 canceled,恢复订阅对它返回 400。买家想继续付费,请重新下单。取消进行中
pending 订单自行进入终态时 —— 例如 PSP 关闭了同一订阅并发创建的两个换方案候选之一 —— 按已取消处理:返回 200 与当前终态(如 closed),仍持有的优惠占用释放一次,不留存取消原因。订单被并发推进但未进终态时返回 409 并给出当前状态,重新读取订单后重试即可。取消
past_due 订阅立即生效而非周期末生效,且不发送「取消中,可用至 X 日」邮件 —— 计费周期已经结束。此类取消不可撤回:恢复订阅对「发起取消时存在未结清扣款」的订阅一律返回 400。请求体
取消原因只在买家侧凭证发起、且取消动作真实成功后留存 —— 一次取消动作一行,因此取消 → 恢复 → 再取消会留下两行。原因写入是旁路:写入失败时取消照常成功、响应体不变;取消失败(400 / 409 / 500 / 502)或取消期间订单已进终态而按已取消收敛时不产生记录。商户通过 GraphQL 读取已留存的原因。
不传
cancelReason 时的行为,取决于本次调用使用的凭证:
两个渠道刻意不共用这个哨兵码:把「从未询问」与「问过但拒答」混进同一个值,会让商户无法解读
not_provided 的占比。若你的集成也向买家展示原因选项、并希望「跳过」被计入分母,请显式提交 cancelReason(值域开放,例如 not_provided)。
请求示例
成功响应 (200)
响应字段
错误响应
重试策略:4xx 一律不要重试 — 修正请求后重发。5xx 指数退避重试(起步 5s,最多 3 次)。