偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

支付系統(tǒng)之應(yīng)用內(nèi)支付

開發(fā) 開發(fā)工具
目前國內(nèi)主要的應(yīng)用內(nèi)支付有 Google Pay, Apple Pay, 小米支付、華為支付等。 其中Apple Pay是典型的一個應(yīng)用內(nèi)支付,Android平臺的各種支付也一般是沿用Apple Pay的設(shè)計。

[[184413]]

為什么要IAP

應(yīng)用內(nèi)支付指使用手機(jī)操作系統(tǒng)自帶的支付功能來支持支付。目前國內(nèi)主要的應(yīng)用內(nèi)支付有 Google Pay, Apple Pay, 小米支付、華為支付等。 其中Apple Pay是典型的一個應(yīng)用內(nèi)支付,Android平臺的各種支付也一般是沿用Apple Pay的設(shè)計。 相對來說,應(yīng)用內(nèi)支付的用戶體驗,和微信支付、支付寶相比,還是有一定差距的,但是為什么要開發(fā)應(yīng)用內(nèi)支付呢? 這個和蘋果的AppStore的審核政策有關(guān)。 在官方的 App Store Review Guidelines中, 有如下幾條意見:

  • 1.2 Apps utilizing a system other than the In-App Purchase API (IAP) to purchase content, functionality, or services in an App will be rejected.(在 App 內(nèi)使用非 IAP 的系統(tǒng)來購買內(nèi)容、功能或服務(wù)將被拒絕。)
  • 11.3 Apps using IAP to purchase physical goods or goods and services used outside of the App will be rejected.(IAP 購買實(shí)物或者應(yīng)用外的商品或服務(wù)將會被拒絕)
  • 11.4 Apps that use IAP to purchase credits or other currencies must consume those credits within the App (通過 IAP 購買的積分或者其他貨幣必須只在 App 內(nèi)使用。)

這問題就來了,如果要購買的服務(wù),即在IOS內(nèi)使用,也在Android等IOS系統(tǒng)外使用, 那應(yīng)該是使用規(guī)則11.2或者規(guī)則11.3來執(zhí)行? 比如說視頻網(wǎng)站,視頻既可以在IOS上看,也可以在Android上看,那是否是需要通過IAP來購買? 蘋果公司在這一點(diǎn)上采取模糊的策略。 愛奇藝、騰訊視頻,在IOS上購買會員,只能用IAP支付。這就和蘋果公司的審核有關(guān)。

IAP支付流程

一般IAP支付的開發(fā)流程,首先需要一些準(zhǔn)備工作,包括:

  1. 在developer.apple.com上配置一個App ID,使用該ID生成和安裝相應(yīng)的Provisioning Profile文件。
  2. 登錄到iTunes Connect,使用App ID創(chuàng)建一個新的應(yīng)用,在該應(yīng)用中,創(chuàng)建應(yīng)用內(nèi)付費(fèi)項目,設(shè)置好價格和Product ID以及購買介紹和截圖。
  3. 添加一個用于在sandbox付費(fèi)的測試用戶,填寫相關(guān)的稅務(wù),銀行,聯(lián)系人信息。

完成這些準(zhǔn)備工作后,既可以進(jìn)入正式的開發(fā),開發(fā)代碼我們這里就不說了,流程如下:

  1. 用戶選擇要購買的內(nèi)容并點(diǎn)擊購買按鈕;
  2. 用戶通過App Store賬戶驗證
  3. 蘋果服務(wù)器驗證用戶請求
  4. 蘋果服務(wù)器從用戶帳號扣款
  5. 蘋果向用戶返回購買成功信息
  6. 軟件接收并顯示用戶購買信息

老司機(jī)都能看出來,這里有好多好多的坑。

