You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

React Native集成Stripe支付仅生成Payment Intent但支付未成功的问题求助

React Native集成Stripe支付仅生成Payment Intent但支付未成功的问题求助

嘿,我仔细看了你的代码,发现几个可能导致支付流程卡在生成Payment Intent但无法完成支付的关键点,咱们一步步来调整:

1. Payment Sheet初始化缺少核心参数

你的服务器返回了ephemeralKeycustomer这两个关键值,但在调用initPaymentSheet的时候并没有传入它们。这两个参数是Stripe Payment Sheet完成支付确认、关联客户信息必需的,缺少的话会导致支付流程中断。

修改你的初始化代码:

const initResponse = await initPaymentSheet({
  merchantDisplayName: 'MerchantName',
  paymentIntentClientSecret: response.data.paymentIntent,
  customerId: response.data.customer, // 新增:传入服务器返回的客户ID
  customerEphemeralKeySecret: response.data.ephemeralKey, // 新增:传入临时密钥
});

2. 补充支付成功后的处理逻辑

虽然Stripe Payment Sheet会自动处理Payment Intent的确认,但你可以在presentPaymentSheet成功后添加日志和用户提示,同时也能验证支付是否真的完成:

const paymentResponse = await presentPaymentSheet();
if (paymentResponse.error) {
  Alert.alert(
    `Error code: ${paymentResponse.error.code}`,
    paymentResponse.error.message,
  );
  return;
} else {
  // 支付成功后的逻辑,比如通知服务器、跳转页面
  console.log('支付确认成功!', paymentResponse);
  Alert.alert('支付成功!');
}

3. 检查服务器端的Payment Intent配置

你注释掉了payment_method_types: ['card'],虽然使用automatic_payment_methods是没问题的,但为了测试阶段更稳定,可以明确指定支付方式:

const paymentIntent = await stripe.paymentIntents.create({
  amount: amount,
  currency: currency,
  customer: customer.id,
  payment_method_types: ['card'], // 恢复这行,明确指定卡支付
  automatic_payment_methods: {
    enabled: true,
  },
});

另外确认一下你的Stripe测试密钥是否正确,避免因为密钥错误导致权限问题。

4. 重点关注错误提示

当点击Pay按钮失败时,你弹出的错误码和信息是最关键的排查依据。比如如果提示missing customer ephemeral key,就对应我们第一步要补充的参数;如果是payment_intent_unconfirmed,可能是Payment Sheet初始化参数不全导致无法自动确认。

按照上面的步骤调整后,再用测试卡4242 4242 4242 4242(搭配任意过期日期、CVC)测试,应该就能完成完整的支付流程了。

备注:内容来源于stack exchange,提问作者Piyush Chatterjee

火山引擎 最新活动