支付系統(tǒng)設(shè)計(jì):應(yīng)用內(nèi)支付(五)

轉(zhuǎn)載:http://www.woshipm.com/pd/484085.html

應(yīng)用內(nèi)支付指使用手機(jī)操作系統(tǒng)自帶的支付功能來(lái)支持支付粟关。目前國(guó)內(nèi)主要的應(yīng)用內(nèi)支付有 Google Pay钞螟、Apple Pay伸头、小米支付陈肛、華為支付等。 其中Apple Pay是典型的一個(gè)應(yīng)用內(nèi)支付,Android平臺(tái)的各種支付也一般是沿用Apple Pay的設(shè)計(jì)趾诗。

為什么要IAP

相對(duì)來(lái)說(shuō),應(yīng)用內(nèi)支付的用戶體驗(yàn)蹬蚁,和微信支付恃泪、支付寶相比,還是有一定差距的犀斋,但是為什么要開發(fā)應(yīng)用內(nèi)支付呢贝乎? 這個(gè)和蘋果的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)來(lái)購(gòu)買內(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 購(gòu)買實(shí)物或者應(yīng)用外的商品或服務(wù)將會(huì)被拒絕虫几;

11.4 Apps that use IAP to purchase credits or other currencies must consume those credits within the App

通過(guò) IAP 購(gòu)買的積分或者其他貨幣必須只在 App 內(nèi)使用朽肥。

這問(wèn)題就來(lái)了,如果要購(gòu)買的服務(wù)持钉,即在IOS內(nèi)使用衡招,也在Android等IOS系統(tǒng)外使用, 那應(yīng)該是使用規(guī)則11.2或者規(guī)則11.3來(lái)執(zhí)行每强? 比如說(shuō)視頻網(wǎng)站始腾,視頻既可以在IOS上看,也可以在Android上看空执,那是否是需要通過(guò)IAP來(lái)購(gòu)買浪箭? 蘋果公司在這一點(diǎn)上采取模糊的策略。 愛奇藝辨绊、騰訊視頻奶栖,在IOS上購(gòu)買會(huì)員,只能用IAP支付。這就和蘋果公司的審核有關(guān)宣鄙。

IAP支付流程

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

在developer.apple.com上配置一個(gè)App ID冻晤,使用該ID生成和安裝相應(yīng)的Provisioning Profile文件苇羡。

登錄到iTunes Connect,使用App ID創(chuàng)建一個(gè)新的應(yīng)用鼻弧,在該應(yīng)用中设江,創(chuàng)建應(yīng)用內(nèi)付費(fèi)項(xiàng)目,設(shè)置好價(jià)格和Product ID以及購(gòu)買介紹和截圖攘轩。

添加一個(gè)用于在sandbox付費(fèi)的測(cè)試用戶叉存,填寫相關(guān)的稅務(wù),銀行度帮,聯(lián)系人信息歼捏。

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

用戶選擇要購(gòu)買的內(nèi)容并點(diǎn)擊購(gòu)買按鈕挠铲;

用戶通過(guò)App Store賬戶驗(yàn)證

蘋果服務(wù)器驗(yàn)證用戶請(qǐng)求

蘋果服務(wù)器從用戶帳號(hào)扣款

蘋果向用戶返回購(gòu)買成功信息

軟件接收并顯示用戶購(gòu)買信息

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

用戶訪問(wèn)AppStore時(shí)使用的是Apple的賬號(hào)拂苹,不是應(yīng)用系統(tǒng)的賬號(hào)安聘。 也就是說(shuō),我們并不知道到底是誰(shuí)在購(gòu)買這個(gè)內(nèi)容瓢棒。 比如在應(yīng)用中有兩個(gè)賬號(hào)A和B浴韭,用A賬號(hào)登錄后,上IAP買了東西脯宿,然后用B賬號(hào)來(lái)登錄念颈,也上IAP買東西, 這兩次購(gòu)買连霉,用的是同一個(gè)Apple賬號(hào)榴芳。蘋果也不會(huì)告訴你,到底是哪個(gè)賬號(hào)付了錢跺撼。 賬號(hào)坑在單次購(gòu)買中還沒什么問(wèn)題窟感,但碰到訂閱的情況,得好好處理下歉井。在訂閱章節(jié)中會(huì)詳細(xì)說(shuō)明柿祈。從上述流程可以看出,蘋果服務(wù)器都是和客戶端打交道的,這里面似乎沒有應(yīng)用服務(wù)器什么事情躏嚎。 只有在客戶端接收到蘋果返回信息后蜜自,才可以把這個(gè)信息轉(zhuǎn)發(fā)給應(yīng)用服務(wù)器。 如果用戶一直不打開手機(jī)上的應(yīng)用紧索,那應(yīng)用服務(wù)器就一直收不到通知了袁辈。 好在后來(lái)蘋果提供了一個(gè)驗(yàn)證功能,應(yīng)用服務(wù)器可以把接收到的返回信息(加密后的字符串)發(fā)送給蘋果服務(wù)器來(lái)驗(yàn)證和解密珠漂。

IAP訂閱

IAP Subscription又是一個(gè)大坑晚缩。官方的文檔在這里。內(nèi)容不多媳危,沒有說(shuō)明的東西卻很多荞彼。

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

IAP主要提供給周期性訂閱的音樂(lè)、電子書等內(nèi)容使用待笑。 一般就按月來(lái)計(jì)算周期鸣皂。蘋果是以自然月來(lái)算權(quán)益周期。比如在1月3號(hào)買了權(quán)益暮蹂,到2月3號(hào)寞缝,這個(gè)權(quán)益就過(guò)期啦,需要在此之前完成續(xù)費(fèi)仰泻。 那問(wèn)題來(lái)了荆陆,1月31號(hào)買的權(quán)益,到幾號(hào)過(guò)期集侯?以自然月算被啼,這個(gè)權(quán)益會(huì)在3月1日前到期,如果2月份棠枉,3月份都續(xù)費(fèi)了浓体,到4月份,也是享受到4月30日了辈讶。

自動(dòng)續(xù)費(fèi)

應(yīng)用開發(fā)應(yīng)該不需要關(guān)心續(xù)費(fèi)的細(xì)節(jié)命浴。蘋果會(huì)做自動(dòng)處理。在權(quán)益到期前10天贱除,蘋果檢查用戶賬戶是否可以扣款生闲,商品價(jià)格是否有變動(dòng)。在權(quán)益到期前24小時(shí)勘伺,蘋果開始扣款跪腹,如果失敗,會(huì)多次重試飞醉,直到成功冲茸。問(wèn)題來(lái)了屯阀,這個(gè)重試,會(huì)延續(xù)到用戶權(quán)益過(guò)期后一小段時(shí)間轴术,蘋果沒有說(shuō)這段時(shí)間該算是有權(quán)益還是沒有难衰,但開發(fā)人員需要注意應(yīng)該如何處理。

免費(fèi)試用

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

Receipt 驗(yàn)證

客戶端接收到 Receipt 之后摧冀,需要提交到服務(wù)器端進(jìn)行處理倍踪,開通權(quán)益。 這就來(lái)了個(gè)問(wèn)題:Receipt應(yīng)該在客戶端還是服務(wù)器端解析索昂?當(dāng)然需要在服務(wù)器端處理建车,這樣可以防止越獄后的一些插件,如IAP Cracker椒惨、IAP Free等偽造交易憑證缤至,欺騙蘋果服務(wù)器,開通權(quán)益框产。 此外凄杯,還需注意错洁,客戶端和服務(wù)器端之間需通過(guò)HTTPS以及參數(shù)簽名等方式來(lái)確保通訊安全秉宿。 服務(wù)器端接收到Receipt之后,首先驗(yàn)證請(qǐng)求的有效性屯碴, 然后將Receipt發(fā)送到蘋果服務(wù)器上進(jìn)行驗(yàn)證和解析描睦。 接收到蘋果處理結(jié)果后, 將Receipt中的user_id, product_id导而、purchase_date忱叭、transaction_id等做驗(yàn)證和處理。

IAP破解和防御

既然Iap的驗(yàn)證主要是在蘋果服務(wù)器端和手機(jī)客戶端進(jìn)行今艺,并且是使用域名韵丑。這簡(jiǎn)直是為攻擊打開了一扇大門,而不僅僅是漏洞虚缎。 早期的IAP內(nèi)購(gòu)解鎖工具IAP cracker對(duì)IAP的破解比較簡(jiǎn)單粗暴撵彻。寫過(guò)IAP程序的人都知道, 程序中基本都是用transactionState來(lái)判斷交易是否成功。

transactionState 有四個(gè)狀態(tài):

SKPaymentTransactionStatePurchasing

SKPaymentTransactionStatePurchased

SKPaymentTransactionStateFailed

SKPaymentTransactionStateRestored

SKPaymentTransactionStatePurchased 表示購(gòu)買成功了陌僵。 只要修改這個(gè)變量值轴合,如果客戶端應(yīng)用直接根據(jù)交易狀態(tài)來(lái)處理業(yè)務(wù)流程,那就會(huì)收到這個(gè)假的交易成功信息碗短,接下來(lái)用戶就能不花錢得到所買的物品受葛。這個(gè)過(guò)程,甚至都不需要接入網(wǎng)絡(luò)偎谁。

另一個(gè)工具IAPfree功能更強(qiáng)大总滩,安裝使用也復(fù)雜很多。它是通過(guò)修改DNS巡雨,讓客戶端訪問(wèn)黑客提供的服務(wù)器來(lái)取代訪問(wèn)蘋果服務(wù)器咳秉,實(shí)現(xiàn)所謂的MITM中間人攻擊。當(dāng)用戶在客戶端觸發(fā)購(gòu)買流程時(shí)鸯隅,會(huì)被引導(dǎo)到偽裝的蘋果服務(wù)器上澜建,不扣款而直接返回扣款成功收據(jù)。用戶不需要支付任何資金蝌以,客戶端能夠拿到完整的收據(jù)炕舵。如果是在客戶端處理收據(jù)驗(yàn)證也沒有任何問(wèn)題。為了避免用戶所使用的設(shè)備被封跟畅,這些軟件甚至可以提供偽造UDID的功能咽筋。 為此,蘋果特別說(shuō)明徊件,一定要在服務(wù)器端驗(yàn)證用戶購(gòu)買信息奸攻,驗(yàn)證內(nèi)容包括收據(jù)簽名,證書虱痕,產(chǎn)家信息等睹耐,確保收據(jù)無(wú)誤后,才能授予權(quán)益部翘。如果發(fā)現(xiàn)有詐硝训,則將用戶拉黑。

兩套賬戶體系

蘋果支付的賬戶體系,當(dāng)然是以apple id為基礎(chǔ)的新思,它允許用戶在多臺(tái)設(shè)備上共用一個(gè)賬戶窖梁。一臺(tái)設(shè)備上,一般只有一個(gè)激活賬戶夹囚。但對(duì)應(yīng)用系統(tǒng)來(lái)說(shuō)纵刘,大部分是允許多個(gè)賬號(hào)登陸的。這對(duì)續(xù)費(fèi)來(lái)說(shuō)就是個(gè)大問(wèn)題荸哟。 用戶以賬戶a登錄后假哎,發(fā)起續(xù)費(fèi)蛔翅,獲得權(quán)益。然后以賬號(hào)B登錄了位谋,顯然山析,A的權(quán)益不會(huì)衍生給B。過(guò)幾天A開始續(xù)費(fèi)了掏父,續(xù)費(fèi)之后笋轨,切換到B賬號(hào)登錄,客戶端在B賬號(hào)登錄時(shí)得到續(xù)費(fèi)的收據(jù)并發(fā)送給應(yīng)用服務(wù)器赊淑。那這算是誰(shuí)的續(xù)費(fèi)請(qǐng)求爵政?當(dāng)然是A的。在這個(gè)apple id發(fā)起的續(xù)費(fèi)請(qǐng)求陶缺,所有的收據(jù)都會(huì)有一個(gè)相同的原始交易號(hào)original transaction Id钾挟。在用戶發(fā)起訂閱時(shí),需要記錄這個(gè)id和賬號(hào)的關(guān)系饱岸,每次續(xù)費(fèi)掺出,需要在解析收據(jù)后,根據(jù)原始交易號(hào)從這里獲取真正的充值賬戶苫费,不能從客戶端提交的用戶id作為憑據(jù)汤锨。

還是這個(gè)坑,如果在賬戶b登錄后也發(fā)起訂閱請(qǐng)求百框,會(huì)怎么樣闲礼?這個(gè)調(diào)用將會(huì)失敗,所以需要阻止用戶發(fā)起這樣的請(qǐng)求铐维〖碓螅或者設(shè)置多個(gè)產(chǎn)品副本來(lái)讓用戶購(gòu)買。

分成嫁蛇,定價(jià)和國(guó)際化

在iTunes中的給的產(chǎn)品定價(jià)必須是稅前的锨并,蘋果和商家的分成,也是按稅前算棠众。商家給出在一個(gè)主要銷售國(guó)家和地區(qū)(比如國(guó)內(nèi)的基本就是中國(guó)了)的價(jià)格琳疏,即基準(zhǔn)價(jià)格有决。在其他地區(qū)的銷售價(jià)格闸拿,蘋果會(huì)自動(dòng)根據(jù)當(dāng)前的匯率來(lái)?yè)Q算成當(dāng)?shù)氐呢泿拧.?dāng)然书幕,也可以自己修改設(shè)定在這些國(guó)家或者地區(qū)的當(dāng)?shù)貎r(jià)格新荤。目前是支持到155個(gè)國(guó)家。還要特別注意版權(quán)問(wèn)題台汇。

基準(zhǔn)價(jià)格調(diào)整苛骨,如果是往高了調(diào)整篱瞎, 則在用戶下一次續(xù)費(fèi)時(shí),需要用戶確認(rèn)痒芝。如果往低了調(diào)俐筋,那就不需要用戶確認(rèn),直接扣款了严衬。

蘋果對(duì)商家的產(chǎn)品價(jià)格體系有分組(Group)的概念澄者,同國(guó)內(nèi)說(shuō)的價(jià)格體系,比如白金會(huì)員请琳、黃金會(huì)員粱挡、貴賓等,在同一個(gè)Group里面俄精,用戶只能選擇一個(gè)檔询筏,比如用戶要么是白金要么是黃金會(huì)員,不會(huì)同時(shí)是竖慧。

在同一個(gè)分組中嫌套,如果用戶訂閱時(shí)間超過(guò)一年(365天),則商家可以得到來(lái)自這個(gè)用戶收益的更多的分成圾旨,目前是85%灌危。這個(gè)訂閱時(shí)間不包括免費(fèi)試用期。 同時(shí)可以有60天的寬限碳胳。也就是說(shuō)勇蝙,這一年中,如果用戶曾經(jīng)停止續(xù)費(fèi)挨约,然后又開始繼續(xù)續(xù)費(fèi)味混,只要中間不續(xù)費(fèi)的時(shí)間不超過(guò)60天就行。

