2013-08-28 62 views
2

我的工作在應用程序內購買驗證OSX上的應用程序,並得到一些問題〜服務器驗證在應用程序內購買收據OSX應用程序的

我的請求,這樣的代碼:

NSData* data = [NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]]; 
    NSString* base64Str = [data base64EncodedString]; 

    NSDictionary* dict = [NSDictionary dictionaryWithObject:base64Str forKey:@"receipt-data"]; 
    SBJSON *jsonParser = [[[SBJSON alloc] init] autorelease]; 
    NSString* jsonStr = [jsonParser stringWithObject:dict error:nil]; 
    postUrl = [NSURL URLWithString:@"https://sandbox.itunes.apple.com/verifyReceipt"]; 

    _verifyRequest = [[NSMutableURLRequest alloc] init]; 
    [_verifyRequest setTimeoutInterval:_sTimeoutInterval]; 
    [_verifyRequest setURL:postUrl]; 
    [_verifyRequest setHTTPBody:[jsonStr dataUsingEncoding:NSUTF8StringEncoding]]; 
    [_verifyRequest setHTTPMethod:ASCommon_HttpMethodPost]; 
    _verifyConnection = [[NSURLConnection alloc] initWithRequest:_verifyRequest delegate:self]; 
    [_verifyConnection start]; 

我得到的結果類似這

{ 
    exception = "java.lang.IllegalArgumentException"; 
    status = 21002; 
} 

我日誌jsonStr變量似乎沒有問題:

{"receipt-data":"..........................................................."} 

Apple doc here表示「檢索收據數據。 ......在OS X上,這是應用程序包內收據文件的全部內容。使用base64編碼編碼數據接收。」

難道我誤解了收據數據是整個的文件嗎?還是有毛病的內容與我的代碼?

+0

您是否找到解決方案?我有同樣的問題。 – VBK

+0

@VBK還沒有....我使用本地收據驗證只.... –

回答

1

我想我找到了解決辦法。編碼字符串類的基於64位。默認犯規刪除換行符你需要改變它來除去換行符更改此功能:

- (NSString *)base64EncodedString 
{ 
    size_t outputLength; 
    char *outputBuffer = 
     NewBase64Encode([self bytes], [self length], true, &outputLength); 

    NSString *result = 
     [[[NSString alloc] 
      initWithBytes:outputBuffer 
      length:outputLength 
      encoding:NSASCIIStringEncoding] 
     autorelease]; 
    free(outputBuffer); 
    return result; 
} 

- (NSString *)base64EncodedString : (BOOL)includeLineBreaks 
{ 
    size_t outputLength; 
    char *outputBuffer = 
     NewBase64Encode([self bytes], [self length], includeLineBreaks, &outputLength); 

    NSString *result = 
     [[[NSString alloc] 
      initWithBytes:outputBuffer 
      length:outputLength 
      encoding:NSASCIIStringEncoding] 
     autorelease]; 
    free(outputBuffer); 
    return result; 
} 

,並通過NO在參數。

相關問題