Skip to main content
当付款失败时,Dodo Payments 会通过标准化的 error_code 和人类可读的 error_message 告诉您失败原因。此指南展示如何读取这些字段、决定是否值得重试,并在不向客户暴露敏感信息的情况下恢复付款。

Dodo Payments 如何报告失败

每个失败的支付——无论是一次性结账还是订阅续订——都会在支付对象上携带相同的失败字段:
error_codeerror_message 在付款实际失败之前是 null。始终先检查 status,然后读取错误字段。
来自 merchant API 的 error_message面向商户的文案。它可能会指出拒付的真实原因,包括与欺诈相关的原因,因此绝不要直接向客户展示。请改为将 error_code 映射为你自己的、对客户安全的文案,如 Surface Errors to Customers Safely 中所示。

payment.failed Webhook

检测失败最可靠的方式是 payment.failed webhook。该事件会将完整的支付对象封装在 data 中:
payment.failed payload
一个最小化的处理程序会读取 error_code 并据此进行路由:
处理前务必验证 webhook 签名。有关完整设置(包括签名验证和幂等性),请参阅 Webhooks guide

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

error_code 会告诉你是否值得使用相同的支付方式重试。 Transaction Failures 参考列出了每个 error_code 的拒付类型和建议操作。

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

恢复方式取决于客户是否在场。
客户正在主动结账。显示清晰的消息,让客户立即重试或使用其他卡。
  • requires_payment_method — 客户从未提供支付方式:他们没有输入卡片详细信息,或系统提示他们提供支付方式后却没有采取任何操作。这通常是结账中途放弃,而不是拒付 — 重新吸引客户完成支付(请参阅 Abandoned Cart Recovery)。
  • requires_customer_action — 需要额外身份验证(例如 3DS);请客户完成验证。请参阅 3D Secure handling

重试失败的支付

  • **订阅:**启用 Subscription Payment Retries,无需进行集成开发即可恢复软拒付。你也可以让客户通过 Update Payment Method API 更新支付方式来触发恢复,该操作会收取所有未付费用。
  • **一次性支付:**重新发送结账页面或 payment_link,让客户可以使用其他方式再次尝试。一次性支付不会自动重试。
不要使用同一张卡重试硬拒付。卡组织可能会将反复拒付标记为滥用行为,从而降低你的授权率。

安全地向客户展示错误

向客户显示友好的消息 — 绝不要显示原始的 error_code,也绝不要显示面向商户的 error_message
在由 Dodo Payments 控制的界面中 — 结账页面、Customer Portal 和催款电子邮件 — 该映射已为你完成,其中包括针对欺诈相关拒付回退到通用消息的处理。只有当你在自己的产品中展示失败信息时,才需要使用下面的映射。
Customer-facing messaging
**绝不要泄露 STOLEN_CARDLOST_CARDPICKUP_CARDFRAUDULENT 的真实原因。**展示这些原因可能会向欺诈者提供线索。请显示通用的拒付消息,并且仅在内部记录具体的 error_code

相关内容

Transaction Failures

每个拒付代码、其类型及建议操作。

Error Codes

并非卡片拒付的 API 和业务逻辑错误。

Subscription Payment Retries

自动恢复订阅续费时的软拒付。

Subscription Dunning

用于恢复硬拒付的电子邮件序列。

Payment Webhooks

支付事件的完整 payload schema。

Testing Failures

用于模拟拒付和续费失败的测试卡。
最后修改于 2026年8月8日