1

私のアプリケーションで購入したアプリケーションで使用しています。次gotReceiptResponseメソッドが呼び出され、この後領収書リクエストを確認しているアプリ内購入のサーバー応答を解釈するにはどうすればよいですか?

-(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]; 
} 

- (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 {\ u00b "rM \ u0082bc \ u00d2 \ u009f \ u00a8 \ u00e8 \ u00e8 \ u00a7 = \ u00c7 \ u00ca \ u00adD \ u00ec \ u009c \ u00bdFB (\ u00ff \ u00ae \ u00a1B \ u00b7 \ u00dd \ u00ce \ u00cd \ u00ec < 6、Xcq "\ u00d6 \ u0092 \ u00ecY \ u00cb \ u009aF)\ u00a5 \ u00eb \ u00c3 \ u0091m \ u00e6 \ u00e8 \ u00e0 \ u00daQ \ u00c1z \ u00f7 \ u00c2 \ u00ff \ u009bFH- \ u00a4 \ u00cc \ u00f4 \ u00f7- \ u00c4 | \ u00aax \ u00de \ u00a6 \ u00e0 \ u00fbd \ u00e8 \ u0085 \ u00ef \ u008fJ \ u00adb

\ u00e6a \ u00a2 \ u00edz \ u00bb \ u00e85 \ u00a2 \ u00e4 \ u007 \ u00b2 \ u00d0 \ u00d7 \ u00d0 \ u00ad \ u00d4 \ u00c5 \ u0099 \ u00dd \ u00e9 | \ u00c9 \ u00f8oGH \ u00f7 \ u00ec \ & \ u00acf \ u00c6 \ u008f \ u00d5 \ u00ef \ u00b0 \ u00fd \ u0090 \ u00ae \ u0091 \ u008f \ u00ed \ u00e3 &} .8/T $ \ u00a0 \ u00b4t \ u00e4 \ u00f3M \ u00f9`?

とjsonRespでは、値はnullです。 このユニコード文字列をどのようにエンコードできるかを知りたかっただけです。私が得ているレスポンスと、jsonRespのnull値の理由を理解することができます。

答えて

0

使用[req responseData]使用して、手動で生データにデータをエンコードを取得する:あなたはさらなる検証情報が必要な場合は、JSONパーサーを使用してresultStringを解析する必要が

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); 

を。

+0

あなたの答えはありがとう、ありがとうございますが、私はresultStringに値を取得していません。 [req responseData]のNullですが、私は200バイトのデータを取得しています – iPhoneDev

+1

OK ASIHTTPRequestが内部データで何をしているのか確認し、データから文字列を取り出す方法を確認してください – AlexVogel

+0

ASIHTTPRequestクラスに問題がありました。私はちょうどいくつかの変更を加え、そのうまくいっています。 – iPhoneDev

関連する問題