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