Apple Pay
?一個方便 & 安全的移動支付技術(shù)略号,讓用戶完成他們的支付環(huán)節(jié)并把支付相關(guān)的信息告訴你
?只可以購買實物或者服務(wù)逻锐,不可以用來支付IAP
應(yīng)用內(nèi)集成Apple Pay需要兩個部分:交易授權(quán)與交易處理像屋。交易授權(quán)在應(yīng)用內(nèi)進行谐算,通過PassKit.framework所提供的接口向用戶獲取支付授權(quán)(payment token)沈撞;而交易處理則需要授權(quán)后調(diào)用可受理交易的服務(wù)器接口(將token傳入服務(wù)器進行處理)蜈垮,你可以選擇某個支付平臺來處理交易灌曙,或者也可以自己實現(xiàn)交易處理過程菊碟,蘋果官方比較推薦前者。
譬如選擇了接入銀聯(lián)的Apple Pay在刺,所以除了查看 Apple 的文檔以外逆害,還要看銀聯(lián)的開發(fā)文檔。
配置
Merchant Identifier
1. 到 Member Center 上為 App 注冊 Merchant ID
2. 為 Merchant ID 上傳 CSR (從銀聯(lián)獲闰纪铡)
3. 通過上傳的 CSR 生成證書魄幕,并下載
Steps
1. 創(chuàng)建 Payment Request,設(shè)置它的 subtotal颖杏,discount 等信息
2. 通過 payment authoriztion view controller 展示支付信息纯陨,等待用戶支付授權(quán)
3. 用戶授權(quán)支付后,Apple Pay 加密處理支付信息留储,依據(jù) merchant id 以及對應(yīng)的支付卡信息計算出 payment token
4. payment token 用 Merchant Id對應(yīng)的證書加密翼抠,發(fā)送到 Apple Server
5. Apple Server 把 token 交到我們的 App
6. Payment token 交給可以處理交易的第三方平臺,我們這里是銀聯(lián)SDK
注意: app bundle 里不需要包含 Merchant Id 的證書
Payment Request
1. 創(chuàng)建 Payment Request 之前获讳,最好先檢查是否可以使用 Payment
canMakePayments 是否支持 Apple Pay阴颖,NO時不要展示 Apple Pay 按鈕
canMakePaymentsUsingNetworks:
如果 canMakePayments 是 YES,canMakePaymentsUsingNetworks 是 NO丐膝。意味著當前設(shè)備沒有綁銀行卡量愧,你可以展示一個 setup 按鈕,推薦調(diào)用 openPaymentSetup 鼓勵用戶添加銀行卡
2. Apple Pay 的條件滿足以后帅矗,在用戶按下 Apple Pay 后應(yīng)該馬上展示 payment 的信息等待用戶授權(quán)偎肃。
3. 如果支付流程只在 Web 的方式上進行,你要在現(xiàn)有的支付流程中插入 Native 代碼的邏輯损晤,譬如是捕捉url的方式软棺。
Currency Code & Country Code
currencyCode 是描述支付所用的貨幣,三位字符:USD
countryCode 是處理這個訂單的地方尤勋,兩位字符:US
Merchant Id
request 的 merchant id 必須在 app entitlement 里聲明
Authorizing Payments
當用戶授權(quán)了支付喘落,Apple Pay 會生成一個與 Apple Server 和本設(shè)備的 Security Element 對應(yīng)的 payment token。
1. Security Element 在獲取 payment request 之后最冰,把payment card 以及 商戶 的信息加密后送到 Apple 的服務(wù)端
2. Apple 的服務(wù)端再利用配置好的 Merchant ID 的證書加密 payment 數(shù)據(jù)瘦棋,返回給設(shè)備
3. 在 paymentAuthorizationViewController:didAuthorizePayment:completion: 協(xié)議中返回 token。app 把 token 發(fā)到擁有解釋能力的服務(wù)端進行扣款暖哨。
4. 當 Apple Pay 顯示了支付的狀態(tài)信息之后赌朋,paymentAuthorizationViewControllerDidFinish: 會觸發(fā),app dimiss 支付授權(quán)的界面,并展示自己的訂單確認界面沛慢。
Processing Payments
使用的是銀聯(lián)SDK赡若,有銀聯(lián)處理支付之后的事宜。
UI
Apple Pay 的 UI 有嚴格要求:
1. 對于 iOS8.3 及以后团甲,使用 PKPaymentButton 創(chuàng)建按鈕
2. 對于 iOS8.3 以前逾冬,使用官方指定尺寸的圖片
2. Apple 對 Apple Pay 的展示有嚴格要求,甚至是 "Apple Pay" 這個詞組都不允許有任何不一致, 如果不想反復(fù)被reject還是先看看 [Apple Pay Identity Guide](https://developer.apple.com/apple-pay/Apple-Pay-Identity-Guidelines.pdf)
3. 不允許翻譯:Apple躺苦,Apple Pay身腻,iPhone,Touch ID 以及其它Apple 的 trademark匹厘。
HIG
入口:Button
當用戶按下 Apple Pay 的按鈕嘀趟,必須馬上展示 Payment sheet。如果當前的設(shè)備不支持 Apple Pay 功能愈诚,你可以展示 Apple Pay 的 Set up 按鈕她按,或者不展示 Apple Pay 按鈕。
![Apple Pay Button](https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/Art/apple_pay_small_button_2x.png)
Payment Sheet
用于展示訂單的支付扰路,配送尤溜,TAX等方面的信息(如果需要),app 可以指定 sheet 中的內(nèi)容汗唱,但不可以干擾用戶對 sheet 的交互
Payment Token
用戶通過 Touch ID 授權(quán)(有些情況還需要銀行的 PIN code)之后,你的 app 會獲得 PassKit 的 payment token丈攒。里面包含完成交易所必要的信息哩罪,包括識別設(shè)備的 account number,金額巡验,唯一的一次性密文际插。擁有證書私鑰的商戶可以解密這些支付信息,或者是提供支付SDK的商戶显设。
在中國框弛,目前能夠提供支持 Apple Pay 支付解決方案的支付平臺:
銀聯(lián),連連支付(LianlianPay)捕捂,首信易支付(PayEase)瑟枫,易寶支付(YeePay),銀聯(lián)商務(wù)(UMS)
Apple Demo
[Emporium](https://developer.apple.com/library/ios/samplecode/Emporium/Introduction/Intro.html#//apple_ref/doc/uid/TP40016175)
配置步驟筆記
下載來的項目有一些配置項目要留意補充
1. 到 itunesconnet 上配置 merchant指攒,app id慷妙,provisioning profile(demo項目中還包含 watch)
2. AppConfiguration.swift 可能要修改 merchant ID 與你在 itunesconnect 中
配置的一樣
3. 項目中有 User-Defined Setting “EMPORIUM_BUNDLE_PREFIX”, 用來配置 bundle id 以及
4. ProductTableViewController.swift 是生成 payment request 以及進行支付授權(quán)的界面。
supportedNetworks 增加 PKPaymentNetworkChinaUnionPay (iOS 要求9.2以上允悦,修改 deployment target...)
paymentRequest 的 countryCode & currencyCode 要改成 CN & CNY
Apple Review Guides
Review Guide 是會更新的膝擂,建議定期查一下
[29.Apple Pay](https://developer.apple.com/app-store/review/guidelines/#apple-pay)
1. 使用 Apple Pay 的 app 必須提供完整的消費信息。如果 Apple Pay 用于訂閱類型的周期性消費,你需要描述清楚訂閱的周期架馋,以及周期內(nèi)所提供的服務(wù)狞山,以及如何取消訂閱
2. 使用的 Apple Pay 視覺元素必須符合官方要求 [Apple Pay Identity Guidelines](https://developer.apple.com/apple-pay/Apple-Pay-Identity-Guidelines.pdf)
3. 購買的東西必須符合地方法律
4. 必須提供 privacy policy
5. 從 Apple Pay 獲取的數(shù)據(jù)在用于提供第三方實現(xiàn)支付時要符合法律要求
其它
Wallet 綁定銀行卡
Apple Pay 的設(shè)計理念:不收集任何支付,交易的信息叉寂。而一個交易涉及到的有用戶萍启,商戶(或者支付的app)和銀行“炀基于安全的考慮伊约,Apple Pay 要求用戶設(shè)置了密碼。
綁定銀行卡:
1. 用戶輸入卡號等信息孕蝉,iOS 把信息加密后發(fā)送到 Apple 的服務(wù)器
2. Apple 加密信息屡律,根據(jù)你的支付網(wǎng)絡(luò)(eg.銀聯(lián)),進行對應(yīng)的加密降淮。信息還包含:你的iTunes 上的一些交易信息超埋,你的設(shè)備信息(手機號碼,名稱佳鳖,設(shè)備型號霍殴,地理位置等)。
3. 發(fā)卡銀行依據(jù) Apple 發(fā)過來的信息決定能否讓你綁卡成功
4. 綁卡成功的話系吩,銀行給 Apple 發(fā)送一個加密了的設(shè)備唯一的 Device Account Number (以及用于每次交易時生成動態(tài)安全碼的key)来庭,Apple 不能對 Device Account Number 解密,只保存到設(shè)備上的 Security Element 芯片里穿挨。也不會備份到 iCloud月弛。
5. Apple 保存卡號的一部分,以及 Device Account Number 的一部分科盛。帽衙。卡描述信息到 Wallet贞绵,用以幫助你管理銀行卡厉萝。
假如 card number 理解成我們的 urs,Device Account Number 就是設(shè)備信息的種子榨崩,還有生成OTP的key谴垫,三者
Apple Pay 店內(nèi)支付
1. iPhone 接近 NFC 終端時會展示你的默認銀行卡,通過你的 Touch ID 或者密碼授權(quán)支付蜡饵。Apple Watch 需要在解鎖狀態(tài)下雙擊 side button.
2. 授權(quán)后弹渔,Device Account Number ,動態(tài)安全碼以及一些附加信息會發(fā)送給 NFC 終端
3. 支付組織通過動態(tài)碼驗證支付請求是否來自你的授權(quán)設(shè)備
Apple Pay 應(yīng)用內(nèi)支付
1. Apple Pay 在獲取用戶授權(quán)后加密交易數(shù)據(jù)溯祸,處理后再用開發(fā)者指定的key加密數(shù)據(jù)肢专,把結(jié)果發(fā)送給開發(fā)者app舞肆。
2. 與店內(nèi)支付類似,Device Account Number 以及動態(tài)安全碼等信息會發(fā)送給 Apple
手機丟失
1. Find My iPhone 會清理你的綁定卡信息
2. 可以進入 iCloud settings 移除設(shè)備的支付授權(quán)博杖。
后記
1. 成功調(diào)出 Apple Pay 界面椿胯,指紋授權(quán)支付提示錯誤
Reference
[ENJOY的Apple Pay應(yīng)用內(nèi)支付接入實踐](http://geek.csdn.net/news/detail/60849)
[Apple Pay security and privacy overview](https://support.apple.com/en-sg/HT203027)