ApplePay高調入華,教你在app裡上線ApplePay

發表於2016-03-19

ApplePay在中國上線後,就有許多線上app前後腳加入了對其的接入支援,個人比較喜歡的ENJOY也搶在首批接入了ApplePay應用內購買。本文將分享作者的接入經驗。

ApplePay是蘋果公司推出的一種線上/線下的便捷支付方式,根據TouchId來驗證支付卡持卡人身份,ApplePay並不參與資金流動,最終還是讓銀行完成扣款處理,目前據Apple介紹只配備在iphone6以上和新款的ipad Air2和ipad mini3上,中國地區最低系統要求為IOS9.2,對於一種新支付體驗,這門檻的確有點高了。蘋果開發文件對ApplePay工作方式的介紹.

 

線下支付使用NFC POST機只需要與銀聯聯絡簽約租用即可,我們來介紹線上支付的流程和app應用內接入的方法。

目前的接入方式有兩種,一是使用第三方提供商的SDK接入,另一種是讓PassKit Framework直接與銀聯的介面對接,當然網路上還有一些自己使用PassKit PaymentRequest自己生成訂單組織資訊,直接與Apple對接的Demo,因為我們不可能每家銀行跑去簽約,大陸的銀行也不會給我們開放特許,因此這種方式僅僅能用於測試ApplePay的功能和API嚐鮮,並不適用於生產中。
ApplePay官網上有列出中國目前支援並提供SDK的第三方提供商

使用第三方SDK接入的優點是開發成本比較低,並且各自都應該有高度定製的Payment Sheet(因訂單資訊完整度的不同),可供定製更詳細的商品資訊展示,缺點就是要錢。
若我們選擇後者,相對開發成本會高,移動端不僅需要對支援性進行驗證,協商銀聯介面資料對Payment Sheet的展示關閉進行控制,對各種異常進行捕抓和處理,同時後臺需要自己實現對銀聯介面的認證互動,對交易資料的標準封裝,訂單狀態的處理,支付資訊的解密等。
我們選擇使用銀聯SDK接入這種折中的方式,免費,工作量可以接受。

使用銀聯SDK接入的實現方式如圖所示,主要工作是商戶後臺利用現成的API與銀聯的互動:

 

申請MerchantID並更新你的證照:

向蘋果申請我們獨有的商戶ID,這裡我借用Yasin朋友在簡書上分享的詳細步驟,真的很詳細易懂。

獲得MerchantId後,更新你的證照,並且於專案->targets->Capabilities中開啟ApplePay許可權,選擇正確的MerchantID,讓三個steps成為tick狀態完全許可權的配置。

 

ok開始與銀聯碰頭,於銀聯商家技術服務中心找到ApplePay入口,然後在”技術文件”選項卡中可以找到相應的SDK和後臺文件。

 

這裡我使用PHP後臺,在下載的SDK壓縮包裡找到了PHP Version SDK,忽略掉這個外殼,我們需要將子資料夾upacp_demo_app部署到我們的伺服器中。

 

這裡我將upacp_demo_app部署到我mac的PHP環境中,開啟upacp_demo_app/demo/api_05_app可以看見各種對訂單處理的介面。

 

訂單的建立,取消,查詢,退款等,現在我們測試下建立訂單介面

訂單引數

下圖是建立訂單的請求引數,目前銀聯建立ApplePay訂單僅支援圖中所示的引數欄位,基本滿足使用但可定製性比較低,最基本的訂單引數merId商戶號,orderId訂單號,txnTime訂單傳送時間,txnAmt訂單金額,目前測試階段我們可以通過直接呼叫此介面post傳參,也可以直接寫死在php檔案中

  • 注意:這裡的merId是銀聯商戶號,而非蘋果分配的MerchantID。
     

測試證照

瞭解到這裡後還沒有具備生成訂單的條件,然後我們需要配置配置簽名證照和驗簽證照的路徑,這些證照在SDK下載包裡面已經有附帶,我們只需要在upacp_demo_app/sdk/SDKConfig.php檔案中配置好他們的路徑即可

 

