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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:46:46