【苹果支付一】应用内购买(IAP)各类型在服务端的验证规则
Song •
2182 次浏览 •
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.验证过程和非消耗品相同
-
laravel中distinct()的使用方法与去重 2017-09-11
-
Laravel将view缓存为静态html,laravel页面静态缓存 2021-10-09
-
[ laravel爬虫实战--基础篇 ] guzzle描述与安装 2017-11-01
-
[ 配置教程 ] 在ubuntu16.04中部署LNMP环境(php7+maridb且开启maridb远程以及nginx多域名访问 )并配置laravel环境 2017-07-18
-
mysql如何给运营人员添加只有查询权限的账号 2024-12-02
热门文章
-
mysql如何给运营人员添加只有查询权限的账号 2024-12-02
-
Mac 安装mysql并且配置密码 2024-11-20
-
阿里云不同账号(跨账号)ECS服务器同地域如何实现免费内网互通? 2024-11-12
-
electron安装使用better-sqlite3并解决NODE_MODULE_VERSION xxx. This version of Node.js requires 2024-11-06
-
Zerotier+Moon+Nginx实现内网穿透搭建网站 2024-08-23
更多相关好文