You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Stripe生产环境3D Secure支付无法触发验证弹窗问题

解决Stripe生产环境不触发3D Secure验证的问题

核心问题分析

测试环境能正常触发3DS验证,但生产环境直接完成支付,且目标银行卡在其他平台可触发验证,大概率是PaymentIntent的创建参数未强制要求3DS验证,或是Stripe的自动确认逻辑未触发SCA(强客户认证)检查。

具体修改方案

1. 服务端:强制开启3D Secure验证

修改PaymentIntent创建代码,添加payment_method_options参数明确要求3DS验证,同时补全自动确认的必要参数:

$intent = \Stripe\PaymentIntent::create([
    'amount'   =>  $amount * 100,
    'currency' => $results->currency,
    'payment_method' => $paymentMethodId,
    'confirmation_method' => 'automatic',
    'confirm' => true, // 配合automatic确认方式,显式触发自动确认
    'description' => "Booking",
    'customer' => $user_stripe_customer,
    'receipt_email' => $user->email,
    'payment_method_options' => [
        'card' => [
            'request_three_d_secure' => 'required' // 强制触发3DS验证,忽略风险评估
        ]
    ]
]);
  • request_three_d_secure: 'required'会强制Stripe触发3DS验证,确保符合SCA合规要求,避免因风险评估跳过验证。
  • confirm: true是automatic确认方式的必要参数,缺失会导致PaymentIntent无法自动确认,影响后续流程。

2. 客户端:修复作用域变量错误

在handleConfirmError函数中,result.paymentMethod.id属于外部作用域变量,会导致未定义错误,替换为PaymentIntent关联的支付方式ID:

// Re-confirm the PaymentIntent after 3D Secure
stripe.confirmCardPayment(confirmResult.error.payment_intent.client_secret, {
    payment_method: confirmResult.error.payment_intent.payment_method, // 使用PaymentIntent绑定的支付方式ID
}).then(function(result) {
    // ... 原有成功/错误处理逻辑
});

该问题虽不直接导致3DS不触发,但会引发验证后的二次确认失败,需同步修复。

3. 生产环境配置检查

  • 确认生产环境使用正式Stripe密钥,而非测试密钥。
  • 登录Stripe后台,检查SCA相关设置,确保未关闭3DS验证要求。

验证逻辑说明

设置request_three_d_secure: 'required'后,Stripe会在生产环境强制触发3DS验证流程,客户端会收到requires_action状态的PaymentIntent,自动进入handleConfirmError中的3DS处理逻辑,弹出用户确认窗口。

内容的提问来源于stack exchange,提问作者Mustafa Ahmad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 02:36:01