iOS内购之二次验证

开篇:关于iOS内购整体流程网上能找到很多。我抽丝剥茧,着重说一下二次验证及收据回传的数据问题。

二次验证

关于二次验证,其实有两种做法,第一种是在app端验证,第二种也是安全防盗的一种,在服务端进行验证。
具体区别不一一表述,可以查看下面的链接。
iOS二次验证两种做法的区别
我要着重说的是二次验证的实际做法和收到的数据是什么。

一、二次验证具体如何验证

在这分为测试地址和实际上线地址
测试:https://sandbox.itunes.apple.com/verifyReceipt
已上线Appstore:https://buy.itunes.apple.com/verifyReceipt
在沙箱测试时,我们使用测试地址。

// 从沙盒中获取交易凭证(收据)
NSURL *receiptUrl = [[NSBundle mainBundle] appStoreReceiptURL];
NSData *receiptData = [NSData dataWithContentsOfURL:receiptUrl];
    
// 转化为base64字符串
NSString *receiptString = [receiptData base64EncodedStringWithOptions:0];

为了方便拿到数据,我们在app端上进行验证,注意⚠️实际开发中都是在服务端进行验证的。

// 拼接请求数据
NSString *bodyString = [NSString stringWithFormat:@"{\"receipt-data\" : \"%@\"}", receiptString];
NSData *bodyData = [bodyString dataUsingEncoding:NSUTF8StringEncoding];

// 创建请求到苹果官方进行购买验证
NSURL *url = [NSURL URLWithString:verifyReceipt_url];
NSMutableURLRequest *requestM = [NSMutableURLRequest requestWithURL:url];
requestM.HTTPBody = bodyData;
requestM.HTTPMethod = @"POST";

// 创建连接并发送同步请求
NSError *error = nil;
NSData *responseData = [NSURLConnection sendSynchronousRequest:requestM returningResponse:nil error:&error];

if (error) {
    NSLog(@"验证购买过程中发生错误,错误信息:%@",error.localizedDescription);
    return;
}

NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingAllowFragments error:nil];

二、收据回传得到的数据分析

上文得到的dic就是我们通过收据得到的所有数据
在这里有个坑,我相信有很多同学都踩过。
就是你支付成功了,但是在这个数组里却找不到你想要的数据。
我们可以看下面一张图,然后再分析分析。


内购类型.png

可以看到有四种类型,但是具体到我们项目中我们该如何选择和操作呢。

1.消耗型:比如我们游戏里的金币,6元600个金币,你使用完了就失效了。比如现在各大视频app推出的电影购买,6元买完一张影片之后,你如果想买下一张影片就必须再次购买。
2.非消耗型:比如某app推出永久会员,购买一次终身使用,就是非消耗型。再比如游戏过关时app的某关,你一直过不去,花钱购买过去了,等你下次再打开app时,他这关默认是已经通过的。
3.自动续订型:具体可以看爱奇艺视频开通会员(腾讯app也类似),里面就有一个自动续订会员。也就是到期了,它会自动从你的苹果账号上扣钱。这个慎点慎点,他们这样搞很坑钱。
4.非自动续订型:这个就是1个月优酷会员啦,或者3个月季度会员啥的。有期限,到期时也不会自动扣钱。一般的都是选择这个,不然像爱奇艺的自动续订,用户不知情时,会被骂死,哈哈

说了这么多,来看看订单数据长啥样

{
    product_id = "lalalalahahaha",//商品的标识,和产品定,随便写但是不能重复
    quantity = "1",//购买商品的数量
    transaction_id = "1000000357637984",//交易的标识
    purchase_date_ms = "1512613065000",//购买时间毫秒
    original_purchase_date_pst = "2017-12-06 18:17:45 America/Los_Angeles",//购买时间,太平洋标准时间
    purchase_date_pst = "2017-12-06 18:17:45 America/Los_Angeles",//太平洋标准时间
    original_purchase_date_ms = "1512613065000",//毫秒
    is_trial_period = "false",
    original_purchase_date = "2017-12-07 02:17:45 Etc/GMT",//原始购买时间
    original_transaction_id = "1000000357637984",//原始交易ID
    purchase_date = "2017-12-07 02:17:45 Etc/GMT"//购买时间
},

我们得到的字典里如果有多条数据,就会有一个数组in_app。
如果只有一条数据,或者没有数据,就没有in_app。
in_app里的数据格式就如上文代码所书。

所有的订单信息都在in_app里。所以我们要找到最新成功的那条数据,就需要在这里面去找。

注:
1.消耗性的和其他的有区别,消耗性的下一次购买的,会覆盖上一次购买的,所以只有一条消耗性的订单信息,当然也是最新的。
2.其他三种每次购买,都会生成新的订单信息,不会覆盖原来的,所以你购买多少次,上面就会显示多少条。

三、内购二次验证实际开发中具体做法

1.我们把收据信息传给服务器
2.服务器自行处理所有的订单信息,返回一个成功与失败的状态给我们。所有的操作,后台都已经记录在案了,我们不再需要管。我们只需要知道,此次购买是否成功就行了。

结语:内购其实很简单,只是有时候不经意就会入坑,在此特意记录下困惑的地方,帮助自己深刻记忆,也希望帮助到其他遇到该问题的童鞋。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354