驗證應用程式內購買收據
應用程式內購買驗證對於確保用戶進行合法購買並授予他們存取權限至關重要優質內容或功能。儘管有文檔,但實施有效的收據驗證可能具有挑戰性。
一種方法是將收據資料傳送到 PHP 伺服器,然後將其轉送到 Apple App Store 進行驗證。成功的回應確認了購買的有效性,讓您可以繼續在伺服器上記錄交易。
但是,如果您在收據驗證期間遇到「無效狀態」回應,則必須檢查是否有任何拼字錯誤您的程式碼。以下範例程式碼提供了解決方案:
- (BOOL)verifyReceipt:(SKPaymentTransaction *)transaction { NSString *jsonObjectString = [self encode:(uint8_t *)transaction.transactionReceipt.bytes length:transaction.transactionReceipt.length]; NSString *completeString = [NSString stringWithFormat:@"http://url-for-your-php?receipt=%@", jsonObjectString]; NSURL *urlForValidation = [NSURL URLWithString:completeString]; NSMutableURLRequest *validationRequest = [[NSMutableURLRequest alloc] initWithURL:urlForValidation]; [validationRequest setHTTPMethod:@"GET"]; NSData *responseData = [NSURLConnection sendSynchronousRequest:validationRequest returningResponse:nil error:nil]; [validationRequest release]; NSString *responseString = [[NSString alloc] initWithData:responseData encoding: NSUTF8StringEncoding]; NSInteger response = [responseString integerValue]; [responseString release]; return (response == 0); } - (NSString *)encode:(const uint8_t *)input length:(NSInteger)length { static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; NSMutableData *data = [NSMutableData dataWithLength:((length + 2) / 3) * 4]; uint8_t *output = (uint8_t *)data.mutableBytes; for (NSInteger i = 0; i < length; i += 3) { NSInteger value = 0; for (NSInteger j = i; j < (i + 3); j++) { value <<= 8; if (j < length) { value |= (0xFF & input[j]); } } NSInteger index = (i / 3) * 4; output[index + 0] = table[(value >> 18) & 0x3F]; output[index + 1] = table[(value >> 12) & 0x3F]; output[index + 2] = (i + 1) < length ? table[(value >> 6) & 0x3F] : '='; output[index + 3] = (i + 2) < length ? table[(value >> 0) & 0x3F] : '='; } return [[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding] autorelease]; }
此外,可以在您的伺服器上使用以下PHP 程式碼來處理收據驗證並記錄交易:
$receipt = json_encode(array("receipt-data" => $_GET["receipt"])); // NOTE: use "buy" vs "sandbox" in production. $url = "https://sandbox.itunes.apple.com/verifyReceipt"; $response_json = call-your-http-post-here($url, $receipt); $response = json_decode($response_json); // Save the data here! echo $response->status;
記住替換使用您首選的HTTP post 機制「call-your-http-post-here」。透過實施此代碼並確保其準確性,您可以有效地驗證收據購買並自信地管理應用程式內交易。
以上是應用程式內購收據驗證故障排除:如何處理「無效狀態」回應?的詳細內容。更多資訊請關注PHP中文網其他相關文章!