Skip to content

共享单车扫码功能实现详解

更新: 6/6/2026 字数: 0 字 时长: 0 分钟

面向前端 / 全栈开发者的科普向技术解读。共享单车的"扫一扫开锁"看似简单,背后却有两套截然不同的技术路线。本文把它们的原理、流程、实现和踩坑点讲清楚。

一、整体概览:两条技术路线

两条技术路线

用户的操作几乎一样:打开 App → 扫车上的二维码 → 车锁弹开。但"扫码之后到底是谁去开的锁",有两种完全不同的实现:

  • 方案一:不需要蓝牙(云端联网解锁) 手机把开锁请求发给云端服务器,服务器再通过移动网络把开锁指令下发给车锁。手机和车锁之间没有任何直接连接,全靠云端中转。这要求车锁自身内置物联网模块(SIM 卡/通信芯片),能独立连上移动网络。

  • 方案二:需要蓝牙(手机直连车锁) 手机先连云端确认身份、拿到"钥匙",然后通过蓝牙直接和车锁通信,把开锁指令近距离传给车锁。

核心差异:方案一让车锁自己联网,方案二让手机当中间人。两者在通信方式、硬件依赖、用户体验上区别明显——下面分别拆解。

二维码里通常只存了一个车辆编号(或一个指向编号的短链),它本身不含开锁密码。真正的开锁逻辑,都发生在扫码之后的网络通信里。

二、方案一:不需要蓝牙的云端联网解锁

方案一云端联网解锁

技术架构:手机 ↔ 云端服务器 ↔ 车锁(三方都靠网络连接,车锁内置物联网模块独立联网)。

核心流程(手机和车锁从不直接对话,全程云端中转):

  1. 扫码取编号:手机扫二维码,解析出车辆编号(如 BIKE_88001)。
  2. 请求上云:手机通过互联网,把"我要开 BIKE_88001"的请求发给云端服务器。
  3. 校验与下发:服务器核对用户身份、押金/余额、订单等是否正常;通过后,经移动网络(4G/NB-IoT)把开锁指令推送给那把车锁
  4. 车锁执行:车锁的物联网模块收到指令,驱动锁舌弹开,并把"已开锁"状态回传给云端。
  5. 闭环确认:云端确认开锁成功,通知手机 App 显示"开锁成功,开始计费"。
text
手机 ──互联网──► 云端服务器 ──移动网络──► 车锁
                  (校验身份/订单)        (执行开锁)
 ▲                                          │
 └──────── 开锁成功通知 ◄── 状态回传 ◄────────┘

通俗解释:NB-IoT / 4G 是车锁里那张"SIM 卡"用的网络,让车锁能像手机一样自己上网。整个过程手机只是"按下按钮",真正动手开锁的是云端指挥下的车锁本身。

优点:用户无需开蓝牙、无需靠得很近,操作最简单;只要有网,远程也能操作。 短板强依赖网络——地库、信号弱的区域可能开锁慢甚至失败;车锁需常驻联网,通信流量费 + 物联网模块成本较高

三、方案二:需要蓝牙的手机直连车锁

方案二蓝牙直连

技术架构:手机 ↔ 云端服务器(拿钥匙)+ 手机 ↔ 车锁(蓝牙近距离直连开锁)。车锁主要靠蓝牙模块与手机通信,对车锁自身联网能力要求低。

核心流程(手机先拿钥匙,再用蓝牙近场开锁):

  1. 扫码取编号:手机扫码解析出车辆编号。
  2. 云端发钥匙:手机连云端核对身份/订单,云端校验通过后**下发一段加密的"开锁凭证(钥匙)"**给手机。
  3. 蓝牙连车:手机打开蓝牙,搜索并连接到附近的目标车锁(蓝牙是近距离通信,通常几米内)。
  4. 近场开锁:手机通过蓝牙把开锁凭证直接发给车锁,车锁本地校验凭证合法后弹开。
  5. 结果回传:开锁结果可由车锁通过蓝牙告诉手机,再由手机(或车锁)上报云端,开始计费。
