提交
This commit is contained in:
@@ -14,7 +14,7 @@
|
||||
|
||||
|
||||
@interface QXIAPManager()<SKPaymentTransactionObserver,SKProductsRequestDelegate,SKRequestDelegate>
|
||||
|
||||
@property (nonatomic,strong)NSString*orderNo;
|
||||
@end
|
||||
|
||||
@implementation QXIAPManager
|
||||
@@ -31,12 +31,13 @@
|
||||
/*
|
||||
购买
|
||||
*/
|
||||
-(void)butGoodsWithId:(NSString*)productId{
|
||||
-(void)buyGoodsWithId:(NSString*)productId orderNo:(NSString*)orderNo{
|
||||
self.orderNo = orderNo;
|
||||
//productId要跟服务端的关键字对应
|
||||
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
|
||||
|
||||
if ([SKPaymentQueue canMakePayments]) { //用户允许app内购
|
||||
if (productId.length) {
|
||||
showLoadingInView(KEYWINDOW);
|
||||
NSLog(@"%@商品正在请求中...",productId);
|
||||
NSArray *product = [[NSArray alloc] initWithObjects:productId, nil];
|
||||
NSSet *set = [NSSet setWithArray:product];
|
||||
@@ -59,9 +60,15 @@
|
||||
|
||||
#pragma mark SKProductsRequestDelegate 查询成功后的回调
|
||||
- (void)productsRequest:(nonnull SKProductsRequest *)request didReceiveResponse:(nonnull SKProductsResponse *)response {
|
||||
|
||||
|
||||
NSArray *product = response.products;
|
||||
if (response.invalidProductIdentifiers.count) {
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
hideLoadingInView(KEYWINDOW);
|
||||
});
|
||||
NSLog(@"商品请求错误,error:%@", response.invalidProductIdentifiers);
|
||||
showToast(@"商品请求错误");
|
||||
if (self.subscriptionFailurreCompletionHandler) {
|
||||
self.subscriptionFailurreCompletionHandler();
|
||||
}
|
||||
@@ -73,6 +80,9 @@
|
||||
}
|
||||
|
||||
- (void)paymentQueue:(nonnull SKPaymentQueue *)queue updatedTransactions:(nonnull NSArray<SKPaymentTransaction *> *)transactions {
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
hideLoadingInView(KEYWINDOW);
|
||||
});
|
||||
// NSInteger i = 0;
|
||||
for (SKPaymentTransaction *tran in transactions) {
|
||||
// if(i != transactions.count - 1){
|
||||
@@ -100,9 +110,14 @@
|
||||
}
|
||||
[self vertifyReceipt:^(BOOL success) {
|
||||
if(success){
|
||||
self.subscriptionSuccessCompletionHandler();
|
||||
if (self.subscriptionSuccessCompletionHandler) {
|
||||
self.subscriptionSuccessCompletionHandler();
|
||||
}
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:noticeAlipayResult object:nil];
|
||||
}else{
|
||||
self.subscriptionFailurreCompletionHandler();
|
||||
if (self.subscriptionFailurreCompletionHandler) {
|
||||
self.subscriptionFailurreCompletionHandler();
|
||||
}
|
||||
}
|
||||
}]; //获取交易成功后的购买凭证
|
||||
NSLog(@"交易完成,正在校验凭证....");
|
||||
@@ -111,8 +126,10 @@
|
||||
|
||||
case SKPaymentTransactionStateFailed://交易失败
|
||||
[[SKPaymentQueue defaultQueue] finishTransaction:tran];
|
||||
|
||||
self.subscriptionFailurreCompletionHandler();
|
||||
if (self.subscriptionFailurreCompletionHandler) {
|
||||
self.subscriptionFailurreCompletionHandler();
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
|
||||
@@ -203,39 +220,52 @@
|
||||
*/
|
||||
- (void)vertifyReceipt:(void (^)(BOOL success))completion {
|
||||
NSLog(@"~~~正在检验。。。");
|
||||
NSString *receipt = [self getReceipt];
|
||||
NSString *password = @"秘钥";
|
||||
NSString *payment_token = [self getReceipt];
|
||||
// NSString *password = @"秘钥";
|
||||
|
||||
NSString *urlString = [NSString stringWithFormat:@"https://校验地址"];
|
||||
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
|
||||
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
|
||||
|
||||
NSDictionary *parameters = @{
|
||||
@"apple_receipt": receipt,
|
||||
@"password": password
|
||||
};
|
||||
|
||||
[manager POST:urlString parameters:parameters headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
|
||||
// 请求成功,处理返回的数据
|
||||
NSLog(@"弹窗提示用户请求成功");
|
||||
if (responseObject) {
|
||||
NSString *string = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
|
||||
if ([string isEqualToString:@"success"] || [string isEqualToString:@"订单已存在"]) {
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
completion(YES);
|
||||
});
|
||||
}else if ([string isEqualToString:@"failure"] || [string isEqualToString:@"fail"]){
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
completion(NO);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
|
||||
// 请求失败,处理错误信息
|
||||
NSLog(@"请求失败:%@", error.localizedDescription);
|
||||
// NSString *urlString = [NSString stringWithFormat:@"https://sandbox.itunes.apple.com/verifyReceipt"];
|
||||
// AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
|
||||
// manager.responseSerializer = [AFHTTPResponseSerializer serializer];
|
||||
//
|
||||
// NSDictionary *parameters = @{
|
||||
// @"apple_receipt": receipt,
|
||||
// @"password": @"a24591f9614b4814b1a77f8ffda41afc"
|
||||
// };
|
||||
//
|
||||
// [manager POST:urlString parameters:parameters headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
|
||||
// // 请求成功,处理返回的数据
|
||||
// NSLog(@"弹窗提示用户请求成功");
|
||||
// if (responseObject) {
|
||||
// NSString *string = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
|
||||
// if ([string isEqualToString:@"success"] || [string isEqualToString:@"订单已存在"]) {
|
||||
// dispatch_async(dispatch_get_main_queue(), ^{
|
||||
// completion(YES);
|
||||
// });
|
||||
// }else if ([string isEqualToString:@"failure"] || [string isEqualToString:@"fail"]){
|
||||
// dispatch_async(dispatch_get_main_queue(), ^{
|
||||
// completion(NO);
|
||||
// });
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
|
||||
// // 请求失败,处理错误信息
|
||||
// NSLog(@"请求失败:%@", error.localizedDescription);
|
||||
// dispatch_async(dispatch_get_main_queue(), ^{
|
||||
// completion(NO);
|
||||
// });
|
||||
// }];
|
||||
showLoadingInView(KEYWINDOW)
|
||||
[[QXRequset shareInstance] postWithUrl:@"api/Payment/notify_apple" parameters:@{@"order_no":self.orderNo?:@"",@"payment_token":payment_token?:@""} needCache:NO success:^(id responseObject) {
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
hideLoadingInView(KEYWINDOW);
|
||||
completion(YES);
|
||||
});
|
||||
} fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) {
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
hideLoadingInView(KEYWINDOW);
|
||||
completion(NO);
|
||||
showToast(msg);
|
||||
});
|
||||
}];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user