// // YOUPAILCIAPHelper.m // LiveChat // // Created by 张灿 on 2018/9/28. // Copyright © 2018年 caicai. All rights reserved. // #import "YOUPAILCIAPHelper.h" @implementation YOUPAILCIAPHelper +(instancetype)shareInstance { static YOUPAILCIAPHelper * shareInstance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ shareInstance = [[super allocWithZone:NULL] init]; }); return shareInstance; } +(id)allocWithZone:(struct _NSZone *)zone { return [YOUPAILCIAPHelper shareInstance]; } -(id)copyWithZone:(struct _NSZone *)zone { return [YOUPAILCIAPHelper shareInstance]; } - (void)start{ //设置监听 [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; } - (void)youpaifpurchase:(NSString*)goodsId{ if ([SKPaymentQueue canMakePayments]){ [self requestProduction:goodsId]; } } - (void)requestProduction:(NSString*)productionID{ LCLog(@"-------------请求对应的产品信息----------------"); NSArray *product = [[NSArray alloc] initWithObjects:productionID, nil]; NSSet *nsset = [NSSet setWithArray:product]; SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:nsset]; request.delegate = self; [request start]; [ZCHUDHelper showWithStatus:@"支付中..."]; } - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{ LCLog(@"--------------收到产品反馈消息---------------------"); NSArray *product = response.products; if([product count] == 0){ [ZCHUDHelper showTitle:@"应用商店无该产品"]; return; } LCLog(@"productID:%@", response.invalidProductIdentifiers); LCLog(@"产品付费数量:%ld",[product count]); SKProduct *p = nil; for (SKProduct *pro in product) { LCLog(@"%@", [pro description]); LCLog(@"%@", [pro localizedTitle]); LCLog(@"%@", [pro localizedDescription]); LCLog(@"%@", [pro price]); LCLog(@"%@", [pro productIdentifier]); p = pro; } SKPayment *payment = [SKPayment paymentWithProduct:p]; LCLog(@"发送购买请求"); [[SKPaymentQueue defaultQueue] addPayment:payment]; } //弹出错误信息 - (void)request:(SKRequest *)request didFailWithError:(NSError *)error{ LCLog(@"-------弹出错误信息----------"); LCLog(@"%@",error); [ZCHUDHelper showTitle:@"支付失败"]; } -(void) requestDidFinish:(SKRequest *)request { LCLog(@"----------反馈信息结束--------------"); LCLog(@"%@",request); [ZCHUDHelper dismiss]; } //paymentObserver - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transaction{ for(SKPaymentTransaction *tran in transaction){ switch (tran.transactionState) { case SKPaymentTransactionStatePurchasing: break; case SKPaymentTransactionStatePurchased: [self completeTransaction:tran]; break; case SKPaymentTransactionStateRestored: [self completeTransaction:tran]; break; case SKPaymentTransactionStateFailed: [self finish:tran]; break; default: break; } } } - (void)completeTransaction:(SKPaymentTransaction *)transaction{ LCLog(@"交易结束"); // NSURL *receiptUrl=[[NSBundle mainBundle] appStoreReceiptURL]; // NSData *receiptData=[NSData dataWithContentsOfURL:receiptUrl]; // NSString *receiptString=[receiptData base64EncodedStringWithOptions:0];//转化为base64字符串 NSString *base64Encoded = [transaction.transactionReceipt base64EncodedStringWithOptions:0]; NSMutableDictionary *dict = [NSMutableDictionary dictionary]; dict[@"receipt_data"] = base64Encoded; dict[@"channel"] = @"apple"; //type2代表购买金币 [LCHttpHelper requestWithURLString:WalletRecharge parameters:dict needToken:YES type:(HttpRequestTypePost) success:^(id responseObject) { NSDictionary* dict = (NSDictionary*)responseObject; NSInteger code = [[dict objectForKey:@"code"] integerValue]; if (code==0) {//成功 [ZCHUDHelper showTitle:@"购买成功"]; [self finish:transaction]; if (self.purchaseBlock) { self.purchaseBlock(); } } } failure:^(NSError *error) { }]; } - (void)finish:(SKPaymentTransaction *)transaction{ [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; } @end