text
手机 ──互联网──► 云端(校验身份)──► 下发加密钥匙 ──► 手机
手机 ──蓝牙直连──► 车锁(本地校验钥匙 → 弹开)

通俗解释:好比物业先给你一张"门禁卡"(云端发的钥匙),你拿着卡走到门口(蓝牙连接),刷卡开门(本地校验)。门锁不需要时刻联网,只要能被刷卡识别就行。

优点:开锁指令走蓝牙、响应快;即使当前网络很弱,只要事先拿到了钥匙,靠近车也能开锁,弱网/地库体验更好;车锁可少联网,省电省流量、成本更低短板:用户必须开启蓝牙并靠近车辆(几米内),否则连不上;蓝牙连接偶有失败需重试,对授权引导和异常处理要求更高。

四、两种方案怎么选

两种方案对比

对比维度方案一:不用蓝牙(云端联网)方案二:用蓝牙(手机直连)
通信方式手机→云端→车锁,全程网络中转手机连云端拿钥匙 + 蓝牙近场开锁
硬件依赖车锁需内置物联网模块(4G/NB-IoT)+ SIM车锁主要需蓝牙模块,联网要求低
网络依赖强依赖实时联网,弱网/地库易失败拿到钥匙后弱网也能开,抗网络波动
响应速度受网络延迟影响,可能稍慢蓝牙近场直传,响应快
用户前提有网即可,无需靠近、无需开蓝牙须开蓝牙并靠近车辆(几米内)
成本流量费 + 模块成本较高省电省流量,成本较低

选型建议

  • 追求操作最简、远程可控,且能接受联网成本 → 偏向方案一
  • 投放区域常有弱网/地库、想降本省电 → 偏向方案二
  • 实际工程中,成熟厂商多采用蓝牙为主、联网解锁为兜底的混合方案:优先蓝牙快速开锁,蓝牙连不上时自动切换云端联网开锁,兼顾速度与成功率。

五、开发实现要点与注意事项

开发要点与注意事项

无论哪种方案,落地时都要重点关注以下几点:

1. 安全验证:严防伪造开锁指令 开锁凭证必须加密 + 带时效 + 一次性,绝不能让二维码或链接里直接出现"开锁密码"。常见做法:

  • 二维码只放车辆编号,开锁凭证由服务器动态下发;
  • 凭证带时间戳和随机数(nonce),过期或重放即作废;
  • 车锁端对凭证做签名校验,防止被中间人伪造。

2. 开锁状态必须回传确认(闭环) 不能"发了指令就当成功"。务必让车锁把真实开锁结果回传,前端据此显示成功/失败,并触发计费。否则会出现"提示开锁成功但车没开"的投诉。

3. 网络异常与弱网兜底

  • 方案一:设置合理超时与重试,超时给出"信号弱,请稍后重试或换辆车"的友好提示;
  • 方案二:处理蓝牙连接失败、配对超时,必要时自动降级到联网解锁。

4. 蓝牙权限与引导(方案二专属) 前端需检测蓝牙是否开启、是否授权定位权限(部分系统扫蓝牙需定位权限),并给出清晰的开启引导;连接失败要有重试和明确提示,避免用户卡在"转圈"。

5. 订单与计费一致性 开锁成功 = 订单开始、计费开始;还车锁车 = 订单结束、停止计费。要保证开锁/关锁事件与订单状态严格对应,避免漏计费或重复计费。

6. 幂等与防重复开锁 用户可能连点多次开锁。后端要做幂等处理(同一订单重复请求只生效一次),避免重复扣费或锁状态错乱。

一页速记

  • 用户操作一致:扫码 → 开锁;差异在"谁去开锁"。
  • 方案一(无蓝牙):手机→云端→车锁,车锁自己联网;操作最简,但强依赖网络、成本高。
  • 方案二(蓝牙):手机连云端拿钥匙 + 蓝牙近场开锁;响应快、抗弱网、成本低,但须开蓝牙并靠近。
  • 混合方案:蓝牙为主、联网兜底,是工程中的常见最优解。
  • 共性要点:凭证加密防伪造、状态回传闭环、弱网兜底、权限引导、计费一致、幂等防重复。