You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何从苹果内购收据获取订阅支付历史及交易详情?

苹果内购订阅历史记录与交易详情获取指南

嘿,我刚好处理过类似的苹果内购订阅历史查询问题,给你分享一下实际操作中的经验和解决方案:

问题1:iOS 6风格收据转iOS 7风格?或获取指定订阅ID的完整历史记录

首先明确:iOS 6风格收据是仅包含当前订阅状态的老格式,而iOS 7风格收据会包含所有历史交易记录。你不需要转换已有的iOS 6收据,直接获取最新的iOS 7风格收据即可:

  • 在React Native中,如果你使用react-native-iap这类主流内购库,可以调用getReceiptData()方法获取base64编码的iOS 7风格收据(无论当前iOS系统版本如何,这个方法返回的都是包含历史的新格式)。
  • 将获取到的收据发送至苹果的验证服务器(生产环境:https://buy.itunes.apple.com/verifyReceipt;沙箱环境:https://sandbox.itunes.apple.com/verifyReceipt),请求体需要包含receipt-data字段,以及password(你的App Store Connect中的共享密钥)。
  • 苹果返回的响应里,latest_receipt_info字段就是所有历史交易的数组。你可以通过每个交易条目中的product_id(即你的订阅ID)来过滤数组,快速定位到指定订阅的所有历史支付记录。

如果你的App之前只存储了iOS 6风格收据,也可以把它发给苹果验证,不过苹果的响应不会自动补充历史交易——还是建议直接获取最新的iOS 7风格收据更可靠。

问题2:获取支付金额、货币、抽成比例等详细交易信息

苹果的收据响应和交易回调里其实藏着这些信息,只是需要针对性提取或提前存储:

支付日期、金额与货币

  • 支付日期:在latest_receipt_info的每个交易条目中,purchase_date_ms(时间戳)或purchase_date(格式化时间)字段就是支付完成的时间。
  • 金额与货币:这里有两个可靠的获取途径:
    1. 当用户完成订阅支付时,通过react-native-iappurchaseUpdatedListener监听交易事件,回调中的product对象会包含price(支付金额)和currency(货币代码),你可以把这些信息和transactionId一起存储到你的后端数据库,后续查询时直接关联即可。
    2. 如果你依赖收据验证的响应,需要结合App Store Connect中对应product_id的定价信息(注意不同地区的价格差异),不过这种方式不如交易时直接捕获准确,因为可能存在折扣、试用等特殊情况。

折扣与抽成比例

  • 折扣信息:收据的交易条目中,is_trial_period字段标记是否为试用订阅,promotional_offer_id字段对应你设置的促销优惠ID,通过这些可以判断用户是否使用了折扣或试用。
  • 抽成比例(15%/30%):苹果的收据不会直接返回抽成比例,但你可以通过两种方式判断:
    1. 如果你符合苹果的「App Store小企业计划」(年收入低于100万美元),那么所有符合条件的订阅抽成都是15%;否则默认30%。你可以根据订阅的购买时间和你的开发者计划状态来记录。
    2. 使用苹果的销售与趋势API,可以查询每笔交易的详细分成数据,不过需要在App Store Connect中配置API密钥。

总结步骤

  1. 在React Native中通过内购库获取iOS 7风格的最新收据。
  2. 将收据发送至苹果验证服务器,获取包含历史交易的响应。
  3. 用订阅ID过滤latest_receipt_info数组,得到目标订阅的历史记录。
  4. 在交易完成时捕获并存储金额、货币等关键信息,或通过苹果开发者API补充抽成数据。

内容的提问来源于stack exchange,提问作者Greg

火山引擎 最新活动