更多的坑

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

沙盒環(huán)境,沒法做取消訂閱操作夕土。 只能在線上模擬馆衔。 所以產(chǎn)品設(shè)計(jì)和開發(fā)時(shí),盡量不要依賴取消訂閱操作怨绣,也應(yīng)該不依賴于這個(gè)操作角溃。

沙盒環(huán)境下,有些receipt可能會(huì)收不到transaction id篮撑,線上的暫未發(fā)現(xiàn)這個(gè)問(wèn)題减细。

蘋果提供單個(gè)收據(jù)和列表收據(jù)兩種格式。推薦使用列表數(shù)據(jù)赢笨,但問(wèn)題是未蝌,這個(gè)列表收據(jù)的長(zhǎng)度驮吱,蘋果也不知道最多會(huì)有多少。

Android IAP

好吧萧吠,用這個(gè)話題作總結(jié)左冬,不是太好。IOS上用蘋果支付是被逼的纸型,android上用IAP是圖什么又碌?支付寶和微信支付有這么多用戶基數(shù),接入也很方便绊袋,費(fèi)用比IAP便宜多了毕匀。如果你有接入android IAP經(jīng)驗(yàn),期待分享癌别。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末皂岔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子展姐,更是在濱河造成了極大的恐慌躁垛,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件圾笨,死亡現(xiàn)場(chǎng)離奇詭異教馆,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)擂达,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門土铺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人板鬓,你說(shuō)我怎么就攤上這事悲敷。” “怎么了俭令?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵后德,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我抄腔,道長(zhǎng)瓢湃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任赫蛇,我火速辦了婚禮绵患,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘棍掐。我一直安慰自己藏雏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布作煌。 她就那樣靜靜地躺著掘殴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪粟誓。 梳的紋絲不亂的頭發(fā)上奏寨,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音鹰服,去河邊找鬼病瞳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛悲酷,可吹牛的內(nèi)容都是我干的套菜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼设易,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼逗柴!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起顿肺,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤戏溺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后屠尊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體旷祸,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年讼昆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了托享。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡浸赫,死狀恐怖嫌吠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情掺炭,我是刑警寧澤辫诅,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站涧狮,受9級(jí)特大地震影響炕矮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜者冤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一肤视、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涉枫,春花似錦邢滑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)乐纸。三九已至,卻和暖如春摇予,著一層夾襖步出監(jiān)牢的瞬間汽绢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工侧戴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宁昭,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓酗宋,卻偏偏與公主長(zhǎng)得像积仗,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蜕猫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

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