应用内购买--验证
来源:互联网 发布:开源云服务器软件 编辑:程序博客网 时间:2024/05/16 11:57
这个,在SKPaymentTransactionStatePurchased完成之后
- 获取购买完成后的本地收据数据,以BASE64编码的字符串进行传输
- 将本地收据数据组装成JSON object,并返回 JSON data
- 用本地数据返回的收据数据创建一个POST 请求,根据请求返回的JSON data解析,是否需要重新验证
异步方式--apple
NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL]; NSData *receipt = [NSData dataWithContentsOfURL:receiptURL];NSError *error;NSDictionary *requestContents = @{@"receipt-data": [receipt base64EncodedStringWithOptions:0]};NSData *requestData = [NSJSONSerialization dataWithJSONObject:requestContents options:0 error:&error];if (!requestData){ NSLog(@"%@", error); /* ... Handle error ... */}else{ NSLog(@"%@", error);}NSURL *storeURL = [NSURL URLWithString:AppStore];NSMutableURLRequest *storeRequest = [NSMutableURLRequest requestWithURL:storeURL];[storeRequest setHTTPMethod:@"POST"];[storeRequest setHTTPBody:requestData];NSOperationQueue *queue = [[NSOperationQueue alloc] init];[NSURLConnection sendAsynchronousRequest:storeRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError){ if (connectionError) { NSLog(@"%@", error); /* ... Handle error ... */ } else { NSError *error; NSDictionary *jsonResponse = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; if (jsonResponse != nil) { NSString *status = [NSString stringWithFormat:@"%@", jsonResponse[@"status"]]; if ([status isEqualToString:@"21007"]) { //ddddddd } } }}
同步的的方式
NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL]; //交易完成后,会将凭据存放在该地址// NSData *receiptDataOnLocal = [NSData dataWithContentsOfURL:receiptURL]; // 从沙盒中获取到购买凭据 NSURL *url = [NSURL URLWithString:AppStore]; //对购买凭据进行验证 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0f]; request.HTTPMethod = @"POST"; NSString *encodeStr = [receiptDataOnLocal base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed]; NSString *payload = [NSString stringWithFormat:@"{\"receipt-data\" : \"%@\"}", encodeStr]; NSData *payloadData = [payload dataUsingEncoding:NSUTF8StringEncoding]; request.HTTPBody = payloadData; NSData *result = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; if (result == nil) { NSLog(@"验证失败"); } else { NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:result options:NSJSONReadingAllowFragments error:nil]; NSLog(@"%@", dict); if (dict != nil) { // bundle_id、application_version、product_id、transaction_id NSLog(@"验证成功"); NSLog(@"bundle_id:%@ , application_version:%@", dict[@"receipt"][@"bundle_id"], dict[@"receipt"][@"application_version"]); NSDictionary *dict1 = [dict[@"receipt"][@"in_app"] firstObject]; NSLog(@"product_id:%@ , transaction_id:%@", dict1[@"product_id"], dict1[@"transaction_id"]); } }
0 0
- 应用内购买--验证
- IAP-应用内购买
- 应用内购买 RMStore
- IOS应用内购买
- IOS应用内购买
- IOS应用内购买
- IOS 应用内购买
- InAppPurchase 应用内购买见解
- IAP-应用内购买流程
- 应用内购买最佳做法
- 【读书笔记】iOS-应用内购买
- 应用内购买(IAP)各类型在服务端的验证规则
- IAP-应用内购买(部分)
- IAP-应用内购买(部分)
- IOS 之 商业模式 应用内购买
- IAP-应用内购买(部分)
- ios 应用内购买 In-App Purchase
- iOS IAP应用内购买汇总
- jQuery -- 选择器
- Unsupported major.minor version 51.0(jdk版本错误)
- zookeeper递归删除znode节点java Demo
- linux 自己常用命令
- win7 32位 中VC6.0 visual C++6.0无法打开文件和 向工程中添加文件的解决办法
- 应用内购买--验证
- u-boot 环境变量参数设置
- XML接口实现
- 商品表的sql
- Windows上获取文件大小的几种方法及获取文件夹大小方法
- 长途旅行
- php中 mkdir和chmod创建目录文件夹权限
- mysql基础总结
- java整数等转二进制数函数