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:
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>
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>
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>
Interne Methoden:
<code class="objective-c">@interface YourStoreClass (Internal) - (BOOL)verifyReceipt:(SKPaymentTransaction *)transaction; - (NSString *)encode:(const uint8_t *)input length:(NSInteger)length; @end</code>
Zusätzliche Überlegungen:
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!