In-App Purchase 内购丢单、串单处理

In-App Purchase 内支付相信是很多开发者的伤痛,由于内支付的处理机制导致很多情况下会出现丢单的情况,这边文章就着重聊一下内购丢单的情况和处理。如果你对内支付还不是很了解建议你看下这边文章,内购流程:http://blog.csdn.net/teng_ontheway/article/details/47011813 惯例美女镇楼哈 ?

1.下面是我自己画的一个大概的流程图(字比较烂,将就这看吧哈~)

图中 ① 为请求商品详情之后根据商品的ID 发起支付请求 (这里的Id 就是商品的ProductId)

在发起支付之后 ,会收到苹果返回的商品信息(这些信息是你上架商品时候填写的),然后在根据这些信息把此次支付封装成一次事务加到苹果的支付事务里(个人理解)。如图
这里面有一个重要是 操作是为了防止发生丢单,串单的在下面在详解

然后是图中② 在收到苹果返回的支付结果后做的处理

这里会收到苹果支付的返回凭证,这里要做下本地存储,防止发送后台失败引起的丢单。

然后在成功验证发放商品之后在删除本地存储

2.丢单产生的情况和处理

1.在①的时候重点是在封装的时候把订单信息写进SKMutablePayment,这样在收到支付结果的时候就可以去取出这个订单号,发送后台进行验证,这样就能有效的规避串单问题。 2.在②的时候在用户支付之后还未收到凭证回调之后如果app 出现异常,就不能正常接收支付结果的回调,这个时候,只要不主动关闭这次交易事务下次设置监听的时候(建议重启的时候),还是可以获取到这次交易回调,再进行凭证处理。

MyStoreObserver *tempObserver = [MyStoreObserver shareInstance];
self.observer = tempObserver;
[[SKPaymentQueue defaultQueue] addTransactionObserver:tempObserver];
复制代码

3.在③的时候收到凭证的回调之后发送后台验证这块很可能会出现发送失败等情况,这个时候就要把凭证进行本地存储(存储的是记得是存储为数组,因为可能有多个),在验证成功之后再删除本地存储的凭证。

丢单的处理在上面的贴图代码中也有体现,希望对你会有帮助,大体总结就到这里了,中午吃饭了,就这么多吧! ?

转载于:https://juejin.im/post/5b4f07cdf265da0f6a03504d

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值