应用内购时我们需要将苹果支付返回的票据发给服务器,所以我们需要先获取这一块的票据信息.
但是由于iOS系统的不断升级,获取票据信息的方法有所改变,而且最新的票据信息返回的格式与之前有所不同(新的方法返回的信息会包含一些其他的字典信息),如果使用兼容版本的代码就会导致服务器解析不了我们上传的票据信息.
这里的处理方案有两种:
1:客户端将处理返回的票据信息,将信息重新封装成服务器识别的json格式.
2:服务器端做兼容处理,对新的票据信息进行另外的一种方式的解析.
#pragma mark - 获取苹果返回的票据信息
- (NSData*)receiptWithTransaction:(SKPaymentTransaction*)transaction {
NSData *receipt = nil;
if ([transaction respondsToSelector:@selector(transactionReceipt)]) {
//Works in iOS3 - iOS7, deprected since iOS7, actual deprecated (returns nil) since iOS9
receipt = [transaction transactionReceipt];
}
#warning -- 注意,此处关于苹果票据信息的处理,旧的方法transactionReceipt在iOS7.0后被废弃了.但iOS8以后新的处理方式返回的票据信息格式比较之前有所变化,需要服务器去处理,暂时注释此处的兼容操作,任然使用iOS7.0下的transactionReceipt方法.
// if ([[NSBundle mainBundle] respondsToSelector:@selector(appStoreReceiptURL)]) {
// NSURL *receiptUrl = [[NSBundle mainBundle] appStoreReceiptURL];
// receipt = [NSData dataWithContentsOfURL:receiptUrl];
// } else {
// if ([transaction respondsToSelector:@selector(transactionReceipt)]) {
// //Works in iOS3 - iOS8, deprected since iOS7, actual deprecated (returns nil) since iOS9
// receipt = [transaction transactionReceipt];
// }
// }
return receipt;
}