2013-03-15 13 views
8

Podczas weryfikacji Apple iOS dowód zakupu w aplikacji z serwerem Apple szereg powrocie transakcji jako:iOS w App zakupu statusu 21002, java.lang.NumberFormatException

{"status":21002,"exception":"java.lang.NumberFormatException"} 

mogę wiedzieć, co jest przyczyną problem? Postępujemy zgodnie z instrukcjami zakupu w aplikacji Apple, tzn. Zakodujemy potwierdzenie odbioru sklepu z aplikacją Base 64 od klienta iOS, przed wysłaniem potwierdzenia w celu weryfikacji

Uwaga: Większość transakcji została zrealizowana, około 10% transakcji z powyższym błędem

Odpowiedz

8

Kilka możliwych przyczyn:

  • ktoś próbuje włamać się weryfikację odbioru IAP. Istnieją pewne techniki wprowadzania fałszywych rachunków w nadziei, że deweloper ich nie weryfikuje. Hack Urusa ma takie zachowanie.

  • Błędy podczas testowania prowadzą do paragonów testowych przesyłanych do weryfikatora produkcji.

Widziałem te błędy dość często, ale po prostu nie pamiętam, który z tych dwóch powoduje tę dokładną wiadomość. Myślę, że oboje to robią. Nie mam jeszcze skargi od klienta po ich obejrzeniu.

Jeśli twój poziom głośności jest wystarczająco niski (niestety mój jest), wejdź do iTunes Connect i zobacz, czy są jakieś wyprzedaże, które pasują do błędów. Możesz również sprawdzić dane pokwitowania, aby sprawdzić, czy wygląda podejrzanie.

0

jest jedna inna możliwość spotkania, wysyłać tylko pucharse_info zamiast całego odszyfrowanego JSON (z singature itp)

var receipt = Ti.Utils.base64encode(evt.receipt).text; 
0

po zweryfikowaniu odbioru, może można spróbować następujący kod:

NSData *receipt; // Sent to the server by the device 

// Create the JSON object that describes the request 
NSError *error; 
NSDictionary *requestContents = @{ 
    @"receipt-data": [receipt base64EncodedStringWithOptions:0] 
}; 
NSData *requestData = [NSJSONSerialization dataWithJSONObject:requestContents 
                 options:0 
                 error:&error]; 

if (!requestData) { /* ... Handle error ... */ } 

// Create a POST request with the receipt data. 
NSURL *storeURL = [NSURL URLWithString:@"https://buy.itunes.apple.com/verifyReceipt"]; 
NSMutableURLRequest *storeRequest = [NSMutableURLRequest requestWithURL:storeURL]; 
[storeRequest setHTTPMethod:@"POST"]; 
[storeRequest setHTTPBody:requestData]; 

// Make a connection to the iTunes Store on a background queue. 
NSOperationQueue *queue = [[NSOperationQueue alloc] init]; 
[NSURLConnection sendAsynchronousRequest:storeRequest queue:queue 
     completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { 
    if (connectionError) { 
     /* ... Handle error ... */ 
    } else { 
     NSError *error; 
     NSDictionary *jsonResponse = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; 
     if (!jsonResponse) { /* ... Handle error ...*/ } 
     /* ... Send a response back to the device ... */ 
    } 
}]; 

Dotyczy: https://developer.apple.com/library/content/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html#//apple_ref/doc/uid/TP40010573-CH104-SW1

Powiązane problemy