iOS內(nèi)購(gòu)之二次驗(yàn)證

開(kāi)篇:關(guān)于iOS內(nèi)購(gòu)整體流程網(wǎng)上能找到很多。我抽絲剝繭羹蚣,著重說(shuō)一下二次驗(yàn)證及收據(jù)回傳的數(shù)據(jù)問(wèn)題。

二次驗(yàn)證

關(guān)于二次驗(yàn)證乱凿,其實(shí)有兩種做法顽素,第一種是在app端驗(yàn)證,第二種也是安全防盜的一種徒蟆,在服務(wù)端進(jìn)行驗(yàn)證胁出。
具體區(qū)別不一一表述,可以查看下面的鏈接段审。
iOS二次驗(yàn)證兩種做法的區(qū)別
我要著重說(shuō)的是二次驗(yàn)證的實(shí)際做法和收到的數(shù)據(jù)是什么全蝶。

一、二次驗(yàn)證具體如何驗(yàn)證

在這分為測(cè)試地址和實(shí)際上線地址
測(cè)試:https://sandbox.itunes.apple.com/verifyReceipt
已上線Appstore:https://buy.itunes.apple.com/verifyReceipt
在沙箱測(cè)試時(shí),我們使用測(cè)試地址裸诽。

// 從沙盒中獲取交易憑證(收據(jù))
NSURL *receiptUrl = [[NSBundle mainBundle] appStoreReceiptURL];
NSData *receiptData = [NSData dataWithContentsOfURL:receiptUrl];
    
// 轉(zhuǎn)化為base64字符串
NSString *receiptString = [receiptData base64EncodedStringWithOptions:0];

為了方便拿到數(shù)據(jù),我們?cè)赼pp端上進(jìn)行驗(yàn)證型凳,注意??實(shí)際開(kāi)發(fā)中都是在服務(wù)端進(jìn)行驗(yàn)證的丈冬。

// 拼接請(qǐng)求數(shù)據(jù)
NSString *bodyString = [NSString stringWithFormat:@"{\"receipt-data\" : \"%@\"}", receiptString];
NSData *bodyData = [bodyString dataUsingEncoding:NSUTF8StringEncoding];

// 創(chuàng)建請(qǐng)求到蘋果官方進(jìn)行購(gòu)買驗(yàn)證
NSURL *url = [NSURL URLWithString:verifyReceipt_url];
NSMutableURLRequest *requestM = [NSMutableURLRequest requestWithURL:url];
requestM.HTTPBody = bodyData;
requestM.HTTPMethod = @"POST";

// 創(chuàng)建連接并發(fā)送同步請(qǐng)求
NSError *error = nil;
NSData *responseData = [NSURLConnection sendSynchronousRequest:requestM returningResponse:nil error:&error];

if (error) {
    NSLog(@"驗(yàn)證購(gòu)買過(guò)程中發(fā)生錯(cuò)誤,錯(cuò)誤信息:%@",error.localizedDescription);
    return;
}

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

二甘畅、收據(jù)回傳得到的數(shù)據(jù)分析

上文得到的dic就是我們通過(guò)收據(jù)得到的所有數(shù)據(jù)
在這里有個(gè)坑埂蕊,我相信有很多同學(xué)都踩過(guò)。
就是你支付成功了疏唾,但是在這個(gè)數(shù)組里卻找不到你想要的數(shù)據(jù)蓄氧。
我們可以看下面一張圖,然后再分析分析槐脏。


內(nèi)購(gòu)類型.png

可以看到有四種類型喉童,但是具體到我們項(xiàng)目中我們?cè)撊绾芜x擇和操作呢。

1.消耗型:比如我們游戲里的金幣顿天,6元600個(gè)金幣堂氯,你使用完了就失效了。比如現(xiàn)在各大視頻app推出的電影購(gòu)買牌废,6元買完一張影片之后咽白,你如果想買下一張影片就必須再次購(gòu)買。
2.非消耗型:比如某app推出永久會(huì)員鸟缕,購(gòu)買一次終身使用晶框,就是非消耗型。再比如游戲過(guò)關(guān)時(shí)app的某關(guān)懂从,你一直過(guò)不去授段,花錢購(gòu)買過(guò)去了,等你下次再打開(kāi)app時(shí)番甩,他這關(guān)默認(rèn)是已經(jīng)通過(guò)的畴蒲。
3.自動(dòng)續(xù)訂型:具體可以看愛(ài)奇藝視頻開(kāi)通會(huì)員(騰訊app也類似),里面就有一個(gè)自動(dòng)續(xù)訂會(huì)員对室。也就是到期了模燥,它會(huì)自動(dòng)從你的蘋果賬號(hào)上扣錢。這個(gè)慎點(diǎn)慎點(diǎn)掩宜,他們這樣搞很坑錢蔫骂。
4.非自動(dòng)續(xù)訂型:這個(gè)就是1個(gè)月優(yōu)酷會(huì)員啦,或者3個(gè)月季度會(huì)員啥的牺汤。有期限辽旋,到期時(shí)也不會(huì)自動(dòng)扣錢。一般的都是選擇這個(gè),不然像愛(ài)奇藝的自動(dòng)續(xù)訂补胚,用戶不知情時(shí)码耐,會(huì)被罵死,哈哈

