React Native接入tipsi-stripe调用createTokenWithCard时提示需先执行init报错
报错"You should call init first"的核心原因
该报错是tipsi-stripe SDK的内置校验逻辑触发的:SDK在执行任何需要调用原生Stripe能力的方法(比如代码中用到的createTokenWithCard)之前,会先检查自身初始化状态,一旦检测到原生层的Stripe实例未完成初始化,就会直接抛出该固定错误。
常见的触发场景:
- 完全未调用
stripe.init()方法:即使JS层正常导入了stripe模块,只要没执行初始化配置、传入Stripe公钥,原生层的Stripe SDK就不会被实例化,内部初始化状态位始终为未激活,所有业务方法调用都会触发该报错。 - 初始化时序错乱:把
stripe.init()的逻辑放在支付按钮的点击回调中,但因为init是异步操作,代码在init尚未执行完成时就调用了createTokenWithCard,此时状态位还未更新为已初始化,就会抛出错误。 - 初始化参数无效:比如传入的Stripe公钥为空、格式错误,导致原生层初始化流程失败,SDK内部会将状态位回退为未初始化,后续所有方法调用都会抛出该错误。
修正参考
- 将
stripe.init()的调用放在应用启动的全局入口位置(比如根组件构造函数、应用级初始化逻辑中),提前完成SDK全局初始化,不要将init逻辑和支付触发逻辑放在同一个点击回调内。 - 初始化时必须传入有效的Stripe publishableKey,不要传入私钥或其他类型的无效参数。
- 如果初始化逻辑是在异步函数中执行的,需要等待init的Promise resolve完成后,再放开支付按钮的可点击状态,避免异步时序错乱。
正确的初始化时序示例:
// 根组件初始化阶段执行 import stripe from '@tipsi-stripe/react-native-stripe' // 应用启动即完成SDK初始化 stripe.init({ publishableKey: '你的Stripe公钥', merchantId: '商户ID(仅使用Apple Pay时需要配置)' })待初始化完成后,再在支付提交逻辑中调用
createTokenWithCard等业务方法。
内容的提问来源于stack exchange,提问作者Kanwarjeet Singh
相关产品推荐
相关产品推荐

