Bagaimana untuk Menyelesaikan Status Resit Tidak Sah Apabila Mengesahkan Pembelian Dalam Apl dalam iOS?

DDD
Lepaskan: 2024-10-17 20:21:02
asal
682 orang telah melayarinya

How to Resolve Invalid Receipt Status When Verifying In-App Purchases in iOS?

Mengesahkan Resit Pembelian Dalam Apl

Pembelian dalam apl menyediakan cara yang mudah untuk pengguna memperoleh kandungan atau ciri tambahan dalam apl anda. Untuk memastikan urus niaga adalah sah, mengesahkan resit dengan App Store adalah penting.

Masalah:

Seorang pembangun menghadapi kesukaran mengesahkan resit, secara konsisten menerima status tidak sah. Walaupun penyelesaian masalah yang meluas, isu ini berterusan.

Penyelesaian:

Untuk membantu, langkah berikut disyorkan:

  1. Sahkan Kaedah Penerimaan:

    <code class="objective-c">- (BOOL)verifyReceipt:(SKPaymentTransaction *)transaction {
        // Encode receipt data
        NSString *jsonObjectString = [self encode:(uint8_t *)transaction.transactionReceipt.bytes length:transaction.transactionReceipt.length];
    
        // Construct URL for validation
        NSString *completeString = [NSString stringWithFormat:@"http://url-for-your-php?receipt=%@", jsonObjectString];
        NSURL *urlForValidation = [NSURL URLWithString:completeString];
    
        // Create HTTP request
        NSMutableURLRequest *validationRequest = [[NSMutableURLRequest alloc] initWithURL:urlForValidation];
        [validationRequest setHTTPMethod:@"GET"];
    
        // Send request and receive response
        NSData *responseData = [NSURLConnection sendSynchronousRequest:validationRequest returningResponse:nil error:nil];
        [validationRequest release];
    
        // Parse response
        NSString *responseString = [[NSString alloc] initWithData:responseData encoding: NSUTF8StringEncoding];
        NSInteger response = [responseString integerValue];
        [responseString release];
    
        // Return verification result
        return (response == 0);
    }</code>
    Salin selepas log masuk
  2. Kaedah Pengekodan:

    <code class="objective-c">- (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];
    }</code>
    Salin selepas log masuk
  3. Pengesahan Sebelah Pelayan:

    <code class="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;</code>
    Salin selepas log masuk
  4. Kaedah Dalaman:

    <code class="objective-c">@interface YourStoreClass (Internal)
    - (BOOL)verifyReceipt:(SKPaymentTransaction *)transaction;
    - (NSString *)encode:(const uint8_t *)input length:(NSInteger)length;
    @end</code>
    Salin selepas log masuk
  5. Pertimbangan Tambahan:

    • Pertimbangkan penyiaran HTTP tak segerak kerana kemungkinan panjang permintaan dan masa pemprosesan.
    • Berikan maklum balas pengguna semasa pengesahan resit.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Status Resit Tidak Sah Apabila Mengesahkan Pembelian Dalam Apl dalam iOS?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan