崔陽
(中國勞動關(guān)系學(xué)院數(shù)學(xué)與計(jì)算機(jī)教學(xué)部,北京100048)
近年來,隨著4G 網(wǎng)絡(luò)的迅速發(fā)展和微信等新型移動社交軟件的普及,超市自助零售業(yè)務(wù)這種新型購物模式逐漸興起,一些企業(yè)紛紛面向市場推出了自己的智能零售方案和產(chǎn)品。掃碼支付屬于移動支付的一種,也是自助零售的核心功能之一。其基本流程是:用戶在超市使用手機(jī)、平板電腦等移動設(shè)備掃描想要購買的商品條形碼,即可查看到商品信息、了解產(chǎn)品推薦、自助提交訂單并結(jié)賬;同時超市也可以不定期將優(yōu)惠信息、促銷活動、會員資訊等服務(wù)直接推送至用戶的移動設(shè)備。這樣不僅可以提升用戶的購物體驗(yàn)、降低超市的人力成本,更能使超市與用戶之間建立起有效的長聯(lián)系機(jī)制,為用戶提供更多精準(zhǔn)服務(wù)。正因?yàn)槿绱耍?dāng)前已經(jīng)有越來越多的大中型超市將自助零售作為連接超市線下和線上銷售的重要橋梁[1]。為了讓用戶更加迅速、準(zhǔn)確、安全地完成自助購物,必須要為掃碼支付提供一種有效的保障機(jī)制,這就是設(shè)計(jì)掃碼支付中間件的基本目的。
當(dāng)前的掃碼支付產(chǎn)品種類較多,很多外部因素對這些產(chǎn)品在應(yīng)用中的體驗(yàn)度都有影響。例如移動設(shè)備的硬件配置、4G 或Wi-Fi 信號強(qiáng)度和帶寬、某一時間段內(nèi)超市自助購物的用戶數(shù)量,等等。除此之外,掃碼支付產(chǎn)品在性能方面還須關(guān)注以下幾點(diǎn):
第一,支付響應(yīng)的快捷性。用戶選用掃碼支付實(shí)現(xiàn)自助購物的主要原因之一就是節(jié)省超市結(jié)賬的排隊(duì)時間,如果在掃碼支付時響應(yīng)時間過長,甚至高于排隊(duì)時間,則會大大降低用戶的購物愿望,進(jìn)而導(dǎo)致用戶放棄此次購物。因此掃碼支付的響應(yīng)時間必須嚴(yán)格控制在用戶容忍的范圍內(nèi)。
第二,支付金額的準(zhǔn)確性。超市商品價格的起伏變化較快,同一種商品的價格在不同日期甚至一天中的不同時段都可能隨著促銷、打折等活動而有所不同,這就需要掃碼支付產(chǎn)品能夠及時更新商品價格,保證計(jì)算得到的訂單商品價格總額與實(shí)際金額一致。
第三,支付過程的安全性。掃碼支付涉及金融活動,具有一定的風(fēng)險(xiǎn)[2]。用戶的移動設(shè)備和掃碼支付服務(wù)器通訊時傳輸?shù)臄?shù)據(jù)必須要保證安全,防止泄露。
以上幾個問題的解決在很大程度上有賴于用戶移動設(shè)備與掃碼支付服務(wù)器之間能否實(shí)現(xiàn)快捷和安全的通訊。MQTT(Message Queuing Telemetry Transport,消息隊(duì)列遙測傳輸)協(xié)議是一種構(gòu)建在TCP/IP 協(xié)議上、基于發(fā)布/訂閱模式的“輕量級”通訊協(xié)議[3]。它的最大優(yōu)勢是可以在帶寬有限的情況下,使用很少的代碼為終端設(shè)備和服務(wù)器之間提供實(shí)時可靠的消息服務(wù),在物聯(lián)網(wǎng)、移動設(shè)備等方面有廣泛的應(yīng)用[4]。例如亞馬遜的AWS IoT 云平臺就充分利用了MQTT 協(xié)議。由于MQTT 協(xié)議非常適合于移動終端與服務(wù)器通訊,因此掃碼支付中間件的設(shè)計(jì)就基于該協(xié)議。
掃碼支付產(chǎn)品的結(jié)構(gòu)框架如圖1 所示。其中,掃碼支付小程序?yàn)橛脩籼峁叽a支付產(chǎn)品的入口;掃碼支付中間件可部署在超市用于日常管理的客戶機(jī)上,實(shí)現(xiàn)服務(wù)器與本地收銀系統(tǒng)數(shù)據(jù)庫的信息交換;服務(wù)器負(fù)責(zé)完成用戶經(jīng)由小程序提交的購物請求、驗(yàn)證通過掃碼支付中間件登錄服務(wù)器的超市客戶機(jī)身份、存儲上傳的商品信息和下發(fā)回寫命令等。
從圖1 可知,掃碼支付中間件在功能上屬于一種數(shù)據(jù)交互中間件,是服務(wù)器和各超市收銀系統(tǒng)數(shù)據(jù)庫的通訊橋梁。中間件以SQL 方式與收銀系統(tǒng)數(shù)據(jù)庫直接對接,與服務(wù)器則使用MQTT 協(xié)議進(jìn)行通訊。中間件從收銀系統(tǒng)數(shù)據(jù)庫中讀取商品信息,轉(zhuǎn)換為JSON 格式后上傳至服務(wù)器;同時將從服務(wù)器接收到的訂單信息回寫到收銀系統(tǒng)數(shù)據(jù)庫中。之所以采用JSON 作為數(shù)據(jù)交換格式,是因?yàn)镴SON 效率較XML 更高且易于修改[5]。由于掃碼支付中間件承擔(dān)了低速且頻繁的數(shù)據(jù)庫讀/寫任務(wù),這樣就很大程度上減輕了服務(wù)器的負(fù)擔(dān)、提高了掃碼支付產(chǎn)品的實(shí)時效率。
具體而言,掃碼支付中間件包含以下幾方面的功能:
(1)商品信息定時上傳功能。超市商品的價格波動大、促銷和折扣信息繁多,收銀系統(tǒng)數(shù)據(jù)庫中保存的商品信息處于不斷變化中。服務(wù)器在處理用戶提交的訂單時必須以最新價格為準(zhǔn),否則會造成訂單金額計(jì)算錯誤。之前一些掃碼支付產(chǎn)品服務(wù)器中保存的商品信息多以人工方式更新,這樣不僅速度較慢,也容易造成遺漏。通過掃碼支付中間件提供的商品信息定時上傳功能,超市管理人員僅需要為中間件設(shè)定兩次商品信息上傳的間隔時間。之后中間件在每次上傳時間點(diǎn)到達(dá)時,將自動讀取并上傳最新的商品信息至服務(wù)器,無須人工干預(yù)。
(2)訂單回寫功能。中間件將用戶提交并完成的訂單信息實(shí)時寫入到收銀系統(tǒng)數(shù)據(jù)庫中。這樣除了及時記錄超市的銷售情況外,還可以更有效地采集用戶消費(fèi)數(shù)據(jù),進(jìn)而通過大數(shù)據(jù)技術(shù)對消費(fèi)行為做出分析,為用戶提供更精準(zhǔn)的個性化服務(wù)。由于在同一時刻可能會有大量訂單等待寫入數(shù)據(jù)庫,因此該功能需要以異步方式實(shí)現(xiàn)。
(3)網(wǎng)絡(luò)代理功能。服務(wù)器與客戶機(jī)、收銀系統(tǒng)數(shù)據(jù)庫有可能處在不同的網(wǎng)絡(luò),或因防火墻設(shè)置問題而無法直接訪問。因此中間件必須提供網(wǎng)絡(luò)代理功能,以保證服務(wù)器與客戶機(jī)在各種情況下都能正常連接與通訊。
掃碼支付中間件的主要功能如圖2 所示。
中間件與服務(wù)器通訊所需的MQTT 主題在表1 中列出。
表1 掃碼支付中間件與服務(wù)器的MQTT 主題
其中,smg/server/client/{client_id}/reply 是客戶機(jī)向服務(wù)器訂閱的主題,用于服務(wù)器確認(rèn)啟動掃碼支付中間件的客戶機(jī)身份和訂單回寫。例如某客戶機(jī)的client_id 為123,則訂閱主題為smg/server/client/123/reply。smg/client/server/schedule_data 和smg/client/server/data 用于中間件向服務(wù)器上傳數(shù)據(jù)。smg/client/server/will 是MQTT 協(xié)議的遺囑消息主題,用于在中間件或客戶機(jī)出現(xiàn)異常時向服務(wù)器發(fā)送說明信息[6]。
圖2 掃碼支付中間件的功能流程
掃碼支付中間件以Visual Studio 2017 為開發(fā)平臺,開發(fā)語言為C#,使用開源類庫MQTTnet 2.4.5 實(shí)現(xiàn)對MQTT 協(xié)議的支持。服務(wù)器和客戶機(jī)的運(yùn)行環(huán)境都為Windows 10(64-bit),.NET 版本為4.6.2。測試選用的收銀系統(tǒng)數(shù)據(jù)庫為科邁智贏V9.0。
(1)中間件啟動流程。中間件啟動后,首先由超市管理人員在登錄界面上輸入連接服務(wù)器和收銀系統(tǒng)數(shù)據(jù)庫所必需的信息,如圖3 所示。
當(dāng)單擊“登錄”按鈕時,中間件首先向服務(wù)器傳輸一個JSON 格式的登錄請求數(shù)據(jù),其內(nèi)容為:
{
"command_type":"login", //命令類型
"data":{
"user_name":"", //登錄名
"passwd":"" //密碼
}
}當(dāng)服務(wù)器審核登錄信息無誤后,立即向中間件回復(fù)包含超市信息的確認(rèn)登錄數(shù)據(jù)。其內(nèi)容為:
{
"command_type":"login_reply", //命令類型
"data":{
"supermarket_id":"", //超市ID
"supermarket_name":"", //超市名稱
}
}
圖3 掃碼支付中間件登錄界面
(2)數(shù)據(jù)定時上傳與回寫流程。中間件定時上傳的時間間隔(例如6 小時)由超市管理人員在中間件的配置文件中設(shè)定。中間件登錄到服務(wù)器后首先上傳一次商品信息,然后定時上傳收銀系統(tǒng)數(shù)據(jù)庫中最新的全部商品信息,并覆蓋服務(wù)器之前保存的信息。其內(nèi)容為(具體條目可根據(jù)實(shí)際需要增刪):
{
"command_type":"schedule_data", //命令類型
"data":[{
"upc_code":, //商品編碼
"product_name":"",//商品名稱
"price":"", //商品價格
"member_price":"", //會員價
"sale_price:"", //促銷價
"unit:"", //單位
}]
}
當(dāng)用戶提交的一個訂單完成后,服務(wù)器會將該訂單信息發(fā)送至中間件。其內(nèi)容為:
{
"command_type":"schedule_data", //命令類型
"order_id":"", //訂單ID
"shop_name":"", //超市名稱
"shop_code":"", //超市代碼
"time_stamp:"", //時間戳
"pay_type":"", //支付方式
"total_price":"", //訂單總價
"mobile":"", //用戶手機(jī)號碼
"card_num":"" //用戶會員卡號
"data":[{….. //根據(jù)訂單中各件商品的信息逐一
填寫
}]
}
中間件收到訂單信息后將進(jìn)行格式轉(zhuǎn)換,并立即調(diào)用回寫接口將訂單寫入到收銀系統(tǒng)數(shù)據(jù)庫中。為保證中間件的效率和數(shù)據(jù)庫的安全,回寫過程采取異步方式,并在回寫時鎖定相應(yīng)的數(shù)據(jù)庫表。
此外,由于中間件啟動后,除客戶機(jī)關(guān)機(jī)、斷電等特殊情況之外一般不終止運(yùn)行。為最大程度保證中間件的正常運(yùn)行,還提供了一些防護(hù)機(jī)制,例如斷網(wǎng)時自動重新連接服務(wù)器和數(shù)據(jù)庫、Socks5 網(wǎng)絡(luò)代理、遠(yuǎn)程自動升級,等等。
該中間件已在某大型超市的掃碼支付產(chǎn)品中得到了試用。在網(wǎng)絡(luò)正常的情況下,中間件每次上傳18000條商品信息至收銀系統(tǒng)數(shù)據(jù)庫僅需3 到4 分鐘,還可以同時響應(yīng)1000 個左右的訂單回寫請求。實(shí)踐證明,中間件較為有效地提高了掃碼支付產(chǎn)品的效率,而且在運(yùn)行過程中對客戶機(jī)、服務(wù)器和收銀系統(tǒng)數(shù)據(jù)庫的性能均沒有明顯影響。
掃碼支付在超市自助購物領(lǐng)域有廣闊的應(yīng)用前景,但目前不少掃碼支付產(chǎn)品還存在一些待改進(jìn)之處。掃碼支付中間件的引入可以在一定程度上為提升掃碼支付產(chǎn)品性能提供一種新思路,更好地滿足用戶自助購物的需求。今后進(jìn)一步的工作主要集中在擴(kuò)展中間件功能和更好地解決中間件部署等方面。