ios内购完整流程2015.12.23

  最近在做内购,我一直都是一个搬运工,网上找了很多别人的博文,发现都不不尽如人意,现在做完了,整理一下。

  

  1 @interface RootViewController ()<SKProductsRequestDelegate,UIAlertViewDelegate>
  2 
  3 - (void)viewDidLoad {
  4     [super viewDidLoad];
  5 
  6     [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
  7 }
  8 
  9 
 10 - (IBAction)removeADBtnClick {
 11     if([SKPaymentQueue canMakePayments]){
 12         UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"内购" message:nil delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"去广告",@"恢复", nil];
 13         [alert show];
 14     }else{
 15         NSLog(@"不允许程序内付费");
 16     }
 17 }
 18 
 19 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
 20 {
 21       if (buttonIndex == 1) {
 22           NSString *product = @"com.charmer.SQremoveAD";
 23           [self requestProductData:product];
 24       }
 25       else if (buttonIndex==2){
 26           [[SKPaymentQueue defaultQueue]  restoreCompletedTransactions];
 27       }else if (buttonIndex==0){
 28             
 29       }   
 30 }
 31 
 32 //请求商品
 33 - (void)requestProductData:(NSString *)type{
 34     NSArray *product = [[NSArray alloc] initWithObjects:type,nil];
 35     
 36     NSSet *nsset = [NSSet setWithArray:product];
 37     SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:nsset];
 38     request.delegate = self;
 39     [request start];
 40     
 41 }
 42 //收到产品返回信息
 43 - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{
 44     NSArray *myProduct = response.products;
 45     if([myProduct count] == 0){
 46         //有网络的情况下,没有获取商品
 47         NSLog(@"--------------没有商品,不能购买------------------");
 48         return;
 49     }
 50     
 51     //购买
 52     SKPayment *payment = [SKPayment paymentWithProduct:myProduct[0]];
 53     [[SKPaymentQueue defaultQueue] addPayment:payment];
 54 }
 55 
 56 //请求失败
 57 - (void)request:(SKRequest *)request didFailWithError:(NSError *)error{
 58     //请求商品失败
 59     NSLog(@"------网络有问题------------错误-----------------:%@", error);
 60 }
 61 
 62 - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions {
 63     
 64     for(SKPaymentTransaction *tran in transactions){
 65          
66
switch (tran.transactionState) { 67 case SKPaymentTransactionStatePurchased: 68 NSLog(@"交易完成"); 69 70 [self verifyPruchase]; 71 [[SKPaymentQueue defaultQueue] finishTransaction:tran]; 72 73 74 break; 75 case SKPaymentTransactionStatePurchasing: 76 NSLog(@"商品添加进列表"); 77 78 79 break; 80 case SKPaymentTransactionStateRestored: 81 NSLog(@"已经购买过商品"); 82 83 [[SKPaymentQueue defaultQueue] finishTransaction:tran]; 84 break; 85 case SKPaymentTransactionStateFailed: 86 NSLog(@"交易失败"); 87 88 89 [[SKPaymentQueue defaultQueue] finishTransaction:tran]; 90 break; 91 default: 92 break; 93 94 } 95 96 } 97 } 98 - (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue { 99 NSLog(@"paymentQueueRestoreCompletedTransactionsFinished"); 100 } 101 - (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error { 102 103 NSLog(@"恢复结束."); 104 } 105 106 #pragma mark 验证购买凭据 107 - (void)verifyPruchase 108 { 109 NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL]; 110 NSData *receiptData = [NSData dataWithContentsOfURL:receiptURL]; 111 NSURL *url = [NSURL URLWithString:ITMS_SANDBOX_VERIFY_RECEIPT_URL]; 112 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0f]; 113 request.HTTPMethod = @"POST"; 114 NSString *encodeStr = [receiptData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed]; 115 NSString *payload = [NSString stringWithFormat:@"{\"receipt-data\" : \"%@\"}", encodeStr]; 116 NSData *payloadData = [payload dataUsingEncoding:NSUTF8StringEncoding]; 117 118 request.HTTPBody = payloadData; 119 120 NSData *result = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 121 122 if (result == nil) { 123 NSLog(@"验证失败"); 124 return; 125 } 126 NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:result options:NSJSONReadingAllowFragments error:nil]; 127 128 NSLog(@"%@", dict); 129 130 if (dict != nil) { 131 // bundle_id&application_version&product_id&transaction_id 132 NSLog(@"验证成功"); 133 } 134 }

 

posted @ 2015-12-23 17:08  狂躁的风夹杂着闪电  阅读(204)  评论(0编辑  收藏  举报