Skip to main content
当 payment 失败时,Dodo Payments 会提供标准化的 error_code 和人类可读的 error_message。本指南将介绍如何读取这些字段、判断是否重试,以及如何安全地恢复 payment。

Dodo Payments 如何报告失败

每个失败的 payment object 都包含以下字段:
在 payment 失败之前,error_code 和 error_message 均为 null。请始终先检查 status。
error_message 面向 merchant,可能会暴露与 fraud 相关的原因。切勿将其展示给客户。请改为将 error_code 映射为适合向客户展示的文案(参阅 安全地向客户展示 Errors)。

payment.failed Webhook

payment.failed webhook 是检测 failure 最可靠的方式。该 event 会将完整的 payment object 包装在 data 中:
payment.failed payload
最小化的 handler 会读取 error_code,并据此进行路由:
处理前务必验证 webhook 签名。有关完整设置(包括签名验证和幂等性),请参阅 Webhooks guide。

决定是否重试:软拒付与硬拒付

error_code 会告诉你是否值得使用相同的支付方式重试。 完整的 decline type 列表及建议操作请参阅 Transaction Failures。

处理结账期间与续费期间的失败

恢复方式取决于客户是否在场。
客户正在主动完成 checkout。请展示清晰的消息,并让客户重试或使用其他 card。
  • requires_payment_method — 客户从未提供 payment method。这通常是 checkout 中途放弃,而不是 decline。请重新吸引客户完成 payment(参阅 Abandoned Cart Recovery)。
  • requires_customer_action — 需要额外的 authentication(例如 3DS)。请客户完成 authentication。参阅 3D Secure。

重试失败的支付

Subscriptions: 启用 Subscription Payment Retries,即可自动恢复 Soft decline。若要立即重试而不是等待计划时间,请通过 dashboard 或 API 使用 Manual Payment Retry。您也可以让客户通过 Update Payment Method API 更新其 payment method,从而触发恢复流程;该操作会收取所有未结清的款项。 一次性 payments: 重新发送 checkout 或 payment_link,让客户可以使用其他 payment method 再次尝试。一次性 payments 不支持自动 retry。
不要使用同一张 card 对 Hard decline 进行重试。Card network 会将重复的 decline 标记为滥用行为,从而损害您的 authorization rate。

安全地向客户展示 Errors

向客户展示友好的消息,绝不要展示原始的 error_code 或面向 merchant 的 error_message。
在由 Dodo Payments 控制的界面(checkout、Customer Portal、dunning email)中,系统已经为您完成了此映射,包括对与 fraud 相关的 decline 回退到通用消息。只有在您自己的 product 中渲染 failure 时,才需要使用下面的映射。
Customer-facing messaging
绝不要透露 STOLEN_CARD、LOST_CARD、PICKUP_CARD 或 FRAUDULENT 的真实原因。展示这些原因可能会向 fraud actor 提供线索。请展示通用的 decline 消息,并且仅在内部记录具体的 error_code。

相关内容

Transaction Failures

每个 decline code、其 type 以及建议操作。

Error Codes

不是 card decline 的 API 和 business-logic errors。

Subscription Payment Retries

subscription renewal 中 Soft decline 的自动恢复。

Subscription Dunning

用于恢复 Hard decline 的 email sequence。

Payment Webhooks

payment event 的完整 payload schema。

Testing Failures

用于模拟 decline 和 renewal failure 的 test card。
最后修改于 2026年9月26日