」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 應用程式內購買收據驗證故障排除:如何處理「無效狀態」回應?

應用程式內購買收據驗證故障排除:如何處理「無效狀態」回應?

發佈於2024-11-09
瀏覽:644

Troubleshooting In-App Purchase Receipt Validation: How to Handle \

驗證應用程式內購買收據

應用程式內購買驗證對於確保用戶進行合法購買並授予他們訪問權限至關重要優質內容或功能。儘管有文檔,但實施有效的收據驗證可能具有挑戰性。

一種方法是將收據資料傳送到 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 > 18) & 0x3F];
        output[index   1] =                    table[(value >> 12) & 0x3F];
        output[index   2] = (i   1) > 6)  & 0x3F] : '=';
        output[index   3] = (i   2) > 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;

請記得將「call-your-http-post-here」替換為您首選的 HTTP post 機制。透過實施此代碼並確保其準確性,您可以有效地驗證收據購買並自信地管理應用程式內交易。

版本聲明 本文轉載於:1729166962如有侵犯,請洽[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3