1.请求苹果购买信息时候调用了- (void)productsRequest:(SKProductsRequest*)request didReceiveResponse:(SKProductsResponse*)response {
if(_IAPOrderId.length>0) {
payment.applicationUsername=_IAPOrderId;//我在这里把用户的信息都保存里面保证我再次拿到凭证的时候可以和用户绑定到一起。
}
}
2.然而我想的比较完美苹果的方法比较残酷,当我首次绑定支付方式的时候,会跳出app出去绑定支付方式,重点来了之前的那个购买请求苹果会给我一个失败回调
- (void)failedTransaction:(SKPaymentTransaction *)transaction
然后我会把之前的订单号取消,finishTransaction结束这次的购买流程,然后绑定成功之后苹果就会告诉我支付成功。回到app之后就会调用成功的回调。
- (void)completeTransaction:(SKPaymentTransaction *)transaction
这个时候我再去取payment.applicationUsername时候用户的所有信息都为nil了。
这时候用户的信息都已经丢失了,不知道是哪个用户购买以及这个订单号。导致我们这边总是出现丢单的情况。
3.现在在考虑为什么会出现payment.applicationUsername为nil,苹果在这里面做了什么处理,通过一系列的流程考虑,大概逻辑应该是这种情况,当你跳出app时候回调失败请求,然后finishTransaction掉这次的购买。首次绑定的时候苹果发现这次是扣钱的,然后就直接把钱扣了,然后订单购买信息都已经没有了,苹果回重新自己生成一份购买的信息,所以你的所有存在payment.applicationUsername这个里面的信息都就消失了。所以这个时候在回调- (void)completeTransaction:(SKPaymentTransaction *)transaction的时候通过transaction查找商品信息,重新跟自己的服务器申请一个订单号,然后通过新的订单号来处理用户的这次购买请求,以上都是我自己的猜想,苹果那边的数据都不能得到,所以只能暂时这么处理,还有一些应用不会使用订单号来处理购买信息,只要拥有用户id和消费凭证就去后端验证购买消息,我觉得这个也是不错的选择。
网友评论