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

Stripe Payment Element无法加载已保存支付详情问题求助

问题:Stripe Payment Element无法加载已保存的卡片详情

已在Stripe端将Visa支付方式设置为allow_redisplay="always",但尝试将已保存的支付详情加载至Payment Element时始终失败。Payment Element可正常渲染,但未填充已保存的卡片信息,相关代码如下:

后端C#代码

// controller action code
SetupIntentService setupIntentService = new();
var setupIntent = await setupIntentService.CreateAsync(new()
{
    Customer = customerId,
    Usage = "off_session",
    PaymentMethodTypes = ["card"],
    PaymentMethod = "pm_paymentMethodId"
});

var service = new EphemeralKeyService();
var ephemeralKey = await service.CreateAsync(new EphemeralKeyCreateOptions
{
    Customer = customerId,
    
});

return Json(new
{
    ApiKey = publishableKey,
    EphemeralKey = ephemeralKey.Secret,
    setupIntent.ClientSecret,
    CustomerId = customerId,
}, JsonRequestBehavior.AllowGet, false, true);

前端JavaScript代码

loadStripe(data.apiKey)
  .then(stripe => {
    if (!stripe) return;
     const elements = stripe.elements({
       clientSecret: data.clientSecret,
       customerOptions: {
         customer: data.customerId,
         ephemeralKey: data.ephemeralKey
       }
     });

     const paymentElement = elements.create('payment', {
       layout: "auto"
     });
     paymentElement?.mount('#payment-element');
});

可能遗漏的配置及修复方案

1. Ephemeral Key未指定API版本

创建临时密钥(Ephemeral Key)时必须指定与当前Stripe SDK匹配的API版本,否则会导致权限不足无法读取客户支付方法信息。修改后端代码:

var ephemeralKey = await service.CreateAsync(new EphemeralKeyCreateOptions
{
    Customer = customerId,
}, new RequestOptions { ApiVersion = "2024-06-20" }); // 替换为你的SDK对应的API版本

2. Payment Element未配置默认支付方式

需要明确告知Payment Element加载客户的已保存支付方式,可通过设置defaultPaymentMethod参数实现:

const paymentElement = elements.create('payment', {
  layout: "auto",
  defaultPaymentMethod: "auto" // 自动加载客户的默认支付方式,或直接指定支付方法ID如"pm_paymentMethodId"
});

3. SetupIntent参数错误

创建SetupIntent时指定了PaymentMethod参数会绑定到特定支付方法,限制了Payment Element加载客户所有已保存支付方式的能力。移除该参数,让SetupIntent关联客户即可:

var setupIntent = await setupIntentService.CreateAsync(new()
{
    Customer = customerId,
    Usage = "off_session",
    PaymentMethodTypes = ["card"],
    // 移除PaymentMethod = "pm_paymentMethodId"
});

4. 验证支付方法状态

确认目标支付方法pm_paymentMethodId已正确关联到该客户,状态为active,且allow_redisplay确实设置为always(可在Stripe后台查看支付方法详情)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:12:44