本文觀點僅爲技術猜解,不表明官方線上真實方案。安全
風靡上海的掃碼乘地鐵,從2018年1月20日全面支持,至今近10天了。起初不覺得然,過了大概1個禮拜左右,也下載了Metro大都會APP,開始體驗掃碼乘地鐵的秒速進站(0.5秒進出站),使用的過程當中,好奇心使然,讓我看是對這套技術方案越來月感興趣,而後就留心觀察,並結合本身的經驗和技術,對這套方案進行拆解與分析。微信
最開始覺得整個系統可能分爲4部分,分別是:閘機部分 、手機APP 、服務端接口 、運營平臺網絡
其中閘機部分,包含2部分,一個主機或者單片機 和一個掃描頭,具體以下:併發
(1) 掃描頭,負責拍照用戶手機乘車二維碼編碼
(2) 主機或者單片機,負責與服務端接口進行通訊,並將乘車二維碼的信息上傳至服務端。同時該主機或者單片機具備惟一編碼,用戶掃碼進站或者出站的時候,該主機除了上傳用戶乘車碼信息,還會帶上該閘機(閘機中的主機或者單片機)的惟一編碼信息。加密
手機APP部分,包含註冊登陸、綁定支付寶或者銀聯卡、乘車碼、乘車記錄、資訊等,具體以下:blog
(3) 註冊,用戶使用手機號,並獲取驗證碼註冊,該手機號做爲用戶登陸或者乘車的憑證項之一。接口
(4) 綁定支付寶或者銀聯卡,做爲乘車付費的代扣項。應該是對接了支付寶的商家免密代扣,銀聯卡的應該也是相似的。支付寶
(5) 乘車碼,作爲乘車進站或者出戰的有效憑證。細心的朋友可能會發現,這個乘車二維碼,每次打開都會不同。不過,從技術角度來講,二維碼的實質主要內容,確定不會變的,變的只是你打開二維碼的時間。不過,這個二維碼的信息被加密了的,目前看,應該是使用了AES加密和hex加密技術,不過經常使用的核心信息,依然是根據用戶的手機號、用戶登陸憑據、支付類型、時間戳、加密因子、密鑰、簽名等進行加密。驗證碼
(6) 乘車記錄,目前根據手機APP中的乘車記錄來看,記錄中包含了本人全部的乘車出入站點和時間等信息,固然,你會發現你的出入站中包含了中文 和一串編碼,而這個編碼則正是出入站閘機的主機或者單片機的惟一編碼。只要你掃碼進站或者出站了,你的當前出入站的信息,就會在乘車記錄裏。對於每一次起止路程,都是2條記錄,這2條記錄分別標識出或者入。
上述的思路這裏,我盡然默默的相信了這種方案,不過很快就發現不對了。疑問在哪裏呢,首先,用戶打開乘車頁面時,發現必需要打開藍牙,纔可以出現乘車二維碼。那麼,這裏的藍牙在這裏充當的角色是什麼呢?
繼續深究,發現藍牙在這個方案中充當着舉足輕重的做用。具體以下:
手機必須開啓藍牙,而後才能進站或者出戰掃碼。那麼隱祕的地方,應該就在閘機那裏了。閘機處確定是有一個藍牙設備,與手機藍牙之間進行數據通訊和數據校驗使用。那麼,上述的方案,在閘機部分,應該肯定爲:掃描頭、藍牙、單片機。
那麼掃碼進站並出站的一次完整的乘車過程,具體流程,能夠大體劃分爲以下幾個步驟:
一、手機打開藍牙、手機APP 打開乘車二維碼
二、用戶將手機APP 在距離閘機掃碼窗口5CM處時,閘機內的藍牙設備與手機藍牙進行近距離鏈接
三、閘機掃描頭掃描乘車二維碼,並解析出二維碼數據,並傳送給單片機處理
四、單片機將二維碼解析後的數據,再結合本單片機的惟一編碼(閘機編碼),經過藍牙數據通信,進行用戶進出閘機的身份檢驗,以確認該用戶確實要進行掃碼出入的動做。
五、第4步驗證經過後,單片機發送指令(信號),打開閘機,或者是閘機的輪軸轉動到對應的位置。
六、手機APP,此時記錄下當前用戶,根據某時間戳,在某閘機出,進行過進出站。也就是手機上看到的乘車記錄。若是是進站,手機上會顯示1條進站的時間、進站的站名、進站閘機編碼(單片機編碼)。
七、同時,手機APP做爲遠端,將本次的乘車記錄,經過服務端接口,上傳至系統運營平臺(你們可能會有點擔憂,是否會上傳本身的隱私信息,目前的拆解來看,APP的僅僅只是上傳你的乘車記錄,便於系統對於本次乘車進行里程計算與收費扣費,並不會上傳其餘信息,仍是比較安全放心的)。
八、當用戶要出站時,再次打開乘車二維碼,掃碼過閘機,其餘的步驟與上述同樣。
九、出站後,APP上提示用戶將會在30分鐘內,扣除車費。這裏須要說明的是,爲什麼是在30分鐘呢,目前分析,有以下幾點:
① 大量的用戶進行出站動做,系統須要對這些用戶進行扣款,批量的扣款操做,存在併發。
② 對接的支付寶或者銀聯支付的扣款操做,會存在網絡延時
③ 系統定時任務執行訂單的代扣付款操做
④ 出站後,業務運營平臺,須要根據用戶的入出站,進行里程計算,選取最短里程進行扣費計算,相對耗時。
由上所述,對整個平臺的方案,目前可劃分爲以下:
一、閘機部分,主要分爲:
(1) 主要部件:
① 單片機、掃描頭、藍牙
(2) 功能部分:
① 掃描頭讀取乘車二維碼信息
② 藍牙進行數據交換
③ 單片機,二維碼信息接收、藍牙數據信息通信、驅動閘機打開與關閉關動做
二、手機部分,主要分爲:
(1) 獲取權限部分
藍牙權限、網絡權限、文件讀寫權限、系統參數權限等
(2) 功能部分
手機號註冊登陸,乘車二維碼顯示、藍牙數據交換及用戶進出站身份校驗、乘車記錄查看、乘車記錄上傳等
三、服務端接口部分,主要分爲:
(1) 獲取短信驗證碼、用戶註冊、用戶登陸、生成乘車二維碼、乘車記錄上傳等
四、運營平臺部分,主要分爲:
用戶管理、用戶帳戶管理、站點管理、站點閘機管理、用戶乘車記錄管理、用戶乘車訂單管理等
五、第三方支付平臺支付對接:
(1) 支付寶商家免密代扣對接
(2) 銀聯卡商家免密代扣對接
(3) 用戶乘車訂單支付及支付結果通知或者回調
上述方案,僅表明我的觀點。不表明Metro大都會真實方案。
歡迎點評與指導。轉載請備註來源,謝謝!
關注微信公衆號,查看更多技術文章。