Maison  >  Article  >  développement back-end  >  Dépannage de la validation des reçus d'achat dans l'application : comment gérer les réponses « Statut invalide » ?

Dépannage de la validation des reçus d'achat dans l'application : comment gérer les réponses « Statut invalide » ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-17 20:13:03224parcourir

Troubleshooting In-App Purchase Receipt Validation: How to Handle

Vérification des reçus d'achat dans l'application

La validation des achats dans l'application est cruciale pour garantir que les utilisateurs ont effectué des achats légitimes et leur accorder l'accès à contenu ou fonctionnalité premium. Malgré la disponibilité de la documentation, il peut être difficile de mettre en œuvre une validation efficace des reçus.

Une approche consiste à envoyer les données du reçu à un serveur PHP, qui les transmet ensuite à l'App Store d'Apple pour vérification. Une réponse réussie confirme la validité de l'achat, vous permettant ainsi de procéder à l'enregistrement de la transaction sur votre serveur.

Cependant, si vous rencontrez des réponses « statut invalide » lors de la validation du reçu, il est essentiel de vérifier s'il y a des fautes de frappe dans votre code. L'exemple de code suivant fournit une solution :

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

De plus, le code PHP suivant peut être utilisé sur votre serveur pour gérer la validation des reçus et enregistrer la transaction :

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

N'oubliez pas de remplacer "appelez-votre-post-http-ici" avec votre mécanisme de publication HTTP préféré. En mettant en œuvre ce code et en garantissant son exactitude, vous pouvez vérifier efficacement les reçus d'achat et gérer les transactions dans l'application en toute confiance.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn