1

我在我的应用程序中使用应用程序购买。我正在向服务器发送一个请求,以使用以下方法验证所购买产品的交易收据:

-(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\u00adD\u00ec \u009c\u00bdFB(\u00ffN\u00ae\u00a1B\u00b7\u00dd\u00ce>\u00cd\u00ec<6,Xcq"\u00d6>\u0092;\u00ecY\u00cb\u009aF)\u00a5\u00eb\u00c3\u0091m\u \u00e8\u00e0\u00daQ\u00c1z\u00f7\u00c2\u00ff\u009bFH-\u00a4\u00cc\u00f4\u00f7-\u00c4|\u00aax\u00de\u00a6\u00e0\u00fbd\u00e8\u0085\u00e8\u0fJ5\u00e8\u0085\u

\u00e6a\u00a2\u00edz \u00bb\u00e85\u00a2\u00e4\u0087\u00b2\u0096\u00d7\u00ad\u00d0\u00ad\u00d4\u00c5\u0099\u00dd\u00e9|\u0000f&u0008o u00acf\u00c6\u008f\u00d5\u00ef\u00b0\u00fd\u0090\u00ae\u0091R\u008f\u00fe\u00ed\u00e3 &}.8/T$\u00a0\u00b4t\u00e4\u00f3M\u00f9`?

在 jsonResp 中,该值为空。所以只是想知道如何编码这个 unicode 字符串。这样我就可以理解我得到的响应是什么,以及 jsonResp 中空值的原因。

4

1 回答 1

0

用于[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 解析器并解析 resultString。

于 2011-07-26T09:10:07.783 回答