V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
brader
V2EX  ›  程序员

苹果内购票据问题

  •  
  •   brader · 2023-05-23 10:23:58 +08:00 · 1390 次点击
    这是一个创建于 579 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在内购场景中,我在服务端保存了所有用户上报的 receipt-data 票据,并每天拿着票据通过调用 https://buy.itunes.apple.com/verifyReceipt 接口获取数据做一些数据分析。

    因为票据比较多,最近经过观察验证,我发现有些不同的 receipt-data 票据 其实拉取回来的数据是一样的,in_app 交易数组里面的交易项都是相同的。我不清楚苹果为何会产生这种情况,猜测是因为同一用户 id 重新登录不同苹果设备,所以产生的 receipt-data 不同?

    为了精简目的,产生了想删除一些重复票据的想法,目前构想方案是判断 in_app 里面的第一笔交易的 transaction_id ,如果相同,就判定这两个 receipt-data 票据属于同一用户的票据,然后删除多余的票据。

    请问我这种做法是正确的吗?我需要判断 in_app 或者 latest_receipt_info 里面的所有交易来比对?还是判断第一笔交易就够了?还是应该采用其他方案?
    8 条回复    2023-05-23 17:35:39 +08:00
    SingeeKing
        1
    SingeeKing  
       2023-05-23 10:42:51 +08:00
    没太看明白到底是什么意思……

    如果你说的不同的 receipt-data 获取到的苹果的信息一致那么很正常,就同一用户同一设备点两次恢复购买 receipt 都是不同的

    所谓的删除是指为了清空你自己存储的数据库里的信息?首先如果只判断一个那么一定要只保留后面的(不然两次购买的被一次的冲掉);另外处理恢复购买时记得使用 original_transaction_id
    brader
        2
    brader  
    OP
       2023-05-23 10:47:16 +08:00
    @SingeeKing 和你理解的差不多,就是有很多这种情况,两个或多个不同的 receipt-data 获取到的数据是一样的,不会存在你说的前面的会丢失部分交易,我观察了,无论用哪个票据拉取,交易都是全的,都是一样的,产生这个情况的原因可能就是你说的恢复购买。
    服务端存储的这种多个票据,对我来说是多余的,所以我想删除一些,就是不知道我的判断逻辑是否正确
    MozzieW
        3
    MozzieW  
       2023-05-23 10:51:47 +08:00
    receipt-data 对应的是一个 AppleId 的全部购买,比如用户购买了订阅,然后续订 3 次,一次消耗型购买,这五个订单都可以通过 receipt-data 获取到。

    四个订阅是续订的,它们的 original-transaction-id 一样,通过 original-transaction-id 可以获取到所以续订。也就说在续订这个场景下,保存一个 original-transaction-id 就可以了

    如果 AppleId 存在其他类型购买,那么 receip-data 也能获取到,但它的 original-transaction-id 和订阅不是同一个值。要单独获取更新,或者直接可以不管,通过回调解决。
    brader
        4
    brader  
    OP
       2023-05-23 10:55:36 +08:00
    @MozzieW 我们流程是完善可用的了,客户端的我不管。我目前只是说我在服务端保存了客户端提交的所有 receipt-data ,然后用 receipt-data 去 https://buy.itunes.apple.com/verifyReceipt 接口拉取数据做分析,如上所说,我观察发现某些不同的 receipt-data 拉取的数据是一样的,可能是同用户恢复购买吧,只是 receipt-data 不同而已,我想删除一些这种重复的 receipt-data
    SingeeKing
        5
    SingeeKing  
       2023-05-23 10:58:30 +08:00
    @SingeeKing 哦你想存的是 receipt-data ,那没问题,同一个用户的任何一个 receipt-data 都可以获取这个用户的全部购买信息,那你的删除策略也没问题
    brader
        6
    brader  
    OP
       2023-05-23 11:04:46 +08:00
    @SingeeKing 好的,感谢解答
    rockyliang
        7
    rockyliang  
       2023-05-23 17:18:01 +08:00
    这些 receipt-data 背后的购买物品是什么类型的?消耗型的还是订阅型的?
    brader
        8
    brader  
    OP
       2023-05-23 17:35:39 +08:00
    @rockyliang 订阅型的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   975 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:56 · PVG 02:56 · LAX 10:56 · JFK 13:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.