這裡需要配置主機的絕對路徑,不能使用專案相對路徑,完成SDK_SIGN_CERT_PATH,SDK_ENCRYPT_CERT_PATH,SDK_VERIFY_CERT_DIR路徑的配置

成功獲取tn

我們請求下Form_6_2_AppConsume.php介面,即可建立訂單,並且返回對應的Trade Name,在App端我們就是拿這個Trade Name來對相應的訂單進行付款。

 

拿到訂單tn後,我們已經可以使用銀聯SDK調起支付,在這之前還要做的就是對裝置和平臺的支援性檢測,通過,present出Payment Sheet即可。

工程配置:

1.新增SDK包:
將下載SDK解壓包中找到applePaySDK資料夾,加入到需要接入ApplePay的專案中。

 

**這裡注意,專案內如果同時支援銀聯普通支付的話,因為兩個庫引用重複,最好的辦法就是升級銀聯SDK至最新版本(3.3.3),當然可以使用新增Linker Flags的方式解決,或者可以自己剝離掉重複部分,我是懶人,我選擇升級哈哈。
2.為工程引入必須的framework:

  • CFNetwork.framework
  • PassKit.framework
  • SystemConfiguration/framework
  • libUPAPayPlugin.a
  • libz.1.2.5.tbd
    3.銀聯SDK使用http請求,在ios9以後需在工程plist檔案中新增NSAppTransportSecurity來支援Http繼續使用。

—注意—

  • 因為銀聯SDK內部分程式碼是由C/C++組織,這裡必須新增libz.1.2.5.tbd,並且將引用到UPAPayPlugin.h的原始檔的字尾改為.mm
  • 同時檢查Target->Build Settings->Search Paths->Library Search Paths中自定義庫libUPAPayPlugin.a的路徑是否正確
    4.最後可以開始寫程式碼了,在需要調起ApplePay支付控制元件的檔案中引入標頭檔案UPAPayPlugin.h(記得檔名字尾需要改成.mm),PassKit/PassKit.h

如果需要對借記卡/信用卡作限制,在檢查卡片支援性的步驟可以這樣寫:

最後是銀聯ApplePay的支付回撥:
返回的UPPayResult物件中有各種支付狀態,同時我們還應該檢查他的otherInfo屬性,裡面包含銀聯的優惠活動資訊,如果有則應該在支付成功頁中告知客戶。

otherInfo中包含優惠資訊的格式為:

!!!目前不支援商戶自定義優惠活動!!!
博主自己研究了php API很久後無果,諮詢銀聯客服,然後徹底死心。。

展示

以下左圖是通過銀聯SDK接入,因為可定製引數比較少,Payment Sheet比較簡短,右圖是使用蘋果API直接生成的訂單。

 

相信美團的ApplePay也是跟銀聯對接的,心血來潮買了個流量順便作下對比

 

生產環境:

csr檔案
若需要在生產環境中使用銀聯SDK接入ApplePay,首先需向銀聯申請開通ApplePay服務(聯絡下籤約服務),並從銀聯商戶服務平臺生成ApplePay專用的CSR檔案,重新去蘋果開發者網站簽署證照。

 

公鑰,私鑰
公鑰在SDK下載包裡面有,私鑰在cfca入網通知郵件裡面附帶也可以自行下載,一個商戶號唯一一份私鑰和授權碼,跟銀聯普通支付私鑰是同一份。

配置
修改生產環境配置檔案中的簽名證照,密碼,後臺url地址
更換正式環境商戶號(也可以是同一個)
app前端startPay方法的mode引數改為”00″

注意事項:

  • 銀聯常規支付SDK升級最新版本3.3.3
  • 專案內是否有引入libz.1.2.5.tbd
  • 將引用到UPAPayPlugin.h的原始檔的字尾改為.mm
  • 檢查Target->Build Settings->Search Paths->Library Search Paths中自定義庫libUPAPayPlugin.a的路徑是否正確
  • ApplePay的按鈕展示必須使用官方指定,否則過不了稽核

相關文章