Maison  >  Article  >  développement back-end  >  Comment valider les reçus d'achat intégrés dans iOS ?

Comment valider les reçus d'achat intégrés dans iOS ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-17 20:20:02506parcourir

How to Validate In-App Purchase Receipts in iOS?

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

La validation des reçus d'achat dans l'application est une étape cruciale pour garantir l'authenticité et la validité des transactions effectuées via votre application. Cet article vise à fournir des conseils aux développeurs ayant des difficultés avec la validation des reçus en partageant un exemple de code complet qui a été mis en œuvre avec succès.

Mise en œuvre du code

Pour vérifier le reçu, suivez ces étapes :

  1. Définissez la méthode verifyReceipt comme indiqué ci-dessous :
<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 with encoded receipt
    NSString *completeString = [NSString stringWithFormat:@"http://url-for-your-php?receipt=%@", jsonObjectString];
    NSURL *urlForValidation = [NSURL URLWithString:completeString];
    
    // Create request with HTTP GET method
    NSMutableURLRequest *validationRequest = [[NSMutableURLRequest alloc] initWithURL:urlForValidation];
    [validationRequest setHTTPMethod:@"GET"];
    
    // Send request synchronously
    NSData *responseData = [NSURLConnection sendSynchronousRequest:validationRequest returningResponse:nil error:nil];
    
    // Parse server response
    NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
    NSInteger response = [responseString integerValue];
    
    return (response == 0);
}</code>
  1. Implémentez la méthode d'encodage pour encoder les données du reçu en Base64 :
<code class="objective-c">- (NSString *)encode:(const uint8_t *)input length:(NSInteger)length {
    // Define encoding table
    static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    
    // Create mutable data buffer
    NSMutableData *data = [NSMutableData dataWithLength:((length + 2) / 3) * 4];
    uint8_t *output = (uint8_t *)data.mutableBytes;
    
    // Encode data in loop
    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]);
            }
        }
        
        // Add encoded bytes to output
        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>
  1. Appelez la méthode verifyReceipt à partir de votre méthode déléguée SKPaymentTransactionObserver.
  2. Côté serveur, utilisez PHP pour gérer la vérification du reçu :
<code class="php"><?php

// Fetch receipt data from request parameter
$receipt = json_encode(array("receipt-data" => $_GET["receipt"]));

// Set URL for receipt verification
$url = "https://sandbox.itunes.apple.com/verifyReceipt";

// Send POST request with receipt data
$response_json = call-your-http-post-here($url, $receipt);

// Decode JSON response
$response = json_decode($response_json);

// Perform receipt verification and save data accordingly
echo $response->status;

?></code>

Considérations supplémentaires

  • Assurez-vous d'utiliser l'URL correcte pour la vérification des reçus, en fonction de l'environnement (bac à sable ou production).
  • Faites attention à Limitez la longueur des URL et envisagez la gestion asynchrone des requêtes HTTP pour les reçus volumineux.
  • Pour plus de sécurité, envisagez d'utiliser la validation de certificat côté serveur.

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