汪天星 程耕國
摘 要: 針對單一的支付方式不能滿足用戶多元化的支付需求,設計一個基于B/S的掃碼支付平臺。該平臺通過采用掃碼支付模式,實現對支付寶和微信支付服務的整合。平臺由服務器選型、支付訂單生成和異步回調處理三個模塊組成。服務器選型模塊用于從集群服務器中選擇性能相對最佳的服務器處理整個掃碼支付流程。支付訂單生成模塊調用第三方支付下單API生成預支付訂單。異步回調處理模塊的功能是接收支付通知和更新數據庫表的數據。平臺采用四項措施降低了支付風險,為用戶提供了既安全又快捷的支付服務。
關鍵詞: 支付方式; 支付服務整合; 服務器選型; 異步回調處理; 掃碼支付; 支付平臺
中圖分類號: TN820.2?34; TP311 文獻標識碼: A 文章編號: 1004?373X(2018)22?0049?04
Abstract: As the single payment mode cannot meet users′ diversified payment needs, a scanning?code payment platform based on B/S is designed. On the platform, the integration of Alipay and WeChat payment services is realized by adopting the scanning?code payment mode. The platform is composed of three modules of server model selection, payment order generation, and asynchronous callback processing. The server model selection module is used to select the relatively high?performance server from cluster servers to handle the whole scanning?code payment process. The payment order generation module is used to invoke the third?party payment order API to generate the prepayment order. The functions of the asynchronous callback processing module is to receive payment notifications and update the data in database tables. Four measures are taken for the platform to reduce payment risks, which can provide users with secure, rapid and convenient payment services.
Keywords: payment mode; payment service integration; server model selection; asynchronous callback processing; scanning?code payment; payment platform
隨著互聯網技術的飛速發展,以支付寶為代表的第三方支付方式迅速在中國普及。第三方支付逐漸取代現金和信用卡支付,成為當前中國最受歡迎的支付方式。然而,中國消費者廣泛分布在線下、PC端和移動端,消費者的支付需求趨于多元化,支付場景過于碎片化。任意一種支付方式不足以應付所有支付場景和滿足所有支付需求。本平臺為了滿足消費者多元化的支付需求,基于掃碼支付模式整合支付寶和微信支付服務,為消費者提供靈活方便、多渠道的支付服務[1]。
1.1 支付原理
首先,平臺服務器按照第三方支付平臺(指支付寶和微信)制定的規則生成二維碼,并將它展示在PC網頁上。在用戶使用APP客戶端掃描二維碼之后,掃碼信息會立即被APP發送給平臺服務器,平臺服務器則根據接收到的信息識別用戶使用的APP是支付寶還是微信。然后,平臺服務器會調用相應的下單API生成預支付訂單。最后,用戶訪問由平臺生成的支付頁面,在該頁面上顯示著訂單詳情,用戶點擊支付頁面上的“立即繳費”按鈕就可以發起支付。第三方支付服務器以同步的形式返回支付結果給APP客戶端,以異步的形式返回支付結果給平臺服務器,具體流程如圖1所示。
1.2 服務器選型
當服務器的負載達到一定程度時,頁面加載變得很緩慢,造成非常差的用戶體驗[2]。如何在集群服務器中選擇性能相對最優的服務器來處理掃碼支付業務流程是當前亟待解決的問題。在平臺的所有業務邏輯中,只有定時任務才會顯著加大服務器的負載。相較而言,其他業務邏輯對服務器造成的負載非常小,可以忽略。此外,服務器的硬件配置也在很大程度上影響著服務器性能。所以,在選擇高性能服務器時主要考慮以下兩類因素:一類是服務器正在執行的定時任務的復雜度;另一類是服務器的硬件配置。對于不同復雜度的定時任務分別給予不同的權值,定時任務越復雜其權值越大,該服務器負載所占的權值是所有正在執行的定時任務的權值總和。不同配置的服務器也賦予一個權值,權值越大服務器的硬件配置越好。服務器的負載和硬件配置所占的權值之和越小,表明該服務器當前的性能越佳[3]。
1.3 支付安全
支付領域最棘手的問題是安全性問題,如何降低支付風險是平臺十分重要的一個環節[4]。在掃碼支付流程中,可能會產生支付風險的情況有如下三種:一是信息未設置有效期;二是信息未加密;三是并發操作。針對以上三種情況,平臺采用四種措施降低支付風險。
1.3.1 有效期設置
如果程序沒有為二維碼設置一個有效期,則發生重復繳費情況的概率會變大。此外,程序設置的有效期不能太長,否則就會失去設置的意義。相似地,對于預支付訂單的訂單號,程序也設置了有效期來降低潛在的支付風險。平臺程序設置二維碼的有效期為5 min,當用戶在有效期之外掃描二維碼,程序會提示用戶異常信息。除此之外,平臺程序還會在倒計時5 min后,關閉用于展示二維碼的網頁。
1.3.2 數據加密
為了提高數據的傳輸安全性,平臺服務器與第三方支付服務器之間互相發送的信息必須加密。平臺程序使用MD5算法對數據進行加密[5?6]。加密步驟有兩步:第一步,程序將原始數據中所有的參數按照參數名ASCII碼從小到大排序,使用“=”和“&”拼接成URL鍵值對格式的字符串A(如key1=value1&key2;=value2…);第二步,程序將第一步得到的字符串A和商戶密鑰key拼接在一起得到新字符串B,然后程序根據MD5算法處理字符串B,最后程序將處理結果全部轉換為大寫字符。
當前主流的網絡傳輸協議有HTTP和HTTPS等。由于HTTP協議沒有加密功能, HTTP請求很容易被黑客偽造,因而其傳輸安全性很低[7]。HTTPS協議在HTTP基礎之上增加了身份驗證和加密功能,它的傳輸安全性較高[8]。為了提高程序的安全可靠性,本平臺所有的核心接口都使用HTTPS協議。
1.3.3 樂觀鎖
當多個用戶在同一時刻繳費時,會有較大概率發生重復支付的情況,平臺程序通過使用樂觀鎖來避免重復支付的發生。樂觀鎖一般用于解決由并發操作引起的問題[9],它的核心是數據版本version的記錄機制。當用戶訪問訂單詳情頁面時,程序會查詢數據版本version,并將它記錄下來。當一個用戶點擊支付頁面的“立即繳費”按鈕時,程序會比較當前數據版本version與之前查詢出的version,如果兩個version值一致,則當前version值加一,用戶可以繼續支付;否則,用戶無法支付,提示用戶重試。平臺程序通過這套記錄機制避免了重復支付情況的發生,具體實現流程圖如圖2所示。
1.3.4 唯一索引
在用戶支付成功之后,第三方支付服務器會每隔一段時間發送一次支付通知來回調平臺接口,支付通知的發送間隔不固定。有較小的幾率會發生重復的支付通知在極短的時間內多次更新業務數據的情況。通過對訂單號字段設置唯一索引,平臺程序解決了上述并發問題。只要有一次支付通知修改了平臺的數據,程序就往數據庫表新增一條帶有訂單號的記錄,由于訂單號已經存在數據庫中,其他后續重復的支付通知將無法更新業務數據。
平臺采用B/S架構,遵循MVC開發模式[10]。后端使用的框架有Dubbo,Spring和SpringMVC,前端主要采用的技術是EasyUI。此外,為了提高服務器的運行速度,平臺搭建了集群服務器,其總體結構如圖3所示。
2.1 平臺功能模塊
掃碼支付平臺主要由服務器選型、支付訂單生成和異步回調處理三個功能模塊組成,具體框圖如圖4所示。
2.2 數據庫設計
本平臺面向于收取小區物業費,涉及到的表共有11張,分別是小區表TBAA01、樓棟表TBAA02、單元表TBAA03、樓層表TBAA04、房間表TBAA05、用戶表TBBB01、服務器表TBCC01、二維碼表TBCC02、物業費賬單表TBDD01、訂單信息表TBDD02和繳費記錄表TBDD03。各表之間的關系如圖5所示。
3.1 服務器選型實現
當集群服務器中任意一臺服務器開始執行定時任務時,程序會向TBCC01表新增一條記錄,同時設置字段JOB_FLAG_的值為0。當定時任務即將結束時,程序會修改字段JOB_FLAG_的值為1。結合式(2),程序可以查詢出[Wall]的最小值Wmin。同時,程序也可以查詢出性能最佳服務器的IP地址和端口號,主要代碼如下:
在獲取性能相對最優服務器的IP地址和端口號后,新的掃碼支付流程將完全由最優服務器處理。新掃碼支付流程主要指從生成二維碼到處理支付通知整個階段,如圖1所示。
3.2 數據加密實現
MD5加密的原理是將每個字符轉化為十六進制,原始數據在使用MD5工具方法加密前,需要轉化為URL鍵值對形式的字符串。數據加密的主要代碼如下:
3.3 支付實現圖
在掃碼支付流程中,只有兩個頁面展示給用戶看,它們分別是二維碼頁面和顯示著訂單詳情的支付頁面,如圖6所示。
本文針對單一支付方式不能夠滿足用戶多元化的支付需求的現狀,設計一個基于B/S的掃碼支付平臺。該平臺基于掃碼支付模式,為用戶提供了快捷、安全的支付服務。平臺通過量化服務器負載和硬件配置實現了自動獲取性能最優的服務器,從而為用戶提供快捷的服務。平臺通過采用設置有效期、信息加密、樂觀鎖、唯一索引等方式降低了支付風險,從而為用戶提供了安全的服務。
參考文獻
[1] 黃曉芳,周亞建,賴欣,等.基于第三方的安全移動支付方案[J].計算機工程,2010,36(18):158?159.
HUANG Xiaofang, ZHOU Yajian, LAI Xin, et al. Security mobile payment scheme based on the third party [J]. Computer engineering, 2010, 36(18): 158?159.
[2] 孫喬,鄧卜僑,王志強,等.一種基于分布式服務器集群的可擴展負載均衡策略技術[J].電信科學,2017,33(9):190?196.
SUN Qiao, DENG Buqiao, WANG Zhiqiang, et al. A scalable load balancing strategy based on distributed server cluster [J]. Telecommunications science, 2017, 33(9): 190?196.
[3] 姜勁松,楊波,繆志敏,等.基于任務和用戶屬性的工作流任務分配算法[J].計算機仿真,2015,32(12):222?225.
JIANG Jinsong, YANG Bo, MIAO Zhimin, et al. A workflow task assignment method based on the properties of task and user [J]. Computer simulation, 2015, 32(12): 222?225.
[4] 劉亞軍.網上支付系統的安全性研究[J].現代電子技術,2013,36(8):74?75.
LIU Yajun. Research on security of online payment system [J]. Modern electronics technique, 2013, 36(8): 74?75.
[5] 譚健,周清雷,斯雪明,等.全流水架構MD5算法在擬態計算機上的實現及改進[J].小型微型計算機系統,2017,38(6):1216?1220.
TAN Jian, ZHOU Qinglei, SI Xueming, et al. Implementation and improvement of full?pipeline MD5 algorithm based on mimic computer [J]. Journal of Chinese computer systems, 2017, 38 (6): 1216?1220.
[6] 洪丹丹,羅軍峰,馮興利,等.基于RSA與MD5簽名的實名制微門戶設計[J].微電子學與計算機,2016,33(9):36?41.
HONG Dandan, LUO Junfeng, FENG Xingli, et al. Design of a real?name WeChat portal based on RSA and MD5 signature [J]. Microelectronics & computer, 2016, 33(9): 36?41.
[7] 王鵬,季明,梅強,等.交換式網絡下HTTP會話的劫持研究及其對策[J].計算機工程,2007,33(5):135?137.
WANG Peng, JI Ming, MEI Qiang, et al. HTTP session hijacking on switch LAN and its countermeasures [J]. Computer engineering, 2007, 33(5): 135?137.
[8] 祝瑞,車敏.基于HTTP協議的服務器程序分析[J].現代電子技術,2012,35(4):117?119.
ZHU Rui, CHE Min. Analysis of server program based on HTTP protocol [J]. Modern electronics technique, 2012, 35(4): 117?119.
[9] 郝娉婷,胡亮,姜靜妍,等.基于多管理節點的樂觀鎖協議[J].吉林大學學報(工學版),2017,47(1):227?234.
HAO Pingting, HU Liang, JIANG Jingyan, et al. Optimistic lock protocol of multi?managed nodes [J]. Journal of Jilin University (Engineering and technology edition), 2017, 47(1): 227?234.
[10] 劉紅霞,陸文迪.改進的MVC設計模式的研究與應用[J].計算機工程與科學,2015,37(9):1688?1691.
LIU Hongxia, LU Wendi. Research and implementation of an improved MVC design pattern [J]. Computer engineering and science, 2015, 37(9): 1688?1691.