【苹果支付一】应用内购买(IAP)各类型在服务端的验证规则

Song • 195 次浏览 • 0 个回复 • 2020年07月04日

一、非消耗品(比如单本杂志购买,苹果服务器支持恢复)

1.先验证服务器有没有购买记录,如果有,则不处理,此次操作成功 ;

2.如果服务器没有购买记录,则到苹果服务器验证

  • (1)首先到正式验证地址验证收据,如果返回状态非0,则再向测试验证地址验证收据。
  • (2)如果最后返回的状态为0,表示是有效购买,则插入,增加权限,此次操作成功。
  • (3)否则失败。

二、消耗品

比如鱼食,苹果服务器不支持恢复

  • 1.首先到正式验证地址验证收据,如果返回状态非0,则再向测试验证地址验证收据。
  • 2.如果最后返回的状态为0,表示是有效购买,则插入,增加权限,此次操作成功。
  • 3.否则失败。

三、自动续订的订阅(产品定义有时长,过期自动续订,苹果服务器支持恢复)

1.购买时:

  • (1)、首先从正式验证地址验证收据,如果返回状态是21007,则再从测试验证地址验证收据.
  • (2)、如果苹果返回状态为0,则表示订阅还有效,在苹果返回jsonlatest_receipt_info或者receipt结构中(latest_receipt_info优先)取出最新过期时间,插入或者更新过期时间,并赋予对应权限,此次操作成功。
  • (3)、如果苹果返回状态为21006,则表示订阅过期,但是还有效。在苹果返回jsonlatest_expired_receipt_info结构中,取出交易时间(“purchase_date”,过期的订阅交易记录中,没有过期时间字段),[交易时间+订阅时长]为结束,赋予权限。    
  • (4)、否则失败

2.过期验证时:

  • (1)当用户第一次购买订阅之后,会有一个最后的过期时间记录在服务器,以此计算剩余时间。如果算出此时剩余时间等于0了,取出当前用户最新的一条订阅记录(receipt),通过苹果验证接口进行验证。
  • (2)首先从正式验证地址验证收据,如果返回状态是21007,则再从测试验证地址验证收据.
  • (3)如果苹果最后返回结果中状态值为0,表示已经续订,在latest_receipt_info或者receipt结构中(latest_receipt_info优先),取出最新的过期时间,更新服务器过期时间,并赋予对应权限,remaindDays用新的过期时间算。
  • (4)如果返回状态为21006,表示已经退订,但是还有效。在苹果返回jsonlatest_expired_receipt_info结构中, 取出交易时间(“purchase_date”,过期的订阅交易记录中,没有过期时间字段),以[交易时间+订阅时长]为过期时间,更新服务器过期时间。

四、非自动续订的订阅

产品定义没有时长,时长自己控制,可以多次购买,类似于消耗品,苹果服务器不支持恢复

  • 1.验证过程和消耗品相同

五、免费订阅

只能在Newsstand里面用,永不过期,苹果服务器支持恢复

  • 1.验证过程和非消耗品相同

原文链接:应用内购买(IAP)各类型在服务端的验证规则


原创文章,转载请注明 :【苹果支付一】应用内购买(IAP)各类型在服务端的验证规则 - Laravel学习网
原文出处: https://phpartisan.cn/news/140.html
问题交流群 :168117787
提交评论
要回复文章请先登录注册
用户评论
  • 没有评论
[ 配置教程 ] 在ubuntu16.04中部署LNMP环境(php7+maridb且开启maridb远程以及nginx多域名访问 )并配置laravel环境 laravel dispatch 队列如何使用时间戳指定delay延迟执行时间