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

In-App Purchase 内购丢单、串单处理_第1张图片
IMG_4304.JPG

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

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

IMG_6284.JPG

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


In-App Purchase 内购丢单、串单处理_第2张图片
1.png

在发起支付之后 ,会收到苹果返回的商品信息(这些信息是你上架商品时候填写的),然后在根据这些信息把此次支付封装成一次事务加到苹果的支付事务里(个人理解)。如图


In-App Purchase 内购丢单、串单处理_第3张图片
In-App Purchase 内购丢单、串单处理_第4张图片

这里面有一个重要是 操作是为了防止发生丢单,串单的在下面在详解

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


In-App Purchase 内购丢单、串单处理_第5张图片
3.png

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


In-App Purchase 内购丢单、串单处理_第6张图片
4.png

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


In-App Purchase 内购丢单、串单处理_第7张图片
5.png

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

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

MyStoreObserver *tempObserver = [MyStoreObserver shareInstance];
self.observer = tempObserver;
[[SKPaymentQueue defaultQueue] addTransactionObserver:tempObserver];

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

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

你可能感兴趣的:(In-App Purchase 内购丢单、串单处理)