[iOS概念]Apple Pay與IAP的區別
Apple Pay是什麼?
在Apple Pay的釋出會上,Eddy Cue表示,蘋果並沒有興趣建立一個收集使用者資料的業務,蘋果並不知道你購買了什麼,不知道你是從哪裡購買的,為了這個商品花了多少錢。所以這也就是蘋果和支付寶,微信等最大的不同:Apple Pay並不會將資金存放在Apple Pay中。
Apple Pay其實也就是相當於一個卡包,替你儲存銀行卡的資訊,只不過是將這個卡包虛擬化了而已,而且Apple Pay中儲存的銀行卡資訊等都進行了加密,所以非常的安全(當然所有的安全都不會是絕對安全)
Apple Pay中的 Pay業務並不是Apple自己的業務,Apple Pay本身只是一個第三方的橋樑:連線使用者和銀行。 Pay業務只是銀行和Apple之間所合作的一個業務,它和銀行之間是強關聯的關係,和Apple之間是弱關聯的關係,沒有銀行也就沒有pay了
Apple Pay和IAP的區別
什麼是IAP呢?其實IAP就是In App purchase,即應用內購買,也就是我們常說的蘋果內購,IAP(應用內購買)是最常用的一種支付方式,屬於免費應用+應用內購買的模式。IAP主要是應用(App)和App Store伺服器之間進行資訊的傳遞,使用者在APP內部進行內購操作相當於使用者購買了App Store中的某個商品,這是使用者和APP Store之間的交易,然後蘋果從交易中抽取30%,APP的所有者獲得70%。
Apple Pay則不然,Apple Pay實質上就是等同於使用者使用銀行卡進行刷卡消費
理解Apple Pay和應用內支付之間的區別是非常重要的。Apple Pay用於銷售物理商品,比如食品雜貨、衣服和電器,也能用於支付俱樂部的會員資格、酒店預訂以及演出門票。另一方面,應用內支付(IPA)只用於銷售虛擬物品,如你的App裡的高階內容,以及訂閱數字內容。
PassKit框架為Apple Pay提供API,應用內支付(IAP)的API則由StoreKit框架提供。
Store Kit代表App和App Store之間進行通訊。程式將會從App Store接收那些你想要提供的產品的資訊,並將它們顯示出來供使用者購買。當用戶需要購買某件產品時,程式呼叫Store Kit來收集購買資訊。
IAP流程
什麼是IAP?全稱即In App Purchase,也就是我們所講的蘋果內購,IAP的流程分為兩種,一種是直接使用Apple的伺服器進行購買和驗證,另一種就是自己架設伺服器進行驗證。由於國內網路連線Apple伺服器驗證非常慢,而且也是為了防止黑客偽造購買憑證,通常都是選擇自己架設伺服器進行驗證。
簡單說下第二中情況的流程:
- 使用者進入購買虛擬物品頁面,App從後臺伺服器獲取產品列表然後顯示給使用者
- 使用者點選購買購買某一個虛擬物品,APP就傳送該虛擬物品的productionIdentifier到Apple伺服器
- Apple伺服器根據APP傳送過來的productionIdentifier返回相應的物品的資訊(描述,價格等)
- 使用者點選確認鍵購買該物品,購買請求傳送到Apple伺服器
- Apple伺服器完成購買後,返回使用者一個完成購買的憑證
- APP傳送這個憑證到後臺伺服器驗證
- 後臺伺服器把這個憑證傳送到Apple驗證,Apple返回一個欄位給後臺伺服器表明該憑證是否有效
- 後臺伺服器把驗證結果在傳送到APP,APP根據驗證結果做相應的處理
Apple Pay的支付流程
Apple並不處理和付款相關的邏輯,它只是負責支付資訊的傳遞。Apple通過Touch ID來驗證銀行卡持有者的身份,實際的扣款行為發生在銀聯端,接入了Apple Pay的商品(即App)組織好Apple返回的支付資訊,向銀行發出扣款請求後,該筆交易才會真正傳送扣款,所以APP本身是和銀聯進行結算,Apple Pay只不過是作為一種支付的渠道而已。
整個流程中如下:
- 客戶端通過蘋果API,在 APP 應用內展示 Apple Pay 支付控制元件。
- 使用者在 Apple Pay 的支付控制元件上進行生物驗證(指紋或者人臉識別)或者手機密碼驗證。
- 蘋果在使用者驗證通過之後,會生成一個使用者選中的銀行卡相關的 PaymentToken 加密資料, Apple Pay 必須在有網情況下才能進行,蘋果需要從開發者網站上使用證書的公鑰進行加密 ,完成後通過 API 回撥返回給客戶端前端。
- 客戶端獲取到 PaymentToken 後,給服務端傳送扣款請求,等待支付結果。
- 服務端收到客戶端上送的 PaymentToken,解密 PaymentToken 取出一些關鍵欄位資訊,附帶其他訂單資訊,再與支付供應商(如國內銀聯)進行通訊發起扣款。
- 服務端收到扣款結果後,再返支付結果給手機客戶端,最終通知使用者支付結果。