文/林虎 蘇浩偉 謝振東 李濟騰 陸永靜
近年來,隨著智能手機以及移動互聯網的廣泛應用,微信支付和支付寶等掃碼支付技術在各行各業的應用已日漸成熟。以往城市一卡通交通IC卡的銷售或者充值業務,通常需要在服務點或商戶配置專職服務人員,并以現金方式完成支付交易,現金的清點以及押運成本非常大,另外,攜帶現金、假鈔、換鈔等同樣給乘客造成諸多煩惱。在城市主要交通站點或者客流量較大的交通樞紐站部署自助售卡充值終端,可以全天候為乘客服務。乘客使用微信或支付寶等手機應用,掃描自助終端生成的二維碼,完成在線支付后,即可購買交通IC卡或者對交通IC卡進行充值,大大提高便利性和降低服務點的成本。
本文使用的掃碼支付技術,是指按照掃碼支付提供商(微信支付和支付寶等)的支付協議生成支付二維碼,并在自助售卡充值終端展示二維碼,用戶使用手機APP的“掃一掃”功能完成支付交易的技術。兩種掃碼支付技術都提供了完全公開的API開發接口,開發者可以自由查看,接口清晰。
微信支付和支付寶支付提供的掃碼支付功能大同小異,在API接口方面,主要接口有,統一下單接口、支付結果通知接口、查詢接口、下載賬單以及相關的退款接口等,總體功能和流程基本一樣。不過也有一些細微差別,比如:
圖1:系統結構圖
(1)在微信支付中叫做掃碼支付,而在支付寶中屬于“當面付”下的產品。
(2)微信掃碼支付的商戶平臺中有三個賬戶,基本賬戶(存放用戶交易轉入的資金)、手續費賬戶和運營賬戶(手續費和付款的金額都從運營賬戶出),管理更加方便;而支付寶沒有類似的賬戶分類。
(3)在API接口上面也有一些差異,比如微信支付通過“指定支付方式”來限制信用卡支付,而支付寶的方式更加靈活,有“可用渠道”和“禁用渠道”(渠道列表主要包括:借記卡、信用卡、余額寶等)。
開發者可以選JAVA、.NET C#、PHP任意一種語言開發,快速接入自己的商業應用支付系統。本文以JAVA語言為例進行簡單描述。
在開發掃碼支付之前,首先要成為掃碼支付系統提供商的開發者,取得APPID(應用開發者ID),然后,與提供商簽訂相關的商戶協議,最后生成通信密鑰證書后即可開始軟件開發。其中,微信支付的通信密鑰證書在微信商戶平臺下載;支付寶的證書由開發者自己生成,然后上傳給支付寶平臺。
為了實現掃碼支付功能,需要建立自助終端后臺服務系統,結構圖參見圖1。
用戶在自助售卡充值終端選擇商品或者充值金額后,終端向后臺系統發起請求,后臺服務系統調用掃碼支付系統的統一下單API接口,返回二維碼鏈接URL,后臺服務系統將該URL下發給自助終端,自助終端調用二維碼轉換器生成二維碼并展示給用戶,用戶用手機“掃一掃”二維碼,輸入支付密碼并完成支付,最后掃碼支付系統將支付結果通知自助終端后臺服務系統。支付后,終端通過一卡通充值系統完成對IC卡的充值。
在系統安全性方面,網絡間通信采用HTTPS安全套接層傳輸協議,確保整個交易通信過程處于安全保護狀態,通信密鑰證書具有不可抵賴等安全特性。
自助售卡充值終端提供售卡和充值等功能,下面以微信支付為例介紹系統流程以及API接口,具體的支付流程如圖2。
用戶在自助終端上選擇好商品以后,自助終端后臺系統調用“統一下單接口”向掃碼支付系統發起預支付請求,具體接口API為:
把二維碼數據保存成文件code.png文件或者直接在自助終端界面上顯示。
發起預支付請求時設置了notify_url異步通知地址,當用戶支付成功以后,支付系統會向該地址發送成功請求,系統需要編程實現對請求數據的采集,并應答成功的信息。系統使用wxpayresult.jsp頁面來接收支付系統發來的數據,實現如下:
圖2:自助終端掃碼支付流程
微信支付或者支付寶等掃碼支付為商戶開發者提供了功能完善的API接口,商戶結算對賬流程也方便快捷,可實時查看每筆交易的狀態以及資金的使用和到帳等情況。通過在自助售卡充值終端中使用掃碼支付服務,可讓乘客體驗到更加便捷的城市一卡通服務,也可為城市一卡通公司或者自助服務運營商大大節約服務點的人工成本。