为什么有些付款即使已请求 3DS 验证,也能在未验证的情况下成功完成?

如果付款需要进行 3DS 验证,但我们无法发起该验证,我们会进行最后尝试,在不验证的情况下完成付款。这种回退收款会导致将 PaymentIntent 状态更新为以下各项中的一项:

通常,触发 3DS 验证的付款会导致 PaymentIntent 的状态为 requires_action以下是对请求 3DS 验证的典型支付流程的说明:

  1. 您的客户提供他们的付款信息并将其附加到 PaymentIntent。
  2. Stripe 检查是否需要进行 3DS 验证。这可以根据 Radar 规则、是否手动请求付款以及其他因素来确定
  3. Stripe 确定是否需要进行 3DS 验证
    1. 如果确定不需要,我们会继续尝试对银行卡扣款。此时,银行可以发回“软拒付”,表示需要进行验证才能确保成功扣款
    2. 如果确定需要,我们会继续下一步以触发 3DS 验证
  4. Stripe 发起 3DS 验证
  5. 过去 Stripe 能够请求进行 3DS 验证,现在我们需要等待客户进行验证。Payment Intent 的状态转换为 requires_action

如果第 4 步或第 5 步不成功,则上述支付流程将更改为如下所示:

  1. 您的客户提供他们的付款信息并将其附加到 PaymentIntent。
  2. Stripe 检查是否需要进行 3DS 验证(根据 Radar 规则、是否手动请求付款以及其他因素来确定)。
  3. Stripe 确定需要进行 3DS 验证并尝试发起验证流程。
  4. 我们在发起 3DS 验证流程时遇到问题。发生这种情况的原因有很多,例如银行卡不支持 3DS 验证、处理错误、发卡行的 3DS 验证服务器停机等。
  5. 即使 3DS 验证没有成功完成,我们也会继续在不验证的情况下进行最后的付款尝试。这会导致 PaymentIntent 的状态转换为 succeededrequires_capturerequires_payment_method具体取决于付款结果。

我们尝试这样做而不是立即阻止付款或返回错误的原因是,我们希望优化转化率

如果此回退收款失败,PaymentIntent 的状态会更新为 requires_payment_method。如果此回退收款成功,则收款不在责任转移范围内,除非回退收款在 payment_method_details.card.three_d_secure.result 下的状态 attempt_acknowledged

有关未进行验证的付款和责任转移的更多信息,请参阅使用 Radar 风控团队版来防止在没有责任转移的情况下收款