用戶訪問AppStore時使用的是Apple的賬號,不是應(yīng)用系統(tǒng)的賬號。 也就是說,我們并不知道到底是誰在購買這個內(nèi)容。 比如在應(yīng)用中有兩個賬號A和B,用A賬號登錄后,上IAP買了東西,然后用B賬號來登錄,也上IAP買東西, 這兩次購買,用的是同一個Apple賬號。蘋果也不會告訴你,到底是哪個賬號付了錢。 賬號坑在單次購買中還沒什么問題,但碰到訂閱的情況,得好好處理下。在訂閱章節(jié)中會詳細(xì)說明。從上述流程可以看出,蘋果服務(wù)器都是和客戶端打交道的,這里面似乎沒有應(yīng)用服務(wù)器什么事情。 只有在客戶端接收到蘋果返回信息后,才可以把這個信息轉(zhuǎn)發(fā)給應(yīng)用服務(wù)器。 如果用戶一直不打開手機(jī)上的應(yīng)用,那應(yīng)用服務(wù)器就一直收不到通知了。 好在后來蘋果提供了一個驗證功能,應(yīng)用服務(wù)器可以把接收到的返回信息(加密后的字符串)發(fā)送給蘋果服務(wù)器來驗證和解密。

續(xù)費(fèi)周期的計算

IAP主要提供給周期性訂閱的音樂、電子書等內(nèi)容使用。 一般就按月來計算周期。蘋果是以自然月來算權(quán)益周期。比如在1月3號買了權(quán)益,到2月3號,這個權(quán)益就過期啦,需要在此之前完成續(xù)費(fèi)。 那問題來了,1月31號買的權(quán)益,到幾號過期?以自然月算,這個權(quán)益會在3月1日前到期,如果2月份,3月份都續(xù)費(fèi)了,到4月份,也是享受到4月30日了。

自動續(xù)費(fèi)

應(yīng)用開發(fā)應(yīng)該不需要關(guān)心續(xù)費(fèi)的細(xì)節(jié)。蘋果會做自動處理。注意這幾個時間點(diǎn):

  1. 在權(quán)益到期前10天,蘋果檢查用戶賬戶是否可以扣款,商品價格是否有變動。
  2. 在權(quán)益到期前24小時,蘋果開始扣款,如果失敗,會多次重試,直到成功。

問題來了,這個重試,會延續(xù)到用戶權(quán)益過期后一小段時間,蘋果沒有說這段時間該算是有權(quán)益還是沒有,但開發(fā)人員需要注意應(yīng)該如何處理。 蘋果的開發(fā)文檔上說明: 當(dāng)用戶完成續(xù)費(fèi)后,蘋果會發(fā)送通知到客戶端,用戶在打開應(yīng)用后,應(yīng)用可以將這個收據(jù)推送到商家的服務(wù)器上。看起來很美好,可是這里是自動續(xù)費(fèi)開發(fā)目前最大的坑。 從當(dāng)前收集到的數(shù)據(jù)來看,用戶續(xù)費(fèi)完成后,僅有20%的概率服務(wù)器端會收到通知!!這就意味著,商家服務(wù)器必須自己去查單,才能知道這個用戶是否已經(jīng)完成自動續(xù)費(fèi)了。 這需要一個任務(wù)執(zhí)行引擎來支持。

  1. 當(dāng)用戶完成訂購后,在任務(wù)執(zhí)行引擎中,根據(jù)訂購收到的receipt中的expired time, 設(shè)定在到期前一小時進(jìn)行查詢;
  2. 用戶到期前一小時開始執(zhí)行IAP 查詢,發(fā)送original transaction id和 上一次的receipt data給蘋果服務(wù)器執(zhí)行查詢,如果用戶已經(jīng)完成訂閱,則增加用戶權(quán)益,同時根據(jù)到期時間,設(shè)置下一個expired time, 回到步驟1.
  3. 如果用戶在到期前一個小時還沒有完成續(xù)費(fèi),則設(shè)置定時任務(wù),在到期后一小時再次執(zhí)行。
  4. 到期后一小時開始執(zhí)行IAP查詢,如果用戶完成訂閱,同步驟2處理。 如果沒有完成訂閱,則可以判斷用戶不再訂閱了。 在此情況下,如果用戶繼續(xù)訂閱并通過,則可以通過客服來支持。

免費(fèi)試用

免費(fèi)試用不是強(qiáng)制需求,但這有利于用戶判斷是否值得購買這個物品。免費(fèi)試用期是在itunes connect中設(shè)置。 當(dāng)用戶第一次購買這個東西的時候, 客戶端接收到的Receipt中包含免費(fèi)試用信息。在免費(fèi)期快到的時候,蘋果發(fā)起第一次扣款。整個過程和自動續(xù)費(fèi)類似,唯一區(qū)別是第一個月是免費(fèi)的。

