1.内购流程

1.APP调用Apple服务器接口创建订单,发起购买请求
2.内购的api完成购买,获取receipt发送本地服务器,本地服务器拿到receipt向苹果发起验证,并回调结果给APP
以上就是整个购买的过程,大致分为两个阶段:支付阶段和验证阶段
2.为什么会丢单原因?
1.不能得到凭证去Apple服务器验证订单的正确性(支付阶段)
解决:
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
这个队列里面存着所有的已支付,未支付的订单,而且需要手动移除,而APP每次启动和每次支付的时候都会去判断这个队列里面是否为空,如果不为空的话会调用<SKPaymentTransactionObserver> 代理方法
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions;
2.APP在上传凭证给服务器时发生了网络或各种原因,造成了凭证的丢失,产生了掉单 (验证阶段)
解决:在支付之前需要通过自己的服务器创建订单,在交易成功回调之后,立马将该订单和本次交易凭证存储到数据库中。在用户下次登录的时候和每次支付结束时候,要首先验证该数据库中的交易凭证是否都经过后台验证过并成功给用户商品,然后将本地保存的凭证移除。
验证的时机:
- 用户下次登录
- 每次支付之后
3.代码实现
1.设置监听,在APP启动时候监听内购的订单情况

2.请求商品订单

3.查询构造的商品订单

4.购买成功后的回调

5.存储交易凭证,并且上传凭证


6.验证交易凭证

注:验证凭证是将获取的凭证通过接口交给后台去验证App是否交易成功。如果发生弱网,APP杀死,或者验证失败,凭证会保存在本地,当APP重启时候会把本地保存的凭证进行二次的验证。
参考文章:
https://www.jianshu.com/p/e489c6d25dc3
网友评论