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

Stripe 3D Secure测试卡无法触发验证弹窗问题求助

解决传统3D Secure测试卡验证无弹窗问题

针对你用Laravel+Vue实现结账页面时,传统3DS测试卡(如4000000000003063)调用confirmCardSetup无弹窗且报错的问题,可按以下步骤排查修复:

1. 升级Stripe.js版本

旧版本的Stripe.js对3DS1的自动弹窗支持不完善,先确保使用最新版的@stripe/stripe-js:

npm update @stripe/stripe-js

2. 后端调整SetupIntent创建逻辑

在Laravel创建SetupIntent时,明确指定3DS验证要求,强制触发认证流程:

$setupIntent = \Stripe\SetupIntent::create([
    'payment_method_types' => ['card'],
    // 强制要求3DS认证
    'request_three_d_secure' => 'any',
    'payment_method_options' => [
        'card' => [
            'three_d_secure' => [
                'preferred' => 'any',
            ],
        ],
    ],
]);

3. 前端优化confirmCardSetup参数

调整前端调用参数,确保3DS相关配置正确传递:

const result = await this.stripe.confirmCardSetup(
  this.intentToken.client_secret,
  {
    payment_method: {
      card: this.cardElement,
      billing_details: {
        name: this.frontUser.name,
      },
    },
    // 明确要求3DS认证
    request_three_d_secure: 'any',
    // 标记为会话内支付
    off_session: false
  }
);

4. 补充错误处理与控制台排查

  • 调用confirmCardSetup后,额外检查返回结果的setupIntent.status,若为requires_action,手动触发认证流程:
    if (result.setupIntent.status === 'requires_action') {
      const actionResult = await this.stripe.handleCardAction(
        result.setupIntent.client_secret
      );
      // 根据actionResult处理后续逻辑
    }
    
  • 打开浏览器控制台,查看是否有Stripe加载或元素初始化相关的报错,排除JS执行异常导致的弹窗无法触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:55:31