Mengesahkan Resit Pembelian Dalam Apl
Pembelian dalam apl menyediakan cara yang mudah untuk pengguna memperoleh kandungan atau ciri tambahan dalam apl anda. Untuk memastikan urus niaga adalah sah, mengesahkan resit dengan App Store adalah penting.
Masalah:
Seorang pembangun menghadapi kesukaran mengesahkan resit, secara konsisten menerima status tidak sah. Walaupun penyelesaian masalah yang meluas, isu ini berterusan.
Penyelesaian:
Untuk membantu, langkah berikut disyorkan:
Sahkan Kaedah Penerimaan:
<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>
Kaedah Pengekodan:
<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>
Pengesahan Sebelah Pelayan:
<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>
Kaedah Dalaman:
<code class="objective-c">@interface YourStoreClass (Internal) - (BOOL)verifyReceipt:(SKPaymentTransaction *)transaction; - (NSString *)encode:(const uint8_t *)input length:(NSInteger)length; @end</code>
Pertimbangan Tambahan:
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Status Resit Tidak Sah Apabila Mengesahkan Pembelian Dalam Apl dalam iOS?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!