汪天星 程耕國
摘 要: 針對單一的支付方式不能滿足用戶多元化的支付需求,設計一個基于B/S的掃碼支付平臺。該平臺通過采用掃碼支付模式,實現(xiàn)對支付寶和微信支付服務的整合。平臺由服務器選型、支付訂單生成和異步回調(diào)處理三個模塊組成。服務器選型模塊用于從集群服務器中選擇性能相對最佳的服務器處理整個掃碼支付流程。支付訂單生成模塊調(diào)用第三方支付下單API生成預支付訂單。異步回調(diào)處理模塊的功能是接收支付通知和更新數(shù)據(jù)庫表的數(shù)據(jù)。平臺采用四項措施降低了支付風險,為用戶提供了既安全又快捷的支付服務。
關鍵詞: 支付方式; 支付服務整合; 服務器選型; 異步回調(diào)處理; 掃碼支付; 支付平臺
中圖分類號: 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
隨著互聯(lián)網(wǎng)技術的飛速發(fā)展,以支付寶為代表的第三方支付方式迅速在中國普及。第三方支付逐漸取代現(xiàn)金和信用卡支付,成為當前中國最受歡迎的支付方式。然而,中國消費者廣泛分布在線下、PC端和移動端,消費者的支付需求趨于多元化,支付場景過于碎片化。任意一種支付方式不足以應付所有支付場景和滿足所有支付需求。本平臺為了滿足消費者多元化的支付需求,基于掃碼支付模式整合支付寶和微信支付服務,為消費者提供靈活方便、多渠道的支付服務[1]。
1.1 支付原理
首先,平臺服務器按照第三方支付平臺(指支付寶和微信)制定的規(guī)則生成二維碼,并將它展示在PC網(wǎng)頁上。在用戶使用APP客戶端掃描二維碼之后,掃碼信息會立即被APP發(fā)送給平臺服務器,平臺服務器則根據(jù)接收到的信息識別用戶使用的APP是支付寶還是微信。然后,平臺服務器會調(diào)用相應的下單API生成預支付訂單。最后,用戶訪問由平臺生成的支付頁面,在該頁面上顯示著訂單詳情,用戶點擊支付頁面上的“立即繳費”按鈕就可以發(fā)起支付。第三方支付服務器以同步的形式返回支付結(jié)果給APP客戶端,以異步的形式返回支付結(jié)果給平臺服務器,具體流程如圖1所示。
1.2 服務器選型
當服務器的負載達到一定程度時,頁面加載變得很緩慢,造成非常差的用戶體驗[2]。如何在集群服務器中選擇性能相對最優(yōu)的服務器來處理掃碼支付業(yè)務流程是當前亟待解決的問題。在平臺的所有業(yè)務邏輯中,只有定時任務才會顯著加大服務器的負載。相較而言,其他業(yè)務邏輯對服務器造成的負載非常小,可以忽略。此外,服務器的硬件配置也在很大程度上影響著服務器性能。所以,在選擇高性能服務器時主要考慮以下兩類因素:一類是服務器正在執(zhí)行的定時任務的復雜度;另一類是服務器的硬件配置。對于不同復雜度的定時任務分別給予不同的權值,定時任務越復雜其權值越大,該服務器負載所占的權值是所有正在執(zhí)行的定時任務的權值總和。不同配置的服務器也賦予一個權值,權值越大服務器的硬件配置越好。服務器的負載和硬件配置所占的權值之和越小,表明該服務器當前的性能越佳[3]。
1.3 支付安全
支付領域最棘手的問題是安全性問題,如何降低支付風險是平臺十分重要的一個環(huán)節(jié)[4]。在掃碼支付流程中,可能會產(chǎn)生支付風險的情況有如下三種:一是信息未設置有效期;二是信息未加密;三是并發(fā)操作。針對以上三種情況,平臺采用四種措施降低支付風險。
1.3.1 有效期設置
如果程序沒有為二維碼設置一個有效期,則發(fā)生重復繳費情況的概率會變大。此外,程序設置的有效期不能太長,否則就會失去設置的意義。相似地,對于預支付訂單的訂單號,程序也設置了有效期來降低潛在的支付風險。平臺程序設置二維碼的有效期為5 min,當用戶在有效期之外掃描二維碼,程序會提示用戶異常信息。除此之外,平臺程序還會在倒計時5 min后,關閉用于展示二維碼的網(wǎng)頁。
1.3.2 數(shù)據(jù)加密
為了提高數(shù)據(jù)的傳輸安全性,平臺服務器與第三方支付服務器之間互相發(fā)送的信息必須加密。平臺程序使用MD5算法對數(shù)據(jù)進行加密[5?6]。加密步驟有兩步:第一步,程序?qū)⒃紨?shù)據(jù)中所有的參數(shù)按照參數(shù)名ASCII碼從小到大排序,使用“=”和“&”拼接成URL鍵值對格式的字符串A(如key1=value1&key2;=value2…);第二步,程序?qū)⒌谝徊降玫降淖址瓵和商戶密鑰key拼接在一起得到新字符串B,然后程序根據(jù)MD5算法處理字符串B,最后程序?qū)⑻幚斫Y(jié)果全部轉(zhuǎn)換為大寫字符。
當前主流的網(wǎng)絡傳輸協(xié)議有HTTP和HTTPS等。由于HTTP協(xié)議沒有加密功能, HTTP請求很容易被黑客偽造,因而其傳輸安全性很低[7]。HTTPS協(xié)議在HTTP基礎之上增加了身份驗證和加密功能,它的傳輸安全性較高[8]。為了提高程序的安全可靠性,本平臺所有的核心接口都使用HTTPS協(xié)議。
1.3.3 樂觀鎖
當多個用戶在同一時刻繳費時,會有較大概率發(fā)生重復支付的情況,平臺程序通過使用樂觀鎖來避免重復支付的發(fā)生。樂觀鎖一般用于解決由并發(fā)操作引起的問題[9],它的核心是數(shù)據(jù)版本version的記錄機制。當用戶訪問訂單詳情頁面時,程序會查詢數(shù)據(jù)版本version,并將它記錄下來。當一個用戶點擊支付頁面的“立即繳費”按鈕時,程序會比較當前數(shù)據(jù)版本version與之前查詢出的version,如果兩個version值一致,則當前version值加一,用戶可以繼續(xù)支付;否則,用戶無法支付,提示用戶重試。平臺程序通過這套記錄機制避免了重復支付情況的發(fā)生,具體實現(xiàn)流程圖如圖2所示。
1.3.4 唯一索引
在用戶支付成功之后,第三方支付服務器會每隔一段時間發(fā)送一次支付通知來回調(diào)平臺接口,支付通知的發(fā)送間隔不固定。有較小的幾率會發(fā)生重復的支付通知在極短的時間內(nèi)多次更新業(yè)務數(shù)據(jù)的情況。通過對訂單號字段設置唯一索引,平臺程序解決了上述并發(fā)問題。只要有一次支付通知修改了平臺的數(shù)據(jù),程序就往數(shù)據(jù)庫表新增一條帶有訂單號的記錄,由于訂單號已經(jīng)存在數(shù)據(jù)庫中,其他后續(xù)重復的支付通知將無法更新業(yè)務數(shù)據(jù)。
平臺采用B/S架構,遵循MVC開發(fā)模式[10]。后端使用的框架有Dubbo,Spring和SpringMVC,前端主要采用的技術是EasyUI。此外,為了提高服務器的運行速度,平臺搭建了集群服務器,其總體結(jié)構如圖3所示。
2.1 平臺功能模塊
掃碼支付平臺主要由服務器選型、支付訂單生成和異步回調(diào)處理三個功能模塊組成,具體框圖如圖4所示。
2.2 數(shù)據(jù)庫設計
本平臺面向于收取小區(qū)物業(yè)費,涉及到的表共有11張,分別是小區(qū)表TBAA01、樓棟表TBAA02、單元表TBAA03、樓層表TBAA04、房間表TBAA05、用戶表TBBB01、服務器表TBCC01、二維碼表TBCC02、物業(yè)費賬單表TBDD01、訂單信息表TBDD02和繳費記錄表TBDD03。各表之間的關系如圖5所示。
3.1 服務器選型實現(xiàn)
當集群服務器中任意一臺服務器開始執(zhí)行定時任務時,程序會向TBCC01表新增一條記錄,同時設置字段JOB_FLAG_的值為0。當定時任務即將結(jié)束時,程序會修改字段JOB_FLAG_的值為1。結(jié)合式(2),程序可以查詢出[Wall]的最小值Wmin。同時,程序也可以查詢出性能最佳服務器的IP地址和端口號,主要代碼如下:
在獲取性能相對最優(yōu)服務器的IP地址和端口號后,新的掃碼支付流程將完全由最優(yōu)服務器處理。新掃碼支付流程主要指從生成二維碼到處理支付通知整個階段,如圖1所示。
3.2 數(shù)據(jù)加密實現(xiàn)
MD5加密的原理是將每個字符轉(zhuǎn)化為十六進制,原始數(shù)據(jù)在使用MD5工具方法加密前,需要轉(zhuǎn)化為URL鍵值對形式的字符串。數(shù)據(jù)加密的主要代碼如下:
3.3 支付實現(xiàn)圖
在掃碼支付流程中,只有兩個頁面展示給用戶看,它們分別是二維碼頁面和顯示著訂單詳情的支付頁面,如圖6所示。
本文針對單一支付方式不能夠滿足用戶多元化的支付需求的現(xiàn)狀,設計一個基于B/S的掃碼支付平臺。該平臺基于掃碼支付模式,為用戶提供了快捷、安全的支付服務。平臺通過量化服務器負載和硬件配置實現(xiàn)了自動獲取性能最優(yōu)的服務器,從而為用戶提供快捷的服務。平臺通過采用設置有效期、信息加密、樂觀鎖、唯一索引等方式降低了支付風險,從而為用戶提供了安全的服務。
參考文獻
[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] 劉亞軍.網(wǎng)上支付系統(tǒng)的安全性研究[J].現(xiàn)代電子技術,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算法在擬態(tài)計算機上的實現(xiàn)及改進[J].小型微型計算機系統(tǒng),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] 王鵬,季明,梅強,等.交換式網(wǎng)絡下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協(xié)議的服務器程序分析[J].現(xiàn)代電子技術,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] 郝娉婷,胡亮,姜靜妍,等.基于多管理節(jié)點的樂觀鎖協(xié)議[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.