当前位置:网站首页>一次公交卡被“盜刷”事件帶來的思考

一次公交卡被“盜刷”事件帶來的思考

2020-11-07 20:09:06 itread01

##需求緣起 那是一個陽光明媚的早晨,筆者和往常一樣揹著帥氣的雙肩包,將頭髮梳成大人模樣,換上一身帥氣的西裝前往公交站,踏上上班之路,運氣不錯,公交車很快就到了,刷完乘車碼以後在外力的幫助下捲入人海默默的等待著下一次外力助我下車。
早晨的時光過得總是很快,中飯過後我正準備趴在桌上午休時收到了微信推送的扣費通知。
收到這種莫名奇妙的扣費通知,我第一感覺是號被盜刷了,誰偷拍了我的乘車碼? 但下一秒,一個程式設計師的直覺告訴自己開發者應該不會犯這種低階錯誤,乘車碼在一定程度上相當於支付條碼,怎麼可能不重新整理呢,我親測了確實是動態重新整理的。
那究竟是什麼原因呢?接下來就請出今天的主角“先享後付”,相信看完整個內容也就很好解釋之前的“盜刷”問題了。 ##概念 先享後付從字面理解就是先享受服務再付費,對於使用者體驗來說很好,服務結束的時候可以不用關心付費,由系統自動進行扣減,尤其對一些高頻使用場景,比如共享單車,地鐵公交等。 ##使用場景 1.交通出行:滴滴打車,共享單車等,使用者下車以後由系統自動付費,節約使用者時間; 2.新零售:一些智慧貨櫃,當你選完商品關上櫃門以後由系統進行扣減,筆者之前使用過小e到家的智慧貨櫃,體驗非常好; 3.網路受限環境:比如公交車經過某些網路不好的路段時,無法實時扣費,但又不能耽誤乘客坐車,這種情況就非常適合在刷卡機內部儲存離線訂單,等網路好的時候再上送訂單資料到服務端由系統就行補釦(上面提到的公交車延遲扣費就是這種原因,早晨應該是網路不好沒有將訂單同步上去); ##使用流程 筆者所在的城市目前乘坐地鐵或公交時可以使用微信乘車碼進行支付,使用之前需要先開通一下,開通流程如下所示: 步驟1:開啟乘車碼小程式,初次會提示去開通 ![](https://img2020.cnblogs.com/blog/846817/202011/846817-20201105143521297-1529890172.png) 步驟2:點選“去開通",這時會來到一個引導頁,勾選協議以後點選“立即開通” ![](https://img2020.cnblogs.com/blog/846817/202011/846817-20201105143537520-216403621.png) 步驟3:這時會來到“開通免密支付”,點選“開通免密支付”意味著開通流程結束 ![](https://img2020.cnblogs.com/blog/846817/202011/846817-20201105143557668-1532836524.png) ![](https://img2020.cnblogs.com/blog/846817/202011/846817-20201105143614545-1437266015.png) 這時你的乘車碼已開通完畢,意味著你可以用它來坐地鐵、公交了,這裡畫個流程圖理解一下整體流程。 ![](https://img2020.cnblogs.com/blog/846817/202011/846817-20201105143632739-106088260.png) ##核心點 整個流程中有幾個核心點值得關注: 1.開通免密支付免密支付指的是支付時不需要使用者輸入密碼,由系統自動扣減,系統使用什麼扣減呢?筆者翻看了相關文件,微信叫委託代扣協議id,支付寶叫代扣協議號; 2.公交車刷卡機需要儲存離線訂單,當機具斷網以後存在本地,聯網以後上送到雲端進行補釦; 3.乘車碼需要支援離線支付,當用戶手機斷網以後不影響使用者乘車; 4.需要有一套追繳機制,使用者乘車以後刷卡機後臺還未扣款時使用者關閉了免密支付,意味著之前的訂單無法扣款,如下圖使用者在微信中關閉免密支付。 ![](https://img2020.cnblogs.com/blog/846817/202011/846817-20201105143708844-1954195618.png) ##流程細化 ###使用者簽約免密支付 ![](https://img2020.cnblogs.com/blog/846817/202011/846817-20201105143724105-1877626150.png)       使用者簽約流程 ###使用者乘車 這裡有兩個關鍵點重點描述一下: 1.使用者開啟乘車碼小程式時,小程式根據使用者手機網路狀態決定不同的乘車碼生成策略,如果有網就呼叫後端服務獲取乘車碼,如果無網就本地生成,筆者猜測碼生成規則大概是qrCode=encrypt("使用者id,時間戳等”,加密key),如果無網的時候會使用本地快取的上一次的加密key,否則會動態的去服務端更新加密key; 2.使用者刷卡以後,機具首先會生成本地訂單,如果有網就將本地訂單上送到後臺服務,這裡上送的目的是為了提示使用者“乘車成功”,如下圖3.1,3.2所示; ![](https://img2020.cnblogs.com/blog/846817/202011/846817-20201105143750568-198115208.png)       使用者刷卡流程 ###乘車碼後臺扣款 1.後臺拉取待扣款訂單; 2.查詢使用者代扣協議id,如果使用者已解約就標記訂單為支付失敗同時插入欠費記錄為下一步的追繳做準備; 3.如果使用者未解約,就呼叫微信免密支付介面,如果支付成功就將訂單標記為支付成功,如果支付失敗就標記訂單為支付失敗同時插入欠費記錄為下一步的追繳做準備(這裡的處理稍顯粗暴,如果是使用者餘額不足等情況其實後臺是可以延遲重試的,直到最大重試次數,這裡為了舉例就簡單化處理); ![](https://img2020.cnblogs.com/blog/846817/202011/846817-20201105143821524-832390552.png)       後臺扣款流程 ###追繳-提醒使用者還款 當用戶欠費以後後臺藉助平臺(微信,支付寶)提供的能力提醒使用者還款,當用戶還款以後刪除使用者的欠費記錄,如果使用者未還款就限制使用者繼續使用服務,下一個流程會介紹。 ![](https://img2020.cnblogs.com/blog/846817/202011/846817-20201105143836325-553262396.png)       提醒使用者還款   ![](https://img2020.cnblogs.com/blog/846817/202011/846817-20201105143842558-1676793618.png)       欠費記錄 ###追繳-限制欠費使用者使用服務 ![](https://img2020.cnblogs.com/blog/846817/202011/846817-20201105143859855-1861703757.png)       限制使用服務   ![](https://img2020.cnblogs.com/blog/846817/202011/846817-20201105143906302-89242243.png)       限制使用服務互動 ##總結 “先享後付”作為一個現在比較流行的消費方式,的確給我們帶來了很多的便利,但是每種事物的出現必然是有利有弊的,我這裡簡單說一下自己的理解。 ###優點: 1.對於個人來說的確很方便,使用完服務以後不用關注付費問題,由系統自動扣減,使用者體驗很好; 2.對商家來說減少了結算週期,避免了某些情況下需要催款的場景(筆者以前打網約車忘記付費,收到過司機的催款電話); ###缺點: 1.對於個人來說,方便的同時也帶來了一定的風險,等於把自己的支付密碼交給了別人; 2.對於商家來說可能會面臨一定的資損,畢竟社會中還充斥著那麼一些老賴;

版权声明
本文为[itread01]所创,转载请带上原文链接,感谢
https://www.itread01.com/content/1604749625.html