iOS в статусе покупки приложения 21002, java.ленг.NumberFormatException
при проверке Apple IOS in-app purchase receipt with Apple server количество наших транзакций возвращается как:
{"status":21002,"exception":"java.lang.NumberFormatException"}
могу ли я узнать, в чем причина проблемы? Мы следуем руководству по покупке Apple In-App, i.e мы закодируем квитанцию возврата app store с базой 64 от клиента iOS, перед отправкой квитанции для проверки
Примечание: большая часть нашей транзакции прошла, есть около 10% транзакций с вышеуказанной ошибкой
3 ответов
несколько возможных причин:
кто-то пытается взломать вашу проверку квитанции IAP. Есть некоторые методы, которые вставляют фиктивные квитанции в надежде, что разработчик должным образом их не проверит. У взлома urus есть такое поведение.
ошибки во время тестирования приводят к тестовым квитанциям, идущим в верификатор производства.
Я видел эти ошибки довольно часто, но я просто не помню какой из этих двух вызывает это точное сообщение. Думаю, они оба знают. У меня еще не было жалоб клиентов после того, как я их увидел.
Если ваш объем достаточно низкий (к сожалению, мой), перейдите в iTunes Connect и посмотрите, есть ли какие-либо продажи, которые соответствуют ошибкам. Вы также можете взглянуть на данные квитанции, чтобы увидеть, если он выглядит подозрительно.
существует еще одна возможность, вы отправляете только pucharse_info вместо всего расшифрованного JSON (с singature и т. д.)
var receipt = Ti.Utils.base64encode(evt.receipt).text;
когда вы проверяете получение,возможно, вы можете попробовать следующий код:
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 ... */
}
}];