IOS内购服务端技术方案
IOS购买vip流程
1. IOS端,用户点击相应的购买按钮
2. 服务端生成订单,并返回订单信息(包含在苹果后台设置产品对应的ProductID)
3. 客户端发起支付
4. 客户端支付完毕,拿到苹果返回的transaction,把该transaction和订单信息传到服务端
5. 服务端更新订单状态,返回客户端该vip购买订单已完成蛋未验证的状态(此时可认为用户已经是vip),客户端流程已结束
6. 服务端根据transaction,去苹果服务器验证收据的有效性,再去更新订单状态,如果错误,则回滚用户vip资格(异步处理)
IOS内购服务器模式的主要流程如下所示:
1. app从服务器获取产品标识列表
2. app从app store 获取产品信息
3. 用户选择需要购买的产品
4. app 发送 支付请求到app store
5. app store 处理支付请求,返回transaction信息
6. app 将transaction receipt 发送到服务器
7. 服务器收到收据后发送到app stroe验证收据的有效性
8. app store 返回收据的验证结果
9. 根据app store 返回的结果决定用户是否购买成功
服务端验证注意点
苹果AppStore线上的购买凭证验证地址是https://buy.itunes.apple.com/verifyReceipt
1. 考虑到网络异常情况,服务器的验证应该是一个可恢复的队列,如果网络失败了,应该进行重试。
2. 与苹果的验证接口文档在这里。简单来说就是将该购买凭证用Base64编码,然后POST给苹果的验证服务器,苹果将验证结果以JSON形式返回。
国内连接苹果服务器的稳定性问题
问题
1. 用户能否忍受3-6s的等待时间
2. 如果app store server 宕机,如何确保成功付费的用户能够得到正常服务。
解决
对于第一个问题,我们有理由相信用户完全无法忍受,所以采用异步验证的方式,服务器收到客户端的请求后,就将请求放到MCQ中去处理。
对于第二个问题,由于苹果人员很负责人的告知:我们的服务器不稳定,所以不排除收据验证超时的情况。
对于验证超时的收据,保存到数据库中并标记为验证超时,定时任务每隔一定的时间去app store验证,确保能够获取收据的验证结果。
网友评论