2013-03-15 44 views
8

Khi xác minh của Apple IOS nhận mua trong ứng dụng với máy chủ của Apple, một số trở lại giao dịch của chúng tôi như:iOS Trong App trạng thái mua 21.002, java.lang.NumberFormatException

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

Có thể tôi biết nguyên nhân là gì vấn đề? Chúng tôi đã thực hiện theo hướng dẫn mua hàng trong ứng dụng của Apple, tức là chúng tôi sẽ mã hóa biên lai trả lại cửa hàng ứng dụng với Base 64 từ iOS Client, trước khi gửi biên lai cho mục đích xác minh

Lưu ý: Hầu hết giao dịch của chúng tôi đã trải qua, có khoảng 10% các giao dịch với các lỗi trên

Trả lời

8

Một vài nguyên nhân có thể:

  • Ai đó cố gắng để hack xác minh nhận IAP của bạn. Có một số kỹ thuật chèn biên lai không có thật với hy vọng nhà phát triển không xác minh chính xác chúng. Urus hack có hành vi này.

  • Lỗi trong khi thử nghiệm dẫn đến biên lai thử nghiệm đến trình xác minh sản xuất.

Tôi đã nhìn thấy các lỗi này khá thường xuyên nhưng tôi không nhớ lại hai lỗi nào trong số này gây ra thông điệp chính xác này. Tôi nghĩ cả hai đều làm. Tôi chưa có khiếu nại của khách hàng sau khi nhìn thấy chúng.

Nếu âm lượng của bạn đủ thấp (không may là của tôi), hãy truy cập iTunes Connect và xem liệu có bất kỳ bán hàng nào khớp với lỗi hay không. Bạn cũng có thể xem dữ liệu biên lai để xem liệu có vẻ đáng ngờ không.

0

có một posibility khác, bạn chỉ gửi pucharse_info thay vì toàn bộ giải mã JSON (với singature, vv)

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

khi bạn xác minh việc tiếp nhận, có lẽ bạn có thể thử đoạn mã sau:

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 ... */ 
    } 
}]; 

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

Các vấn đề liên quan