背景
解决不同场景一码通–全国互认互扫
技术方案设计目标:安全、高可用、可拓展、高性能、易用性。
健康码二维码优化
要设计一个能互通的二维码,二维码需要放入的信息会更多,因为需要塞进去更多的内容。而二维码会因为字符串的长度而导致二维码的像素变大,像素越大时部分识别速度较慢,甚至部分低端手机无法识别,下图是不同像素的二维码对比。
当前二维码的字符串如下:
{“codeId”:“8d9408fb391514015576f76f993bbe91”,“lastReportTime”:1582729658000,“outTime”:1583334458000,“zoning”:“440100”}
里面里面的codeId是某二维码系统内部的ID,与其他健康通信是不必要,因此需要再二维码里面添加有效个人信息作为人的唯一标识(如:身份证ID),身份证信息属于个人隐私信息,不能直接铭文对外,因此可以对这些信息进行加密处理。这些信息二维码格式不使用json,直接使用冒号分割,减少字符串长度,我设计的二维码格式如下:
appid(20):证件类型(2):姓名(8):证件号码(13~18):时间戳(9):随机码(6):业务码(6)
例如:wx92104a59598d8649:10:欧阳娜娜:43048xxxxxxxx5335:13456789:123456:123456
DES加密后的二维码字符串
U2FsdGVkX18ptoXKcFaCA+jNHPOySbtx+GXCTJBdOphvVLraANUPPMAipUPA1InRjaoRUgBOHColu71VFCap5Sc9d533EyroKl3MXz+z0oW1XzfZ4ToMg3IyrvHrhQMN
其中appid是表示健康码程序应用唯一ID(全部大部分二维码都是用微信小程序,可以用小程序的appid)。
互通路由方案
开发一个路由中心,路由中心提供不同健康码程序的注册服务,提供标准的接入API,支持转发不同健康码互认请求协议,如下图:
路由中心支持自定义插件进行协议转换,主要是对存量健康码协议转换成标准,方便不同健康码协议互认。
路由中心模块组成
- 应用管理: 维护申请应用的appkey、appsecret和对应的回调接口
- 网关:根据appkey选择正确的回调接口
- 第三方码适配:进行协议兼容处理,兼容强势方的二维码服务
总结
- 共享用户身份信息涉及到法律隐私,路由中心应该支持两类二维码:a.app用户授权同意共享用户信息;b. app用户不愿意授权共享用户信息。
- 二维码内容有限,给业务的业务码可能过短不利于处理自己的业务,二维码设计需要灵活方便后续灵活扩展
以广州穗康码和龙江码为例互通架构大致如下: