2015-12-24 2 views
0

Я пишу ниже код, используя AFNetworking для проверки поступления и это дает мне статус = 210002 Хотя это дает мне статус = 0 в NSMutableURLRequestВ приложении квитанция о покупке проверка для возобновления авто с использованием AFNetworking Objective-C

, пожалуйста, помогите меня получая раствор

NSString *strurl = @"https://sandbox.itunes.apple.com/verifyReceipt"; 
NSData *receipt = [NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]]; 

NSDictionary *[email protected]{ 
          @"receipt-data" : [receipt base64EncodedStringWithOptions:0], 
          @"password" : @"xxxxxxxxxxxxxxxxxxxx", 
         }; 


NSData *jsonParam = [NSJSONSerialization dataWithJSONObject:parameter options:NSJSONWritingPrettyPrinted error:nil]; 

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/plain"]; 
[manager POST:strurl parameters:jsonParam success:^(AFHTTPRequestOperation *oprtation, id responseObject){ 
    NSLog(@"JSON: %@", responseObject); 

}failure:^(AFHTTPRequestOperation *operation, NSError *error){ 
    NSLog(@"Error: %@", error); 

}]; 

Спасибо

ответ

0

Вот код проверки Квитанции, который я использую в моем приложении, но у меня есть реализация в стриже.

Я также использую NSMutableURLRequest для вызова веб-службы на ITunes Server.

func verifyPaymentReceipt(){ 

    let mainBundle = NSBundle.mainBundle() as NSBundle; 
    let receiptUrl = mainBundle.appStoreReceiptURL; 
    let isPresent = receiptUrl?.checkResourceIsReachableAndReturnError(NSErrorPointer()); 

    if(isPresent == true){ 

     let data = NSData(contentsOfURL: receiptUrl!); 

     // Create the JSON object that describes the request 

     let requestContents = NSMutableDictionary(); 
     //   let encodeddata = data!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions()); 
     let encodeddata = data!.base64EncodedString(); 

     print("encodeddata = \(encodeddata)"); 

     requestContents.setObject(encodeddata, forKey: "receipt-data"); 
     requestContents.setObject("xxxxxxxxxxxxxxxxxxxxxxx", forKey: "password"); 
     var requestData : NSData? 
     do{ 
      requestData = try NSJSONSerialization.dataWithJSONObject(requestContents, options: NSJSONWritingOptions()); 
     }catch{ 
      NSLog("Error in json data creation at verifyPaymentReceipt"); 
     } 

     let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSString 
     let file = "\(documentsPath)/requestData" 

     if(NSFileManager.defaultManager().createFileAtPath(file, contents: data, attributes: nil)){ 
      NSLog("File %@ ",file); 
     } 
     else{ 
      NSLog("error File %@ ",file); 
     } 



     if(requestData != nil){ 

      let strRequestData = NSString(data: requestData!, encoding: NSUTF8StringEncoding); 
      print(" strRequestData = \(strRequestData)"); 
      // Create a POST request with the receipt data. 

      let storeURL = NSURL(string: "https://sandbox.itunes.apple.com/verifyReceipt"); 
      let storeRequest = NSMutableURLRequest(URL: storeURL!); 
      storeRequest.HTTPMethod = "POST"; 
      storeRequest.HTTPBody = requestData; 

      // Make a connection to the iTunes Store on a background queue. 

      let queue = NSOperationQueue(); 
      NSURLConnection.sendAsynchronousRequest(storeRequest, queue: queue, completionHandler: { (response : NSURLResponse?, data : NSData?, error : NSError?) -> Void in 

       if(error != nil){ 
        //Handle Error 
       } 
       else{ 
        let d = NSString(data: data!, encoding: NSUTF8StringEncoding); 
        NSLog("DATA:%@", d!); 

        var jsonResponse: NSMutableDictionary? 
        do{ 
         jsonResponse = try NSJSONSerialization.JSONObjectWithData(data!, 
          options: NSJSONReadingOptions.AllowFragments) as? NSMutableDictionary; 
         print(jsonResponse); 

        }catch{ 
         NSLog("Parsing issue : verifyPaymentReceipt"); 
        } 

        if(jsonResponse != nil){ 

         let expirationDate: NSDate? = self.expirationDateFromResponse(jsonResponse!); 
         NSLog("Expiration Date: %@", expirationDate!); 

        } 
       } 
      }); 

     } 

    } 

} 

As you mention that your code works fine with NSMutableURLRequest but it returns 21002 with AFNetworking. 

21002 - Данные в свойстве квитанций были искажены или отсутствуют.

Это означает, что ваши данные квитанции квитанции неверны при использовании AFNetworking. Поэтому я думаю, что это вопрос кодирования с AFNetworking.

В iOS 7 Apple представила новые методы base64 в NSData, которые делают ненужным использование библиотеки декодирования сторонней базы 64, но я все же предлагаю вам попробовать использовать кодировку Base64 для кодирования получения. Надеюсь, это решит вашу проблему с AFNetworkig. Поскольку я также сталкиваюсь с той же проблемой 21002, когда я проверяю получение со стороны сервера, и эта библиотека кодирования работает в этом случае. Не знаю, как, но он решил мою проблему на стороне сервера для получения подтверждения валидации. Надеюсь, это сработает и для вас.

+0

В этом случае это работает и для меня –