iOS 內購服務器驗證

后臺服務器驗證

IOS 內支付有兩種模式:

1) 內置模式

2) 服務器模式

內置模式的流程可以簡單的總結為以下幾步:

1) app從app store 獲取產品信息

2) 用戶選擇需要購買的產品

3) app發送支付請求到app store

4) app store 處理支付請求,并返回transaction信息

5) app將購買的內容展示給用戶

服務器模式的主要流程如下所示:

1) app從服務器獲取產品標識列表

2) app從app store 獲取產品信息

3) 用戶選擇需要購買的產品

4) app 發送 支付請求到app store

5) app store 處理支付請求,返回transaction信息

6) app 將transaction receipt 發送到服務器

7) 服務器收到收據后發送到app stroe驗證收據的有效性

8) app store 返回收據的驗證結果

9) 根據app store 返回的結果決定用戶是否購買成功

上述兩種模式的不同之處主要在于:交易的收據驗證,內建模式沒有專門去驗證交易收據,而服務器模式會使用獨立的服務器去驗證交易收據。內建模式簡單快捷,但容易被破解。服務器模式流程相對復雜,但相對安全。

開發之初,蘋果方就很負責的告知:我們的服務器不穩定。真正開發之后,發現蘋果方果然是很負責的,不僅是不穩定,而且足夠慢。app store server驗證一個收據需要3-6s時間。

1.用戶能否忍受3-6s的等待時間

2.如果app store server 宕機,如何確保成功付費的用戶能夠得到正常服務。

對于第一個問題,我們有理由相信用戶完全無法忍受,所以采用異步驗證的方式,服務器收到客戶端的請求后,就將請求放到MCQ中去處理。

對于第二個問題,由于蘋果人員很負責人的告知:我們的服務器不穩定,所以不排除收據驗證超時的情況。對于驗證超時的收據,保存到數據庫中并標記為驗證超時,定時任務每隔一定的時間去app store驗證,確保能夠獲取收據的驗證結果。

在開發過程中,需要測試應用是否能夠正常的進行支付,但是又不能進行實際的支付,因此需要使用蘋果提供的sandbox Store測試。Store Kit不能在iOS模擬器中使用,測試Store必須在真機上進行。

在sandbox中驗證receipt

https://sandbox.itunes.apple.com/verifyReceipt

在生產環境中驗證receipt

https://buy.itunes.apple.com/verifyReceipt

在實際開發過程中,服務器端通過issandbox字段標識客戶端傳遞的收據是沙盒環境中的收據還是生產環境中的收據。在提交蘋果審核前,沙盒測試均無問題。提交蘋果審核后,被告知購買失敗,審核未通過。通過查詢日志發現,客戶端發送的交易收據為沙盒收據,但是issandbox字段卻標識為生產環境。

結論:蘋果審核app時,仍然在沙盒環境下測試。但是客戶端同事在app提交蘋果審核時,將issandbox字段寫死,設置為生產環境。這樣就導致沙盒收據發送到https://buy.itunes.apple.com/verifyReceipt去驗證。

那么如何自動的識別收據是否是sandbox receipt呢?

識別沙盒環境下收據的方法有兩種:

1.根據收據字段 environment = sandbox。

2.根據收據驗證接口返回的狀態碼

如果status=21007,則表示當前的收據為沙盒環境下收據, t進行驗證。

蘋果反饋的狀態碼;

21000App Store無法讀取你提供的JSON數據

21002 收據數據不符合格式

21003 收據無法被驗證

21004 你提供的共享密鑰和賬戶的共享密鑰不一致

21005 收據服務器當前不可用

21006 收據是有效的,但訂閱服務已經過期。當收到這個信息時,解碼后的收據信息也包含在返回內容中

21007 收據信息是測試用(sandbox),但卻被發送到產品環境中驗證

21008 收據信息是產品環境中使用,但卻被發送到測試環境中驗證

先生產驗證后測試驗證,可以避免來回切換接口的麻煩。測試驗證只要用你自己申請的測試appid的時候才會用到,用戶不會擁有測試appid,所以不會走到測試驗證這一步。即使生產驗證出錯,應該也不回返回21007狀態嗎。測試驗證通過的用戶名,和充值金額最好用數據庫記錄下來,方便公司資金核對。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,238評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,430評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,134評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,893評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,653評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,136評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,212評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,372評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,888評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,738評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,482評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,179評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,588評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,829評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,610評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,916評論 2 372

推薦閱讀更多精彩內容