支付流程解释
1.客户端向Appstore请求购买产品,Appstore验证产品成功后,从客户端的Apple账户中扣费。
2.Appstore向客户端返回一段receipt-data(票据),里面记录了本次交易的证书和签名信息。
3.客户端向我们可以信任的服务器(后台)提供receipt-data
4.服务器对receipt-data进行一次base64编码
5.把编码后的receipt-data发往itunes.appstore进行验证
6.itunes.appstore返回验证结果给服务器
7.服务器对商品购买状态以及商品类型,向客户端发放相应的道具与推送数据更新通知
问题:
以上七个步骤实际上是一个很安全的支付流程了。那问题会出在哪里呢?
问题出现在内购票据返回有延迟,中间用户可能杀进程或者进入后台操作。
一:得到票据,立即保存本地,并向服务器验证
二:验证成功,删除本地保存数据。若未成功,再次验证重试。
三:APP重启时,如有本地票据则与服务器进行认证,若认证成功则删除票据。
四:若以上流程还未能解决漏单问题,则可在APP增加类似找回按钮,依据本地保存票据进行找回(流程三)。
注:服务器需建立表单记录票据数据,避免多次增加内购产品。
参考:https://www.jianshu.com/p/041cc4be7f26