应用内购买--验证

这个,在SKPaymentTransactionStatePurchased完成之后

  1. 获取购买完成后的本地收据数据,以BASE64编码的字符串进行传输
  2. 将本地收据数据组装成JSON object,并返回 JSON data
  3. 用本地数据返回的收据数据创建一个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"]);

        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值