Как интерпретировать ответ сервера для проверки запроса на покупку в приложении?

StackOverflow https://stackoverflow.com/questions/6826650

Вопрос

Я использую покупки в приложении в своем приложении. Я отправляю запрос на сервер для проверки квитанции о транзакции для приобретенного продукта, используя следующий метод:

-(void)sendingRequestForReceipt: (SKPaymentTransaction *)transaction{
    networkQueue = [ASINetworkQueue queue];
    [networkQueue retain];
    NSString *serverUrl = @"https://sandbox.itunes.apple.com/";
    NSString *receiptStr= [Base64Encoding base64EncodingForData:(transaction.transactionReceipt) WithLineLength:0];
NSString *str = [NSString stringWithFormat:@"%@verifyReceipt", serverUrl];
    NSURL *url = [NSURL URLWithString:[str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
    ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:url] autorelease];

    NSDictionary* data = [NSDictionary dictionaryWithObjectsAndKeys:receiptStr,@"receipt-data", nil];
[request appendPostData: [[data JSONRepresentation] dataUsingEncoding:NSUTF8StringEncoding]];
    [request setRequestMethod:@"POST"];
    [request setDelegate:self];
    [request setDidFinishSelector: @selector(gotReceiptResponse:)];


    [networkQueue addOperation: request];
    [networkQueue go];
}

После этого называется следующий метод Gotreceiptresponse:

- (void)gotReceiptResponse:(ASIHTTPRequest *)req{

    NSString *response=[req responseString];
NSDictionary *jsonResp = [response JSONValue];
    NSString *receiptValue = [jsonResp valueForKey:@"status"];
    int receiptCheck=[receiptValue intValue];
if( receiptCheck ==0){
        //mark item as purchased
        //show alert that item was purchased and will be downloaded
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle :@"In-App-Purchase:"
                                                         message:@"The instrumental was purchased successfully and will now be downloaded. "
                                                                 "Please do not close the app till download is complete"
                                                       delegate :self cancelButtonTitle:@"OK"otherButtonTitles:nil];
        [alert show];
        [alert release];
}
}

Значение, которое я получаю в ответ, например: U008BB U0095 U008F U00B1 U008E U00C20D { U00BE "RM U0082BC U00D2 U009F U00A8 U00E8 U00E8 U00A3 = U00C7 U00CA U00AD U00E8 U00A3 = U00C7 u009c u00bdfb ( u00ffn u00ae u00a1b u00b7 u00dd u00ce> u00cd u00ec <6, xcq " u00d6> u0092; u00ecy u00cb u009af) u00a5 u00eb u00cy u009. U00E8 U00E0 U00DAQ U00C1Z U00F7 U00C2 U00FF U009BFH- U00A4 U00CC U00F4 U00F7- U00C4 | U00AAX U00DE U00A6 U00E0 U00FBD U00AAX U0085 u00F u00AD U008 U008 U008 U008 U008 U008 U0085

u00e6a u00a2 u00edz u00bb u00e85 u00a2 u00e4 u0087 u00b2 u0096 u00d7 u00ad u00d0 u00ad u00d4 u00c5 u0099 u00dd u00e9 | u00d4 u00c5 u0099 u00dd u00e9 U00ACF U00C6 U008F U00D5 U00EF U00B0 U00FD U0090 U00AE U0091R U008F U00FE U00ED U00E3 &}. 8/T $ U00A0 U00B4T U00E4 U00F3M U00F9`?

и в jsonresp значение ноль. Так что просто хотел знать, как я могу кодировать эту строку Unicode. Чтобы я мог понять, какой ответ я получаю, а также причину нулевой ценности в JSonResp.

Это было полезно?

Решение

Использовать [req responseData] Чтобы получить необработанные данные кодировать данные вручную, используя:

NSString *resultString = [[NSString alloc] initWithData:[req responseData] encoding:NSUTF8StringEncoding];
//This is a simple validation. It's only checking if there is a '"status":0' string in the resultString.
if([resultString rangeOfString:@"\"status\":0"].location != NSNotFound)
  resultStatus = 0;

[resultString release];
return (resultStatus == 0);

Если вам нужна дополнительная информация о проверке, вы должны использовать анализатор JSON и проанализировать результаты.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top