【關(guān)于內(nèi)購(gòu)的收據(jù)驗(yàn)證】

IOS 內(nèi)支付有兩種模式:

  1. 內(nèi)置模式
  2. 服務(wù)器模式
    內(nèi)置模式的流程可以簡(jiǎn)單的總結(jié)為以下幾步:
  3. app從app store 獲取產(chǎn)品信息
  4. 用戶選擇需要購(gòu)買(mǎi)的產(chǎn)品
  5. app發(fā)送支付請(qǐng)求到app store
  6. app store 處理支付請(qǐng)求误辑,并返回transaction信息
  7. app將購(gòu)買(mǎi)的內(nèi)容展示給用戶
    服務(wù)器模式的主要流程如下所示:
  8. app從服務(wù)器獲取產(chǎn)品標(biāo)識(shí)列表
  9. app從app store 獲取產(chǎn)品信息
  10. 用戶選擇需要購(gòu)買(mǎi)的產(chǎn)品
  11. app 發(fā)送 支付請(qǐng)求到app store
  12. app store 處理支付請(qǐng)求,返回transaction信息
  13. app 將transaction receipt 發(fā)送到服務(wù)器
  14. 服務(wù)器收到收據(jù)后發(fā)送到app stroe驗(yàn)證收據(jù)的有效性
  15. app store 返回收據(jù)的驗(yàn)證結(jié)果
  16. 根據(jù)app store 返回的結(jié)果決定用戶是否購(gòu)買(mǎi)成功
    上述兩種模式的不同之處主要在于:交易的收據(jù)驗(yàn)證歌逢,內(nèi)建模式?jīng)]有專門(mén)去驗(yàn)證交易收據(jù)巾钉,而服務(wù)器模式會(huì)使用獨(dú)立的服務(wù)器去驗(yàn)證交易收據(jù)。內(nèi)建模式簡(jiǎn)單快捷秘案,但容易被破解砰苍。服務(wù)器模式流程相對(duì)復(fù)雜,但相對(duì)安全阱高。
    開(kāi)發(fā)之初师骗,蘋(píng)果方就很負(fù)責(zé)的告知:我們的服務(wù)器不穩(wěn)定。真正開(kāi)發(fā)之后讨惩,發(fā)現(xiàn)蘋(píng)果方果然是很負(fù)責(zé)的,不僅是不穩(wěn)定寒屯,而且足夠慢荐捻。app store server驗(yàn)證一個(gè)收據(jù)需要3-6s時(shí)間黍少。
    1.用戶能否忍受3-6s的等待時(shí)間
    2.如果app store server 宕機(jī),如何確保成功付費(fèi)的用戶能夠得到正常服務(wù)处面。
    對(duì)于第一個(gè)問(wèn)題厂置,我們有理由相信用戶完全無(wú)法忍受,所以采用異步驗(yàn)證的方式魂角,服務(wù)器收到客戶端的請(qǐng)求后昵济,就將請(qǐng)求放到MCQ中去處理。
    對(duì)于第二個(gè)問(wèn)題野揪,由于蘋(píng)果人員很負(fù)責(zé)人的告知:我們的服務(wù)器不穩(wěn)定访忿,所以不排除收據(jù)驗(yàn)證超時(shí)的情況。對(duì)于驗(yàn)證超時(shí)的收據(jù)斯稳,保存到數(shù)據(jù)庫(kù)中并標(biāo)記為驗(yàn)證超時(shí)海铆,定時(shí)任務(wù)每隔一定的時(shí)間去app store驗(yàn)證,確保能夠獲取收據(jù)的驗(yàn)證結(jié)果挣惰。
    在開(kāi)發(fā)過(guò)程中卧斟,需要測(cè)試應(yīng)用是否能夠正常的進(jìn)行支付,但是又不能進(jìn)行實(shí)際的支付憎茂,因此需要使用蘋(píng)果提供的sandbox Store測(cè)試珍语。Store Kit不能在iOS模擬器中使用,測(cè)試Store必須在真機(jī)上進(jìn)行竖幔。
    在sandbox中驗(yàn)證receipt
    https://sandbox.itunes.apple.com/verifyReceipt
    在生產(chǎn)環(huán)境中驗(yàn)證receipt
    https://buy.itunes.apple.com/verifyReceipt
    在實(shí)際開(kāi)發(fā)過(guò)程中板乙,服務(wù)器端通過(guò)issandbox字段標(biāo)識(shí)客戶端傳遞的收據(jù)是沙盒環(huán)境中的收據(jù)還是生產(chǎn)環(huán)境中的收據(jù)。在提交蘋(píng)果審核前赏枚,沙盒測(cè)試均無(wú)問(wèn)題亡驰。提交蘋(píng)果審核后,被告知購(gòu)買(mǎi)失敗饿幅,審核未通過(guò)凡辱。通過(guò)查詢?nèi)罩景l(fā)現(xiàn),客戶端發(fā)送的交易收據(jù)為沙盒收據(jù)栗恩,但是issandbox字段卻標(biāo)識(shí)為生產(chǎn)環(huán)境透乾。
    結(jié)論:蘋(píng)果審核app時(shí),仍然在沙盒環(huán)境下測(cè)試磕秤。但是客戶端同事在app提交蘋(píng)果審核時(shí)乳乌,將issandbox字段寫(xiě)死,設(shè)置為生產(chǎn)環(huán)境市咆。這樣就導(dǎo)致沙盒收據(jù)發(fā)送到https://buy.itunes.apple.com/verifyReceipt去驗(yàn)證汉操。
    那么如何自動(dòng)的識(shí)別收據(jù)是否是sandbox receipt呢?
    識(shí)別沙盒環(huán)境下收據(jù)的方法有兩種:
    1.根據(jù)收據(jù)字段 environment = sandbox蒙兰。
    2.根據(jù)收據(jù)驗(yàn)證接口返回的狀態(tài)碼
    如果status=21007磷瘤,則表示當(dāng)前的收據(jù)為沙盒環(huán)境下收據(jù)芒篷, t進(jìn)行驗(yàn)證。
    蘋(píng)果反饋的狀態(tài)碼采缚;
    21000App Store無(wú)法讀取你提供的JSON數(shù)據(jù)21002 收據(jù)數(shù)據(jù)不符合格式21003 收據(jù)無(wú)法被驗(yàn)證21004 你提供的共享密鑰和賬戶的共享密鑰不一致21005 收據(jù)服務(wù)器當(dāng)前不可用21006 收據(jù)是有效的针炉,但訂閱服務(wù)已經(jīng)過(guò)期。當(dāng)收到這個(gè)信息時(shí)扳抽,解碼后的收據(jù)信息也包含在返回內(nèi)容中21007 收據(jù)信息是測(cè)試用(sandbox)篡帕,但卻被發(fā)送到產(chǎn)品環(huán)境中驗(yàn)證21008 收據(jù)信息是產(chǎn)品環(huán)境中使用,但卻被發(fā)送到測(cè)試環(huán)境中驗(yàn)證
    先生產(chǎn)驗(yàn)證后測(cè)試驗(yàn)證贸呢,可以避免來(lái)回切換接口的麻煩镰烧。測(cè)試驗(yàn)證只要用你自己申請(qǐng)的測(cè)試appid的時(shí)候才會(huì)用到,用戶不會(huì)擁有測(cè)試appid贮尉,所以不會(huì)走到測(cè)試驗(yàn)證這一步拌滋。即使生產(chǎn)驗(yàn)證出錯(cuò),應(yīng)該也不回返回21007狀態(tài)嗎猜谚。測(cè)試驗(yàn)證通過(guò)的用戶名败砂,和充值金額最好用數(shù)據(jù)庫(kù)記錄下來(lái),方便公司資金核對(duì)魏铅。
