四、receiptData 旧收据伪造问题
对于 StoreKit Original API 获取的 receiptData 凭证,苹果在客户端有 2 个 API :
- iOS 7 之前:transactionReceipt | Apple Developer Documentation (已弃用)
- iOS 7 以上:appStoreReceiptURL | Apple Developer Documentation
格式区别: 这 2 个 API 获取的 receiptData 凭证,经过苹果 verifyReceipt API 解析后的格式是不同的。
问题: 目前发现, iOS 7 之前的旧凭证 API,黑产能伪造票据中的 Bundle ID !
目前不能伪造的字段:
- app_item_id:app id,app 在苹果商店的唯一标识
- item_id:商品 id,内购商店在苹果商店的唯一标识
- transaction_id:交易 id,苹果的凭证收据的唯一标识(苹果订单号)
建议:
- 服务端要校验以上3个不能不能伪造的字段。
- 通过 Apple Store Server API 是查询 transaction_id 做二次校验。
- 如果 app 本身是通过新票据 API 获取,服务端可以直接拒绝旧票据的交易。
各位开发者要注意