Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Menyelesaikan Masalah Pengesahan Resit Pembelian Dalam Apl: Bagaimana Mengendalikan Jawapan \"Status Tidak Sah\"?

Menyelesaikan Masalah Pengesahan Resit Pembelian Dalam Apl: Bagaimana Mengendalikan Jawapan \"Status Tidak Sah\"?

Linda Hamilton
Linda Hamiltonasal
2024-10-17 20:13:03224semak imbas

Troubleshooting In-App Purchase Receipt Validation: How to Handle

Mengesahkan Resit Pembelian Dalam Apl

Pengesahan pembelian dalam apl adalah penting untuk memastikan pengguna telah membuat pembelian yang sah dan memberi mereka akses kepada kandungan atau fungsi premium. Walaupun terdapat ketersediaan dokumentasi, ia boleh menjadi mencabar untuk melaksanakan pengesahan resit yang berkesan.

Satu pendekatan melibatkan penghantaran data resit ke pelayan PHP, yang kemudiannya memajukannya ke Apple App Store untuk pengesahan. Jawapan yang berjaya mengesahkan kesahihan pembelian, membolehkan anda meneruskan dengan merekodkan transaksi pada pelayan anda.

Walau bagaimanapun, jika anda menghadapi respons "status tidak sah" semasa pengesahan resit, adalah penting untuk menyemak sebarang kesilapan menaip dalam kod anda. Kod sampel berikut menyediakan penyelesaian:

- (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];
}

Selain itu, kod PHP berikut boleh digunakan pada pelayan anda untuk mengendalikan pengesahan resit dan merekodkan transaksi:

$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;

Ingat untuk menggantikan "call-your-http-post-here" dengan mekanisme pos HTTP pilihan anda. Dengan melaksanakan kod ini dan memastikan ketepatannya, anda boleh mengesahkan pembelian resit dengan berkesan dan mengurus transaksi dalam apl dengan yakin.

Atas ialah kandungan terperinci Menyelesaikan Masalah Pengesahan Resit Pembelian Dalam Apl: Bagaimana Mengendalikan Jawapan \"Status Tidak Sah\"?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn