2012-06-13 74 views
0

我目前正在嘗試使用服務器端驗證(在PHP中)使用AppStore驗證我的應用內購買回執。在應用程序購買服務器驗證

這裏是我的代碼:

// ViewController.m: 
NSString *receiptDataString = [[NSString alloc] initWithData:[transaction transactionReceipt] encoding:NSUTF8StringEncoding]; 
NSString *verificationDataString = [NSString stringWithFormat:@"receiptData=%@", receiptDataString]; 
NSData *verificationData = [NSData dataWithBytes:[verificationDataString UTF8String] length:[verificationDataString length]]; 

NSMutableURLRequest *verificationRequest = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://update.csundm.de/inapp/verifyReceipt.php"]]; 
[verificationRequest setHTTPMethod:@"POST"]; 
[verificationRequest setHTTPBody:verificationData]; 

NSData *verificationResultData = [NSURLConnection sendSynchronousRequest:verificationRequest returningResponse:nil error:nil]; 
NSString *verificationResultString = [[NSString alloc] initWithData:verificationResultData encoding:NSUTF8StringEncoding]; 
NSLog(@"%@", verificationResultString); 

******************************************************** 

// verifyReceipt.php: 
$receiptData = $_POST["receiptData"]; 
$receiptDataEncoded = base64_encode($receiptData); 
$receiptJSONString = json_encode(Array("receipt-data" => $receiptDataEncoded)); 

$contextData = array ( 
         "method" => "POST", 
         "header" => "Connection: close\r\n". 
         "Content-Length: ".strlen($receiptJSONString)."\r\n", 
         "content" => $receiptJSONString); 
$context = stream_context_create (array ('https' => $contextData)); 
$result = file_get_contents ("https://sandbox.itunes.apple.com/verifyReceipt", false, $context); 

$jsonResult = json_decode($result); 
if ($jsonResult -> {"status"} != 0) { 
    echo "Receipt invalid: ".$result; 
} 
else { 
    echo "Receipt valid"; 
} 

不幸的是我得到»收據無效:{‘地位’:21000}«任何人能想象的問題可能是什麼?我甚至無法在互聯網上找到有關此錯誤代碼的信息。我發現了一個錯誤說明,但他們表示這隻適用於不可續訂訂閱。

非常感謝,用親切的問候,朱利安

回答

0

從StoreKitGuide:

自動再生訂閱

Status Code | Description 
21000 | The App Store could not read the JSON object you provided. 
+0

正如我已經在我的問題中寫道:我知道它關於自動更新訂閱。但我想知道與他人的問題。爲什麼它不會讀取我的JSON對象?有人可以檢查我的代碼嗎? –

1

嘗試在iPhone /客戶端編碼它的狀態碼首先將編碼後的數據發送到php/server端。來自base64的對象c的輸出看起來像PHP端的chunk_split(base64_encode($receiptData), 65)的輸出,所以它稍有不同。

我也嘗試使用上面的代碼在服務器端對其進行編碼,但即使在標準化所有新行以使用\r並在編碼之前剝離任何尾隨空格,也似乎不起作用。必須是我遺漏的一些小細節,無論如何,只需將它編碼在iphone端,並省去麻煩。

相關問題