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

React Native与Stripe版本不兼容调用presentPaymentSheet报错求助

React Native 0.71.1 + Stripe React Native 0.26.0 调用presentPaymentSheet出现Native与JS代码不同步错误

问题详情

使用 @stripe/stripe-react-native ^0.26.0 和 React Native 0.71.1 开发支付功能时,调用 presentPaymentSheet 方法触发「Native代码与Javascript代码不同步」错误,核心支付代码如下:

export async function paymentProcess(info: PaymentInfoType) {
    const initResult = await initPaymentSheet({
        customerId: info.customerId,
        paymentIntentClientSecret: info.paymentIntentClientSecret,
        customerEphemeralKeySecret: info.ephemeralKeySecret,
        ...initPaymentSheetParams,
    });

    if (initResult.error) {
        throw new Error('Failed on init.');
    }

    const result = await presentPaymentSheet({ timeout: 2000 });
}

可行解决思路

  • 强制同步Native与JS依赖
    删除项目根目录下的 node_modules、iOS端的 Pods 文件夹、Android端的 build 文件夹,然后重新执行 npm install + npx pod-install(iOS),确保Stripe的Native库和JS版本完全匹配。RN 0.71.x的依赖缓存容易出问题,彻底清理后重新安装大概率能解决版本不一致导致的同步错误。

  • 延迟调用presentPaymentSheet
    Native端PaymentSheet的初始化可能比JS端的initPaymentSheet返回稍慢,不要紧接着调用presentPaymentSheet,加个短延迟:

    // initPaymentSheet成功后
    setTimeout(async () => {
      const result = await presentPaymentSheet({ timeout: 2000 });
      // 处理支付结果逻辑
    }, 100);
    
  • 调整或移除timeout参数
    尝试去掉presentPaymentSheet里的timeout: 2000,或者把超时时间拉长到5000ms。2000ms的超时可能在Native端还没完成准备工作时就触发了同步校验失败。

  • 简化initPaymentSheet参数
    先注释掉...initPaymentSheetParams,只传入必填的三个密钥参数测试。如果错误消失,再逐个排查initPaymentSheetParams里的参数,可能是某个平台不兼容的参数导致Native初始化异常。

  • 调整Stripe版本
    若以上方法都没用,可以尝试把@stripe/stripe-react-native升级到0.27.x或回退到0.25.x版本。RN 0.71.1和0.26.0之间可能存在未适配的兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:00:05