iOS 客户端rceipt验证代码

来源:互联网 发布:工资计算公式软件 编辑:程序博客网 时间:2024/06/06 02:37
一般都是在服务器端做验证,验证成功后,给用户对应商品
</pre><pre name="code" class="objc">.h中: -(BOOL)putStringToItunes:(NSData*)iapData;   .m中:   #import "NSData+Base64.h" #import "NSString+SBJSON.h" #import "JSON.h"   -(BOOL)putStringToItunes:(NSData*)iapData{//用户购成功的transactionReceipt       NSString*encodingStr = [iapData base64EncodedString];       NSString *URL=@"https://sandbox.itunes.apple.com/verifyReceipt";     //https://buy.itunes.apple.com/verifyReceipt     NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];// autorelease];     [request setURL:[NSURL URLWithString:URL]];     [request setHTTPMethod:@"POST"];     //设置contentType     [request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];     //设置Content-Length     [request setValue:[NSString stringWithFormat:@"%d", [encodingStr length]] forHTTPHeaderField:@"Content-Length"];         NSDictionary* body = [NSDictionary dictionaryWithObjectsAndKeys:encodingStr, @"receipt-data", nil];     SBJsonWriter *writer = [SBJsonWriter new];     [request setHTTPBody:[[writer stringWithObject:body] dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]];     NSHTTPURLResponse *urlResponse=nil;     NSError *errorr=nil;     NSData *receivedData = [NSURLConnection sendSynchronousRequest:request                                                  returningResponse:&urlResponse                                                              error:&errorr];       //解析     NSString *results=[[NSString alloc]initWithBytes:[receivedData bytes] length:[receivedData length] encoding:NSUTF8StringEncoding];     CCLOG(@"-Himi-  %@",results);     NSDictionary*dic = [results JSONValue];     if([[dic objectForKey:@"status"] intValue]==0){//注意,status=@"0" 是验证收据成功         return true;     }     return false; } - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions//交易结果 {     for (SKPaymentTransaction *transaction in transactions)     {         switch (transaction.transactionState)         {             case SKPaymentTransactionStatePurchased://交易完成                  if([self putStringToItunes:transaction.transactionReceipt]){                      //这里给用户添加钱阿,装备阿什么的                  }                    break;              ......代码省略          }      } } 


或者

#define ITMS_SANDBOX_VERIFY_RECEIPT_URL     @"https://sandbox.itunes.apple.com/verifyReceipt"
//直接向苹果的服务器验证- (void)verifyReceiptByReceipt:(NSString *)receipt Password:(NSString *)password{    NSString *payload = [NSString stringWithFormat:@"{\"receipt-data\" : \"%@\" , \"password\" : \"%@\"}",receipt, password];    NSLog(@"payload:%@",payload);        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:%@", dict);    NSLog(@"done");}



0 0