手动重试会在您发起请求后立即重新尝试失败的订阅续费支付,您可以从支付详情页或通过 API 发起。它会向订阅中保存的支付方式收费,并独立于自动 支付重试 计划运行。
什么是手动重试?
当续费支付失败时,订阅会进入on_hold 状态,支付重试 会按照退避计划重新尝试扣款。有时您知道现在扣款会成功:客户确认已经为账户充值,或者您的支持团队正在与客户通话。手动重试允许您立即发起一次尝试,而不是等待数小时或数天后的下一次计划重试。
- 仅限续费支付:手动重试适用于订阅处于
on_hold状态时的订阅续费发票。首次支付、一次性支付、方案变更费用和按需费用均不符合条件。 - 无需客户操作:扣款会使用订阅中已保存的支付方式。
- 独立于自动重试:手动重试不会消耗自动计划中的一次尝试,不会改变下一次计划重试时间,即使已关闭支付重试也可以使用。
- 重试发票,而不是支付:失败支付只是入口。Dodo Payments 会查找其对应的未结续费发票并收取该笔欠款,因此从发票上的哪笔失败支付发起重试并不重要。
从控制面板重试
1
Open the failed payment
前往 交易 → 支付,点击失败的续费支付以打开其交易详情页面。
2
Click Retry Payment Manually
点击右上角的手动重试支付。仅当支付符合条件时,该按钮才可用。
3
Check the result
系统会为此次尝试创建一笔新支付,并将其显示在活动日志中。如果扣款成功,订阅会恢复为
active,下一次账单日期也会正常顺延。如果支付处理方尚未结算该笔扣款,支付会显示为进行中,直到 payment.succeeded 或 payment.failed webhook 报告结果。
Retry Payment Manually on the transaction details page of a failed renewal
符合条件
只有通过以下所有检查时,系统才会发送手动重试。原因代码列显示 API 返回的内容:在GET /payments/{payment_id}/retry 上为 reason,在 POST /payments/{payment_id}/retry 上为错误 code。
手动重试在一个方面比自动重试更严格:它要求订阅处于
on_hold 状态。对于其他非 active 状态,自动重试仍会继续运行;请参阅订阅状态转换。重试限制
每张续费发票允许进行3次手动重试,重试之间有冷却时间:
这些限制同时适用于测试模式和实时模式。因该原因拒绝重试时,API 返回
MANUAL_RETRY_LIMIT_REACHED(HTTP 429)。错误正文仅包含 code 和 message。要了解下一次重试何时可用,请检查重试状态,并读取 retry_available_at。三次重试全部用完后,该字段为 null。
自动重试不会计入此限制,手动重试也不会计入自动计划的 8 次尝试。
手动重试与自动重试
通过 API 重试
先检查是否符合条件,然后发送重试请求。两个 endpoint 都需要传入失败支付的 ID。检查支付是否可以重试
GET /payments/{payment_id}/retry 对不符合条件的支付不会失败。相反,它会返回 can_retry: false,并提供 reason 代码,以便您的控制面板或支持工具显示与 Dodo Payments 控制面板相同的状态。此操作需要 Viewer 角色。
Response
发送手动重试
POST /payments/{payment_id}/retry 会创建一笔新支付并使用已保存的支付方式扣款。此操作需要 Editor 角色。
Response
错误响应
每个代码均在 错误代码参考中进行了说明。
Webhook
手动重试会创建普通支付,因此会触发与任何续费尝试相同的 webhook:
在这些事件的支付对象中,
retry_attempt 为 1 或更高,并且已设置 subscription_id,与自动重试完全相同。如果需要区分手动尝试和计划尝试,请保留重试响应中的 payment_id。
Payment Webhook Payloads
支付事件的完整 payload schema。
相关内容
Subscription Payment Retries
与手动重试并行运行的自动退避计划。
Subscription Dunning
硬拒付后发送邮件,请客户更新其支付方式。
Handle Payment Failures
读取拒付代码,并判断何时值得重试。
Error Codes
每个
MANUAL_RETRY_* 代码、其触发条件及消息。