React Native中使用RevenueCat完成支付后如何获取支付凭证?
React Native集成RevenueCat获取iOS非续订订阅支付凭证
首次在React Native中集成RevenueCat,拥有一款上架App Store的非续订订阅产品,已通过RevenueCat SDK成功完成支付,但需获取支付凭证用于后端二次验证。以下是当前使用的支付代码:
if (!subscriptionModule) { if (constant.isIOS) { Purchases.setDebugLogsEnabled(true); Purchases.setup('appl_TTTTTTTTTTTTTTT'); console.log('sdk initialized'); } } async getOffer() { try { const doubleJoinProduct = await Purchases.getOfferings(); if ( doubleJoinProduct.current !== null && doubleJoinProduct.current.availablePackages.length !== 0 ) { console.log('the offer list is = ', doubleJoinProduct); if ( doubleJoinProduct.all['com.pozzleplanet.test.doubleJoinMonth'] .availablePackages.length !== 0 ) { let inapp_package = doubleJoinProduct.all['com.pozzleplanet.test.doubleJoinMonth'] .availablePackages[0]; console.log('The available package is = ', inapp_package); this.purchaseProduct(inapp_package); } } } catch (e) { console.log('Error while getting offer', e); } } async purchaseProduct(inapp_package: any) { console.log('package purchasing....', inapp_package); try { const purchaseMade = await Purchases.purchasePackage(inapp_package); console.log('before purchase info is = ', JSON.stringify(purchaseMade)); if ( typeof purchaseMade.purchaserInfo.entitlements.active[ 'com.pozzleplanet.test.doubleJoinMonth' ] !== 'undefined' ) { console.log('purchase info is = ', JSON.stringify(purchaseMade)); } } catch (e) { console.log('the purchase error is ', e); } }
解决方案
1. 直接从PurchaseResult提取支付凭证
purchasePackage方法返回的purchaseMade对象中,transaction.receipt字段就是App Store返回的base64格式支付凭证,可以直接拿这个字符串传给后端做二次验证。
修改你的purchaseProduct方法,添加凭证提取逻辑:
async purchaseProduct(inapp_package: any) { console.log('package purchasing....', inapp_package); try { const purchaseMade = await Purchases.purchasePackage(inapp_package); // 提取支付凭证 const paymentReceipt = purchaseMade.transaction?.receipt; if (paymentReceipt) { console.log('获取到支付凭证:', paymentReceipt); // 这里调用你的后端接口,传入凭证做验证 // await fetch('你的后端验证地址', { // method: 'POST', // body: JSON.stringify({ receipt: paymentReceipt }) // }); } if (purchaseMade.purchaserInfo.entitlements.active['com.pozzleplanet.test.doubleJoinMonth']) { console.log('purchase info is = ', JSON.stringify(purchaseMade)); } } catch (e) { console.log('the purchase error is ', e); } }
2. 额外说明
- 非续订订阅的凭证验证逻辑和自动续订订阅一致,后端可以调用Apple官方的验证接口(正式环境用
https://buy.itunes.apple.com/verifyReceipt,沙箱测试用https://sandbox.itunes.apple.com/verifyReceipt) - 如果需要获取历史交易的凭证,可以调用
Purchases.getPurchaserInfo(),返回的purchaserInfo.allPurchases数组里包含所有交易的凭证信息 - 处理凭证时要做好异常捕获,比如网络请求失败、凭证过期或无效等情况
内容的提问来源于stack exchange,提问作者Pankaj Sonava
相关产品推荐
相关产品推荐

