【苹果支付一】应用内购买(IAP)各类型在服务端的验证规则
Song •
2578 次浏览 •
0个评论 •
2020年07月04日
一、非消耗品(比如单本杂志购买,苹果服务器支持恢复)
1.先验证服务器有没有购买记录,如果有,则不处理,此次操作成功 ;
2.如果服务器没有购买记录,则到苹果服务器验证
- (1)首先到正式验证地址验证收据,如果返回状态非0,则再向测试验证地址验证收据。
- (2)如果最后返回的状态为0,表示是有效购买,则插入,增加权限,此次操作成功。
- (3)否则失败。
二、消耗品
比如鱼食,苹果服务器不支持恢复
- 1.首先到正式验证地址验证收据,如果返回状态非0,则再向测试验证地址验证收据。
- 2.如果最后返回的状态为0,表示是有效购买,则插入,增加权限,此次操作成功。
- 3.否则失败。
三、自动续订的订阅(产品定义有时长,过期自动续订,苹果服务器支持恢复)
1.购买时:
- (1)、首先从正式验证地址验证收据,如果返回状态是
21007,则再从测试验证地址验证收据. - (2)、如果苹果返回状态为0,则表示订阅还有效,在苹果返回
json的latest_receipt_info或者receipt结构中(latest_receipt_info优先)取出最新过期时间,插入或者更新过期时间,并赋予对应权限,此次操作成功。 - (3)、如果苹果返回状态为
21006,则表示订阅过期,但是还有效。在苹果返回json的latest_expired_receipt_info结构中,取出交易时间(“purchase_date”,过期的订阅交易记录中,没有过期时间字段),[交易时间+订阅时长]为结束,赋予权限。 - (4)、否则失败
2.过期验证时:
- (1)当用户第一次购买订阅之后,会有一个最后的过期时间记录在服务器,以此计算剩余时间。如果算出此时剩余时间等于0了,取出当前用户最新的一条订阅记录(
receipt),通过苹果验证接口进行验证。 - (2)首先从正式验证地址验证收据,如果返回状态是21007,则再从测试验证地址验证收据.
- (3)如果苹果最后返回结果中状态值为0,表示已经续订,在
latest_receipt_info或者receipt结构中(latest_receipt_info优先),取出最新的过期时间,更新服务器过期时间,并赋予对应权限,remaindDays用新的过期时间算。 - (4)如果返回状态为21006,表示已经退订,但是还有效。在苹果返回
json的latest_expired_receipt_info结构中, 取出交易时间(“purchase_date”,过期的订阅交易记录中,没有过期时间字段),以[交易时间+订阅时长]为过期时间,更新服务器过期时间。
四、非自动续订的订阅
产品定义没有时长,时长自己控制,可以多次购买,类似于消耗品,苹果服务器不支持恢复
- 1.验证过程和消耗品相同
五、免费订阅
只能在Newsstand里面用,永不过期,苹果服务器支持恢复
- 1.验证过程和非消耗品相同
-
【苹果支付二】apple pay苹果支付以及自动续订订阅开发 2020-07-03 -
Laravel 优雅解决接口数据带T Z格式问题(日期序列化) 2020-06-22 -
Laravel Mysql语句中时间戳/日期格式相互转换 2020-06-03 -
PHP7.*使用pecl安装扩展方法 2020-06-03 -
Mac安装swoole并解决安装错误 2020-05-11

更多相关好文