我在中国的公交系统中看到,公交车内有可以处理电子支付的设备。过程如下:


乘客上车。
乘客在智能手机应用中使用QR码在设备的屏幕上擦拭(QR码扫描仪)
如果乘客成功充电,则可以在公共汽车上坐下来。如果没有,则该设备会发出一些警报。

我正在尝试为我在大学中的项目实施此系统。最初,我使用Raspberry Pi和QR码扫描仪模块识别QR码,然后通过Wi-Fi将数据推送到远程服务器上的API。我的做法是,每当设备收到QR码时,它都会立即将数据发送到API。然后,API处理所有内容并将响应发送回设备。

一切正常。但是,发生的问题是每次发送之间似乎花费大量时间,并且我并没有真正处理一些意外情况,例如在向API发送数据时失去连接。

例如,当第一位乘客来并将其手机应用程序的QR码放在设备上时,但完成整个过程大约需要4-6秒(包括将乘客的数据发送到服务器的API,API处理收费,余额处理,然后将响应发送回设备以检查是否允许该乘客前来。有时,设备会失去连接,因此乘客无法使用设备。

因此,我想到了一个想法:


我将数据库中乘客的关键数据(身份证,姓名,余额)与设备的同步存储。
现在,付款处理将直接在设备上进行。例如,该设备将检查乘客的QR码,然后将其与存储中的数据进行比较以处理该乘客是否可以进来。
在所有乘客都办理完登机手续后(这意味着公交车何时移动),设备的存储将再次与服务器的数据库同步。

我认为,如果系统以这种方式运行,那么一切都会在本地完成,直到它们进行同步,这将很顺利。

所以这是我的系统以及我的想法的简短摘要。但是,我不在中国,而且我的国家/地区至今尚未实施类似的系统,因此我没有任何参考资料。

如果你们能给我一些关于这个新想法的指导或相关参考资料,我将不胜感激。


有可能吗?
里面是否存在一些隐藏的危险逻辑?例如,在服务器数据库和设备数据库之间同步数据的最合适时间是什么?
在服务器端,我使用ASP.net编写API,并且处理乘客数据并不困难(查找,编辑,更新) )使用实体框架。但是,如何在Raspberry Pi中执行类似的操作以进行本地处理?


#1 楼

对于本地处理,我也有类似的想法。我不会处理这种想法的安全性问题,因为这是一个学校项目。

让您的QR码也包含用户余额的数据。您RPi读取代码,并从在QR代码上看到的余额中扣除费用。如果可以,请完善,否则请拒绝使用公共汽车。如果需要,您可以使用一些秘密对余额数据进行加密,以使人们无法生成余额无限的QR码。公交车到站时,您只需将本地存储上传到服务器即可。他们的移动数据以更新其余额。您可以在QR上设置时间限制,以确保仅用于一次乘车。
生成非法但有效的QR码。


对于与上面的想法:

您正在使用.Net作为后端。如果要将同一堆栈带到RPi,则可以将Windows 10 IoT Edition安装到RPi。它是免费的,只需要Windows 10计算机即可进行安装。尽管如此,我还是更愿意在RPi上使用python和Linux。

对于上面的付款方式,如果您只是忽略它,那是完全可以的,它只是为了给您提供一个视角,并且是我头脑风暴的我。

评论


首先,谢谢您的建议,因此这意味着该设备的存储现在仅保留成功上车的乘客的数据(身份证,余额)。因此,它将把这些数据上传到服务器进行同步,然后删除所有这些数据。那是你的主意吗?那么,在这种情况下,设备的存储现在不再需要保存所有数据库了吗?仅供参考,我的设备集成了wifi / 3G模块,因此确实需要站来上传数据:D

– juggernaut156
18年5月7日在9:28



是的,那样,您的设备仅保留本地数据。当客户在公交车上时,个人QR码无法多次使用,因此您无需保留整个数据库。我不会为了日志记录和记帐目的而如此频繁地删除数据。您提到了连接丢失,这就是为什么在站点上建立wifi似乎是个好主意的原因。

–atakanyenel
18年5月7日在9:33



是的,这是个好主意。这样,硬件方面的工作量就减轻了。可以想象,按照我的想法,如果系统有1000个用户,那么每次乘客来访时,它都需要搜索这1000个用户并处理一些逻辑,这将花费大量时间。

– juggernaut156
18年5月7日在9:49

Rpi非常强大,可以进行1000个用户的搜索。我的有上述缺点,也许还有更多缺点,但是既然您有了核心思想,就可以对其进行改进。

–atakanyenel
18年5月7日在9:58

您是否想对我的提示进行澄清:“您可以在QR上设置时间限制,以确保仅用于一次乘车。”这是什么问题,为什么我们需要确保QRcode仅适用于一次乘车

– juggernaut156
18年5月7日在10:11