Receipt 驗證

客戶端接收到 Receipt 之后,需要提交到服務(wù)器端進(jìn)行處理,開通權(quán)益。 這就來了個問題:Receipt應(yīng)該在客戶端還是服務(wù)器端解析?當(dāng)然需要在服務(wù)器端處理,這樣可以防止越獄后的一些插件,如IAP Cracker、IAP Free等偽造交易憑證,欺騙蘋果服務(wù)器,開通權(quán)益。 此外,還需注意,客戶端和服務(wù)器端之間需通過HTTPS以及參數(shù)簽名等方式來確保通訊安全。 服務(wù)器端接收到Receipt之后,首先驗證請求的有效性, 然后將Receipt發(fā)送到蘋果服務(wù)器上進(jìn)行驗證和解析。 接收到蘋果處理結(jié)果后, 將Receipt中的user_id, product_id、purchase_date、transaction_id等做驗證和處理。

IAP破解和防御

既然Iap的驗證主要是在蘋果服務(wù)器端和手機(jī)客戶端進(jìn)行,并且是使用域名。這簡直是為攻擊打開了一扇大門,而不僅僅是漏洞。

早期的IAP內(nèi)購解鎖工具IAP cracker對IAP的破解比較簡單粗暴。寫過IAP程序的人都知道, 程序中基本都是用transactionState來判斷交易是否成功。 transactionState 有四個狀態(tài): SKPaymentTransactionStatePurchasing SKPaymentTransactionStatePurchased SKPaymentTransactionStateFailed SKPaymentTransactionStateRestored, SKPaymentTransactionStatePurchased 表示購買成功了。 只要修改這個變量值,如果客戶端應(yīng)用直接根據(jù)交易狀態(tài)來處理業(yè)務(wù)流程,那就會收到這個假的交易成功信息,接下來用戶就能不花錢得到所買的物品。這個過程,甚至都不需要接入網(wǎng)絡(luò)。

另一個工具IAPfree功能更強(qiáng)大,安裝使用也復(fù)雜很多。它是通過修改DNS,讓客戶端訪問黑客提供的服務(wù)器來取代訪問蘋果服務(wù)器,實(shí)現(xiàn)所謂的MITM中間人攻擊。當(dāng)用戶在客戶端觸發(fā)購買流程時,會被引導(dǎo)到偽裝的蘋果服務(wù)器上,不扣款而直接返回扣款成功收據(jù)。用戶不需要支付任何資金,客戶端能夠拿到完整的收據(jù)。如果是在客戶端處理收據(jù)驗證也沒有任何問題。為了避免用戶所使用的設(shè)備被封,這些軟件甚至可以提供偽造UDID的功能。

為此,蘋果特別說明,一定要在服務(wù)器端驗證用戶購買信息,驗證內(nèi)容包括收據(jù)簽名,證書,產(chǎn)家信息等,確保收據(jù)無誤后,才能授予權(quán)益。如果發(fā)現(xiàn)有詐,則將用戶拉黑。

兩套賬戶體系

蘋果支付的賬戶體系,當(dāng)然是以Apple Id為基礎(chǔ)的,它允許用戶在多臺設(shè)備上共用一個賬戶。一臺設(shè)備上,一般只有一個激活賬戶。但對應(yīng)用系統(tǒng)來說,大部分是允許多個賬號登陸的。這對續(xù)費(fèi)來說就是個大問題。

用戶以賬戶A登錄后,發(fā)起續(xù)費(fèi),獲得權(quán)益。然后以賬號B登錄了,顯然,A的權(quán)益不會衍生給B。過幾天A開始續(xù)費(fèi)了,續(xù)費(fèi)之后,切換到B賬號登錄,客戶端在B賬號登錄時得到續(xù)費(fèi)的收據(jù)并發(fā)送給應(yīng)用服務(wù)器。那這算是誰的續(xù)費(fèi)請求?當(dāng)然是A的。在這個apple id發(fā)起的續(xù)費(fèi)請求,所有的收據(jù)都會有一個相同的原始交易號original transaction Id。在用戶發(fā)起訂閱時,需要記錄這個id和賬號的關(guān)系,每次續(xù)費(fèi),需要在解析收據(jù)后,根據(jù)原始交易號從這里獲取真正的充值賬戶,不能從客戶端提交的用戶id作為憑據(jù)。

