Heim  >  Artikel  >  Backend-Entwicklung  >  Fehlerbehebung bei der In-App-Kaufbelegvalidierung: Wie gehe ich mit Antworten mit „Ungültigem Status“ um?

Fehlerbehebung bei der In-App-Kaufbelegvalidierung: Wie gehe ich mit Antworten mit „Ungültigem Status“ um?

Linda Hamilton
Linda HamiltonOriginal
2024-10-17 20:13:03306Durchsuche

Troubleshooting In-App Purchase Receipt Validation: How to Handle

Belege für In-App-Käufe überprüfen

Die Validierung von In-App-Käufen ist entscheidend, um sicherzustellen, dass Benutzer legitime Einkäufe getätigt haben, und um ihnen Zugriff darauf zu gewähren Premium-Inhalte oder -Funktionalität. Trotz der Verfügbarkeit von Dokumentation kann es schwierig sein, eine effektive Belegvalidierung zu implementieren.

Ein Ansatz besteht darin, die Belegdaten an einen PHP-Server zu senden, der sie dann zur Überprüfung an den Apple App Store weiterleitet. Eine erfolgreiche Antwort bestätigt die Gültigkeit des Kaufs, sodass Sie mit der Aufzeichnung der Transaktion auf Ihrem Server fortfahren können.

Wenn Sie jedoch bei der Quittungsvalidierung auf Antworten mit „ungültigem Status“ stoßen, ist es wichtig, nach Tippfehlern zu suchen Dein Code. Der folgende Beispielcode bietet eine Lösung:

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

Zusätzlich kann der folgende PHP-Code auf Ihrem Server verwendet werden, um die Belegvalidierung durchzuführen und die Transaktion aufzuzeichnen:

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

Denken Sie daran, ihn zu ersetzen „call-your-http-post-here“ mit Ihrem bevorzugten HTTP-Post-Mechanismus. Durch die Implementierung dieses Codes und die Sicherstellung seiner Genauigkeit können Sie Quittungskäufe effektiv überprüfen und In-App-Transaktionen sicher verwalten.

Das obige ist der detaillierte Inhalt vonFehlerbehebung bei der In-App-Kaufbelegvalidierung: Wie gehe ich mit Antworten mit „Ungültigem Status“ um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn