React Native集成Stripe使用Ideal支付配置return_url仍报错如何解决?
需修改的配置&代码点
- 修正支付类型参数的大小写
Stripe 支付方法的type值为全小写格式,你当前代码里写的type:'Ideal'是错误的,必须改为type: 'ideal',大小写错误会导致SDK参数识别异常,哪怕正确传入了return_url也会触发校验报错。
- 修正支付类型参数的大小写
- 替换return_url为应用的深链接地址
你当前用的https://google.com是网页地址,无法跳转回App,需要替换为你应用预先注册的Deep Link scheme地址,例如yourapp://stripe-redirect,同时需要在AndroidManifest.xml(安卓)和Info.plist(iOS)中配置对应的scheme声明,确保支付完成后可以正常唤起你的应用。
- 替换return_url为应用的深链接地址
- 修复支付秘钥获取的异步逻辑
你写的fetchPaymentIntentClientSecret方法没有返回client_secret值,且调用后直接读取state的clientSecret会存在异步更新延迟的问题,大概率会拿到未更新的旧值,需要调整为直接返回获取到的秘钥,调用时直接使用返回值。
- 修复支付秘钥获取的异步逻辑
- 新增深链接跳转后的结果处理
需要在应用入口监听跳转回App的深链接事件,调用Stripe SDK的handleURLCallback方法处理支付结果,完成支付闭环。
- 新增深链接跳转后的结果处理
修改后的代码示例
// 调整秘钥获取方法,直接返回client_secret const fetchPaymentIntentClientSecret = async () => { const response = await fetch(`fetchurl`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({amount:'1000'}), }); const data = await response.json(); console.log(data.client_secret); return data.client_secret; }; const handlePayPress = async () => { setBankName("abn_amro"); // 直接使用返回的clientSecret,避免state异步问题 const clientSecret = await fetchPaymentIntentClientSecret(); const { error, paymentIntent } = await confirmPayment(clientSecret, { // 修正type为小写ideal type:'ideal', billingDetails:{ name: 'Joppe - app', }, // 替换为你的应用深链接 return_url:'yourapp://stripe-redirect' }); if (error) { Alert.alert(`Error code: ${error.code}`, error.message); } else if (paymentIntent) { Alert.alert( 'Success', `The payment was confirmed successfully! currency: ${paymentIntent.currency}` ); } }; // 新增深链接监听(可根据你用的路由库调整逻辑) useEffect(() => { const handleDeepLink = async (event) => { const url = event.url; if (url.startsWith('yourapp://stripe-redirect')) { await stripe.handleURLCallback(url); } }; const subscription = Linking.addEventListener('url', handleDeepLink); return () => subscription.remove(); }, []);
内容的提问来源于stack exchange,提问作者Joppe Meijers
相关产品推荐
相关产品推荐