還是這個坑,如果在賬戶B登錄后也發(fā)起訂閱請求,會怎么樣?這個調(diào)用將會失敗,所以需要阻止用戶發(fā)起這樣的請求?;蛘咴O(shè)置多個產(chǎn)品副本來讓用戶購買。

分成,定價和國際化

在iTunes中的給的產(chǎn)品定價必須是稅前的,蘋果和商家的分成,也是按稅前算。商家給出在一個主要銷售國家和地區(qū)(比如國內(nèi)的基本就是中國了)的價格,即基準(zhǔn)價格。在其他地區(qū)的銷售價格,蘋果會自動根據(jù)當(dāng)前的匯率來換算成當(dāng)?shù)氐呢泿?。?dāng)然,也可以自己修改設(shè)定在這些國家或者地區(qū)的當(dāng)?shù)貎r格。目前是支持到155個國家。還要特別注意版權(quán)問題。

基準(zhǔn)價格調(diào)整,如果是往高了調(diào)整, 則在用戶下一次續(xù)費(fèi)時,需要用戶確認(rèn)。如果往低了調(diào),那就不需要用戶確認(rèn),直接扣款了。

蘋果對商家的產(chǎn)品價格體系有分組(Group)的概念,同國內(nèi)說的價格體系,比如白金會員、黃金會員、貴賓等,在同一個Group里面,用戶只能選擇一個檔,比如用戶要么是白金要么是黃金會員,不會同時是。

在同一個分組中,如果用戶訂閱時間超過一年(365天),則商家可以得到來自這個用戶收益的更多的分成,目前是85%。這個訂閱時間不包括免費(fèi)試用期。 同時可以有60天的寬限。也就是說,這一年中,如果用戶曾經(jīng)停止續(xù)費(fèi),然后又開始繼續(xù)續(xù)費(fèi),只要中間不續(xù)費(fèi)的時間不超過60天就行。

沙盒環(huán)境

目前用的是IOS 10.0 版本, 這個版本和IAP有關(guān)的坑,先記錄下:

  1. 沙盒環(huán)境,沒法做取消訂閱操作。 只能在線上模擬。 所以產(chǎn)品設(shè)計和開發(fā)時,盡量不要依賴取消訂閱操作,也應(yīng)該不依賴于這個操作。
  2. 沙盒環(huán)境下,有些receipt可能會收不到transaction id,線上的暫未發(fā)現(xiàn)這個問題。
  3. 蘋果提供單個收據(jù)和列表收據(jù)兩種格式。推薦使用列表數(shù)據(jù),但問題是,這個列表收據(jù)的長度,蘋果也不知道最多會有多少。

【本文為51CTO專欄作者“鳳凰牌老熊”的原創(chuàng)稿件,轉(zhuǎn)載請通過微信公眾號“鳳凰牌老熊”聯(lián)系作者本人】

戳這里,看該作者更多好文

責(zé)任編輯:武曉燕 來源: 51CTO專欄
相關(guān)推薦

2012-03-23 22:31:10

移動支付

2013-04-12 15:59:33

2017-06-16 15:52:58

移動支付系統(tǒng)

2017-05-18 15:28:29

2011-05-19 09:57:45

應(yīng)用內(nèi)支付App StoreiOS

2012-05-03 15:16:52

移動支付應(yīng)用內(nèi)支付

2011-12-28 21:43:40

蘋果

2020-03-25 07:23:35

自動支付自主支付物聯(lián)網(wǎng)

2022-04-29 10:09:10

刷臉支付移動支付

2012-12-11 15:24:46

2017-03-27 08:56:15

支付風(fēng)控模型

2014-10-15 09:35:31

2025-01-26 00:00:30

2021-01-25 14:13:26

iOS支付寶支付

2021-09-09 15:30:28

鴻蒙HarmonyOS應(yīng)用

2013-03-06 09:53:05

2017-04-14 15:42:14

2024-10-14 14:28:19

支付系統(tǒng)設(shè)計

2015-02-26 13:37:13

紅包

2009-08-20 09:41:36

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號