Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ein ungültiger Belegstatus bei der Überprüfung von In-App-Käufen in iOS behoben werden?

Wie kann ein ungültiger Belegstatus bei der Überprüfung von In-App-Käufen in iOS behoben werden?

DDD
DDDOriginal
2024-10-17 20:21:02593Durchsuche

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

In-App-Kaufbelege überprüfen

In-App-Käufe bieten Benutzern eine bequeme Möglichkeit, zusätzliche Inhalte oder Funktionen innerhalb Ihrer App zu erwerben. Um sicherzustellen, dass Transaktionen legitim sind, ist die Validierung von Belegen im App Store von entscheidender Bedeutung.

Problem:

Ein Entwickler hatte Schwierigkeiten bei der Verifizierung von Belegen und erhielt ständig einen ungültigen Status. Trotz umfangreicher Fehlerbehebung blieb das Problem weiterhin bestehen.

Lösung:

Zur Unterstützung werden die folgenden Schritte empfohlen:

  1. Empfangsmethode überprüfen:

    <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>
  2. Kodierungsmethode:

    <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>
  3. Serverseitige Validierung:

    <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>
  4. Interne Methoden:

    <code class="objective-c">@interface YourStoreClass (Internal)
    - (BOOL)verifyReceipt:(SKPaymentTransaction *)transaction;
    - (NSString *)encode:(const uint8_t *)input length:(NSInteger)length;
    @end</code>
  5. Zusätzliche Überlegungen:

    • Erwägen Sie asynchrone HTTP-Veröffentlichungen aufgrund der potenziellen Anforderungslänge und Verarbeitungszeit.
    • Geben Sie Benutzerfeedback während der Empfangsvalidierung.

Das obige ist der detaillierte Inhalt vonWie kann ein ungültiger Belegstatus bei der Überprüfung von In-App-Käufen in iOS behoben werden?. 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