一、非消耗品(比如单本杂志购买,苹果服务器支持恢复)
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.验证过程和非消耗品相同