Apple Pay 筆記

Apple Pay


?一個方便 & 安全的移動支付技術,讓用戶完成他們的支付環節并把支付相關的信息告訴你

?只可以購買實物或者服務,不可以用來支付IAP

應用內集成Apple Pay需要兩個部分:交易授權與交易處理。交易授權在應用內進行,通過PassKit.framework所提供的接口向用戶獲取支付授權(payment token);而交易處理則需要授權后調用可受理交易的服務器接口(將token傳入服務器進行處理),你可以選擇某個支付平臺來處理交易,或者也可以自己實現交易處理過程,蘋果官方比較推薦前者。

譬如選擇了接入銀聯的Apple Pay,所以除了查看 Apple 的文檔以外,還要看銀聯的開發文檔。

配置

Merchant Identifier

1. 到 Member Center 上為 App 注冊 Merchant ID

2. 為 Merchant ID 上傳 CSR (從銀聯獲取)

3. 通過上傳的 CSR 生成證書,并下載

Steps

1. 創建 Payment Request,設置它的 subtotal,discount 等信息

2. 通過 payment authoriztion view controller 展示支付信息,等待用戶支付授權

3. 用戶授權支付后,Apple Pay 加密處理支付信息,依據 merchant id 以及對應的支付卡信息計算出 payment token

4. payment token 用 Merchant Id對應的證書加密,發送到 Apple Server

5. Apple Server 把 token 交到我們的 App

6. Payment token 交給可以處理交易的第三方平臺,我們這里是銀聯SDK

注意: app bundle 里不需要包含 Merchant Id 的證書

Payment Request

1. 創建 Payment Request 之前,最好先檢查是否可以使用 Payment

canMakePayments 是否支持 Apple Pay,NO時不要展示 Apple Pay 按鈕

canMakePaymentsUsingNetworks:

如果 canMakePayments 是 YES,canMakePaymentsUsingNetworks 是 NO。意味著當前設備沒有綁銀行卡,你可以展示一個 setup 按鈕,推薦調用 openPaymentSetup 鼓勵用戶添加銀行卡

2. Apple Pay 的條件滿足以后,在用戶按下 Apple Pay 后應該馬上展示 payment 的信息等待用戶授權。

3. 如果支付流程只在 Web 的方式上進行,你要在現有的支付流程中插入 Native 代碼的邏輯,譬如是捕捉url的方式。

Currency Code & Country Code

currencyCode 是描述支付所用的貨幣,三位字符:USD

countryCode 是處理這個訂單的地方,兩位字符:US

Merchant Id

request 的 merchant id 必須在 app entitlement 里聲明

Authorizing Payments

當用戶授權了支付,Apple Pay 會生成一個與 Apple Server 和本設備的 Security Element 對應的 payment token。

1. Security Element 在獲取 payment request 之后,把payment card 以及 商戶 的信息加密后送到 Apple 的服務端

2. Apple 的服務端再利用配置好的 Merchant ID 的證書加密 payment 數據,返回給設備

3. 在 paymentAuthorizationViewController:didAuthorizePayment:completion: 協議中返回 token。app 把 token 發到擁有解釋能力的服務端進行扣款。

4. 當 Apple Pay 顯示了支付的狀態信息之后,paymentAuthorizationViewControllerDidFinish: 會觸發,app dimiss 支付授權的界面,并展示自己的訂單確認界面。

Processing Payments

使用的是銀聯SDK,有銀聯處理支付之后的事宜。


UI

Apple Pay 的 UI 有嚴格要求:

1. 對于 iOS8.3 及以后,使用 PKPaymentButton 創建按鈕

2. 對于 iOS8.3 以前,使用官方指定尺寸的圖片

2. Apple 對 Apple Pay 的展示有嚴格要求,甚至是 "Apple Pay" 這個詞組都不允許有任何不一致, 如果不想反復被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。如果當前的設備不支持 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 中的內容,但不可以干擾用戶對 sheet 的交互

Payment Token

用戶通過 Touch ID 授權(有些情況還需要銀行的 PIN code)之后,你的 app 會獲得 PassKit 的 payment token。里面包含完成交易所必要的信息,包括識別設備的 account number,金額,唯一的一次性密文。擁有證書私鑰的商戶可以解密這些支付信息,或者是提供支付SDK的商戶。

在中國,目前能夠提供支持 Apple Pay 支付解決方案的支付平臺:

銀聯,連連支付(LianlianPay),首信易支付(PayEase),易寶支付(YeePay),銀聯商務(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 以及進行支付授權的界面。

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 用于訂閱類型的周期性消費,你需要描述清楚訂閱的周期,以及周期內所提供的服務,以及如何取消訂閱

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 獲取的數據在用于提供第三方實現支付時要符合法律要求


其它

Wallet 綁定銀行卡

Apple Pay 的設計理念:不收集任何支付,交易的信息。而一個交易涉及到的有用戶,商戶(或者支付的app)和銀行。基于安全的考慮,Apple Pay 要求用戶設置了密碼。

綁定銀行卡:

1. 用戶輸入卡號等信息,iOS 把信息加密后發送到 Apple 的服務器

2. Apple 加密信息,根據你的支付網絡(eg.銀聯),進行對應的加密。信息還包含:你的iTunes 上的一些交易信息,你的設備信息(手機號碼,名稱,設備型號,地理位置等)。

3. 發卡銀行依據 Apple 發過來的信息決定能否讓你綁卡成功

4. 綁卡成功的話,銀行給 Apple 發送一個加密了的設備唯一的 Device Account Number (以及用于每次交易時生成動態安全碼的key),Apple 不能對 Device Account Number 解密,只保存到設備上的 Security Element 芯片里。也不會備份到 iCloud。

5. Apple 保存卡號的一部分,以及 Device Account Number 的一部分。。卡描述信息到 Wallet,用以幫助你管理銀行卡。

假如 card number 理解成我們的 urs,Device Account Number 就是設備信息的種子,還有生成OTP的key,三者

Apple Pay 店內支付

1. iPhone 接近 NFC 終端時會展示你的默認銀行卡,通過你的 Touch ID 或者密碼授權支付。Apple Watch 需要在解鎖狀態下雙擊 side button.

2. 授權后,Device Account Number ,動態安全碼以及一些附加信息會發送給 NFC 終端

3. 支付組織通過動態碼驗證支付請求是否來自你的授權設備

Apple Pay 應用內支付

1. Apple Pay 在獲取用戶授權后加密交易數據,處理后再用開發者指定的key加密數據,把結果發送給開發者app。

2. 與店內支付類似,Device Account Number 以及動態安全碼等信息會發送給 Apple

手機丟失

1. Find My iPhone 會清理你的綁定卡信息

2. 可以進入 iCloud settings 移除設備的支付授權。

后記

1. 成功調出 Apple Pay 界面,指紋授權支付提示錯誤

Reference

[ENJOY的Apple Pay應用內支付接入實踐](http://geek.csdn.net/news/detail/60849)

[Apple Pay security and privacy overview](https://support.apple.com/en-sg/HT203027)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容