出现掉单的场景:
其实严格来讲不算是掉单,支付成功后在SKPaymentTransactionObserver的回调函数- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions会返回票据信息。
一般情况下,在调用- (void)addPayment:(SKPayment *)payment时,设置了payment的applicationUsername,在SKPaymentTransactionObserver的回调SKPaymentTransaction里也会返回这个applicationUsername;
但有些特殊情况下在支付成功后返回的SKPaymentTransaction里的applicationUsername为空(比如:在图1出来时立即杀掉app, 再出现图2), 重新打开app收到的回调的SKPaymentTransaction的applicationUsername就是nil。在切换用户登录后这个充值有可能充到切换后的用户,这个问题发生的几率比较小,而且在客户端处理逻辑会比较复杂。我们的做法是在校验票据接口增加一个参数标识是不是这种没有返回applicationUsername的订单,将来有用户反馈可以在后台核查。
(图1)
(图2)