如何获取Flutter应用内购的original transaction id?iOS场景求助
获取iOS订阅的originaltransactionid方法
1. 从in_app_purchase本地购买记录提取
即便你说应用内查询订阅状态有问题,先确认是否正确获取了PurchaseDetails对象:
- 调用
InAppPurchase.instance.queryPastPurchases()后,遍历返回的List<PurchaseDetails>集合,每个对象的originalTransactionId属性(驼峰命名)就是你要的原始交易ID。 - 如果本地查询无结果或字段缺失,检查App Store Connect的订阅配置是否正确、应用是否开启内购权限,以及用户是否登录了有效Apple ID。
2. 通过App Store Server API获取
如果依赖Server API,有两种可靠路径:
- 基于交易凭证查询:
- 从应用内的
PurchaseDetails对象中,取出verificationData.localVerificationData,这是iOS返回的base64编码交易凭证。 - 将该凭证发送到你的后端,调用App Store Server API的验证交易凭证接口,响应的
latest_receipt_info数组中,每个条目都包含original_transaction_id字段(下划线命名)。
- 从应用内的
- 基于用户订阅历史查询:
若你的后端已通过App Store Connect完成用户身份关联,可调用订阅历史记录接口,通过用户标识符查询,返回结果会包含所有订阅交易的originalTransactionId。
3. 常见问题排查
- 注意字段命名差异:in_app_purchase包内是
originalTransactionId(驼峰),App Store Server API返回的是original_transaction_id(下划线),避免混淆。 - 沙盒测试时,必须使用沙盒Apple ID,且需手动触发订阅续订或过期操作,才能生成完整的交易记录。
- 检查Server API权限:确保后端使用的密钥拥有订阅管理相关权限,且请求签名符合Apple的要求。
内容的提问来源于stack exchange,提问作者mehmet yazıcı
相关产品推荐
相关产品推荐

