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

Linda Hamilton
Lepaskan: 2024-10-17 20:13:03
asal
223 orang telah melayarinya

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];
}
Salin selepas log masuk

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;
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!