AppStore增加了验证内购(In App Purchasement)的方法, 就是苹果提供一个url地址, 开发测试用:
https://sandbox.itunes.apple.com/verifyReceipt
产品用:
https://buy.itunes.apple.com/verifyReceipt
当购买成功时, 会得到苹果返回的一个收据(receipt), 苹果推荐的方法是将收据发给开发者的server, 由server像上述地址post http消息, 进行验证, 苹果将结果返回.到底是真正的购买还是虚假的购买.
没有自己server的小伙伴可以用app进行发送, 代码如下.
#define ITMS_SANDBOX_VERIFY_RECEIPT_URL @"https://sandbox.itunes.apple.com/verifyReceipt" #pragma mark - VerifyFinishedTransaction -(void)verifyFinishedTransaction:(SKPaymentTransaction *)transaction{ if(transaction.transactionState == SKPaymentTransactionStatePurchased){ NSString *transactionIdentifier = transaction.transactionIdentifier; NSData *transactionReceipt = transaction.transactionReceipt; //将transactionIdentifer和加密后的transactionReceipt数据发送给server端 NSString* receipent = [NSString stringWithFormat:@"%s", transactionReceipt.bytes]; NSLog(@"receipent = %@", receipent); // 在app上做验证, 仅用于测试 NSString *payload = [NSString stringWithFormat:@"{\"receipt-data\" : \"%@\", \"password\" : \"%@\"}", receipent, transactionIdentifier]; NSData *payloadData = [payload dataUsingEncoding:NSUTF8StringEncoding]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:ITMS_SANDBOX_VERIFY_RECEIPT_URL]]; [request setHTTPMethod:@"POST"]; [request setHTTPBody:payloadData]; NSError* err; NSURLResponse *theResponse = nil; NSData *data=[NSURLConnection sendSynchronousRequest:request returningResponse:&theResponse error:&err]; NSError *jsonParsingError = nil; NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&jsonParsingError]; NSLog(@"%@", dict); NSLog(@"done"); } }