說(shuō)了這么多溶其,來(lái)看看訂單數(shù)據(jù)長(zhǎng)啥樣

{
    product_id = "lalalalahahaha",//商品的標(biāo)識(shí)骚腥,和產(chǎn)品定,隨便寫但是不能重復(fù)
    quantity = "1",//購(gòu)買商品的數(shù)量
    transaction_id = "1000000357637984",//交易的標(biāo)識(shí)
    purchase_date_ms = "1512613065000",//購(gòu)買時(shí)間毫秒
    original_purchase_date_pst = "2017-12-06 18:17:45 America/Los_Angeles",//購(gòu)買時(shí)間,太平洋標(biāo)準(zhǔn)時(shí)間
    purchase_date_pst = "2017-12-06 18:17:45 America/Los_Angeles",//太平洋標(biāo)準(zhǔn)時(shí)間
    original_purchase_date_ms = "1512613065000",//毫秒
    is_trial_period = "false",
    original_purchase_date = "2017-12-07 02:17:45 Etc/GMT",//原始購(gòu)買時(shí)間
    original_transaction_id = "1000000357637984",//原始交易ID
    purchase_date = "2017-12-07 02:17:45 Etc/GMT"http://購(gòu)買時(shí)間
},

我們得到的字典里如果有多條數(shù)據(jù)瓶逃,就會(huì)有一個(gè)數(shù)組in_app束铭。
如果只有一條數(shù)據(jù),或者沒(méi)有數(shù)據(jù)厢绝,就沒(méi)有in_app契沫。
in_app里的數(shù)據(jù)格式就如上文代碼所書。

所有的訂單信息都在in_app里昔汉。所以我們要找到最新成功的那條數(shù)據(jù)懈万,就需要在這里面去找。

注:
1.消耗性的和其他的有區(qū)別靶病,消耗性的下一次購(gòu)買的钞速,會(huì)覆蓋上一次購(gòu)買的,所以只有一條消耗性的訂單信息嫡秕,當(dāng)然也是最新的渴语。
2.其他三種每次購(gòu)買,都會(huì)生成新的訂單信息昆咽,不會(huì)覆蓋原來(lái)的驾凶,所以你購(gòu)買多少次,上面就會(huì)顯示多少條掷酗。

三调违、內(nèi)購(gòu)二次驗(yàn)證實(shí)際開(kāi)發(fā)中具體做法

1.我們把收據(jù)信息傳給服務(wù)器
2.服務(wù)器自行處理所有的訂單信息,返回一個(gè)成功與失敗的狀態(tài)給我們泻轰。所有的操作技肩,后臺(tái)都已經(jīng)記錄在案了,我們不再需要管浮声。我們只需要知道虚婿,此次購(gòu)買是否成功就行了。

結(jié)語(yǔ):內(nèi)購(gòu)其實(shí)很簡(jiǎn)單泳挥,只是有時(shí)候不經(jīng)意就會(huì)入坑然痊,在此特意記錄下困惑的地方,幫助自己深刻記憶屉符,也希望幫助到其他遇到該問(wèn)題的童鞋剧浸。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末锹引,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子唆香,更是在濱河造成了極大的恐慌嫌变,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件躬它,死亡現(xiàn)場(chǎng)離奇詭異腾啥,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)虑凛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門碑宴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)软啼,“玉大人桑谍,你說(shuō)我怎么就攤上這事』雠玻” “怎么了锣披?”我有些...
    開(kāi)封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)贿条。 經(jīng)常有香客問(wèn)我雹仿,道長(zhǎng),這世上最難降的妖魔是什么整以? 我笑而不...
    開(kāi)封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任胧辽,我火速辦了婚禮,結(jié)果婚禮上公黑,老公的妹妹穿的比我還像新娘邑商。我一直安慰自己,他們只是感情好凡蚜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布人断。 她就那樣靜靜地躺著,像睡著了一般朝蜘。 火紅的嫁衣襯著肌膚如雪恶迈。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天谱醇,我揣著相機(jī)與錄音暇仲,去河邊找鬼。 笑死副渴,一個(gè)胖子當(dāng)著我的面吹牛熔吗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播佳晶,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼桅狠,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起中跌,我...
    開(kāi)封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤咨堤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后漩符,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體一喘,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年嗜暴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凸克。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡闷沥,死狀恐怖萎战,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情舆逃,我是刑警寧澤蚂维,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站路狮,受9級(jí)特大地震影響虫啥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜奄妨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一涂籽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧砸抛,春花似錦评雌、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至箕般,卻和暖如春耐薯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背丝里。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工曲初, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人杯聚。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓臼婆,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親幌绍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子颁褂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353