React-Native/Expo 42使用@stripe/stripe-react-native对接Stripe报模块找不到错误
问题根因
你混淆了两套完全独立的Stripe SDK,触发了报错同时存在安全风险:
- 已安装的
@stripe/stripe-react-native是面向React Native客户端的前端SDK,仅用于前端收集卡信息、生成支付凭证 - 你代码中
require('stripe')调用的是Stripe官方的Node.js服务端SDK,你并未在项目中安装该包,因此直接抛出模块找不到的错误。严禁将该服务端SDK放入React Native客户端代码中使用,会直接泄露你的Stripe密钥,造成资金被盗刷的严重安全隐患。
修复步骤
- 第一步:删除代码中
const stripe = require('stripe')('testKey')这一行无效代码 - 第二步:安装适配Expo SDK 42的Stripe RN版本,Expo SDK 42无法兼容最新版
@stripe/stripe-react-native,执行安装命令:expo install @stripe/stripe-react-native@0.2.3 - 第三步:使用前端SDK内置方法创建支付方式,你已经引入了
useStripe钩子,直接调用钩子返回的createPaymentMethod方法即可,无需自行实例化Stripe对象,参考代码:
// 仅可在React函数组件内使用 import { CardField, useStripe, StripeProvider } from '@stripe/stripe-react-native' const PaymentComponent = () => { const { createPaymentMethod } = useStripe(); const createPaymentMethodHandler = async () => { // 实际场景不要硬编码卡片信息,通过CardField组件收集用户输入的卡信息 const { paymentMethod, error } = await createPaymentMethod({ type: 'Card', card: { number: '4242424242424242', expMonth: 9, expYear: 2022, cvc: '314' } }); if (error) { // 处理报错逻辑 console.log('创建支付方式失败:', error); return; } // 将paymentMethod.id传给你的自有后端,由后端调用Stripe接口完成后续支付流程 console.log('支付方式创建成功:', paymentMethod.id); } return <CardField /> }
重要提示:所有需要用到Stripe密钥的操作(比如创建支付意图、确认扣款、发起退款等)必须放在你的自有后端完成,前端仅负责生成不涉及敏感信息的支付凭证ID传给后端即可。
内容的提问来源于stack exchange,提问作者MK_Pierce
相关产品推荐
相关产品推荐