驗(yàn)證收據(jù)的過(guò)程:
1. 從transaction的transactionReceipt屬性中得到收據(jù)的數(shù)據(jù)昌犹,并以base64方式編碼。
2. 創(chuàng)建JSON對(duì)象览芳,字典格式斜姥,單鍵值對(duì),鍵名為"receipt-data"沧竟, 值為上一步編碼后的數(shù)據(jù)铸敏。
效果為:
{    
      "receipt-data"    : "(編碼后的數(shù)據(jù))"
}
3. 發(fā)送HTTP POST的請(qǐng)求,將數(shù)據(jù)發(fā)送到App Store悟泵,
其地址為:
[https://buy.itunes.apple.com/verfyReceipt](https://buy.itunes.apple.com/verfyReceipt)
4. App Store的返回值也是一個(gè)JSON格式的對(duì)象杈笔,包含兩個(gè)鍵值對(duì), 
status和receipt:
{    
     "status"    : 0,    
     "receipt"  : 
      {
       …
      }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末糕非,一起剝皮案震驚了整個(gè)濱河市蒙具,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌朽肥,老刑警劉巖禁筏,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異衡招,居然都是意外死亡篱昔,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)始腾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)旱爆,“玉大人舀射,你說(shuō)我怎么就攤上這事』陈祝” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵山林,是天一觀的道長(zhǎng)房待。 經(jīng)常有香客問(wèn)我,道長(zhǎng)驼抹,這世上最難降的妖魔是什么桑孩? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮框冀,結(jié)果婚禮上流椒,老公的妹妹穿的比我還像新娘。我一直安慰自己明也,他們只是感情好宣虾,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著温数,像睡著了一般绣硝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上撑刺,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天鹉胖,我揣著相機(jī)與錄音,去河邊找鬼够傍。 笑死甫菠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的冕屯。 我是一名探鬼主播寂诱,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼愕撰!你這毒婦竟也來(lái)了刹衫?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤搞挣,失蹤者是張志新(化名)和其女友劉穎带迟,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體囱桨,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仓犬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了舍肠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搀继。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡窘面,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出叽躯,到底是詐尸還是另有隱情财边,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布点骑,位于F島的核電站酣难,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏黑滴。R本人自食惡果不足惜憨募,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望袁辈。 院中可真熱鬧菜谣,春花似錦、人聲如沸晚缩。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)橡羞。三九已至眯停,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間卿泽,已是汗流浹背莺债。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留签夭,地道東北人齐邦。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像第租,于是被迫代替她去往敵國(guó)和親措拇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容