对于通用硬件设备,可以通过展示二维码的方式供企业微信成员扫码登录。扫码成功后,云端会给设备推送用户扫码事件
登录二维码分为静态二维码、动态二维码两种形态。我们建议有屏幕有计算能力的设备尽量都使用安全级别更高的动态二维码。
动态二维码:
二维码内容格式如下:
https://open.work.weixin.qq.com/connect/hardware?sn=%s×tamp=%u&nonce=%u&signature=%s&type=dynamic_login&state=%s
参数说明:
参数名 | 是否必须 | 类型 | 描述 |
---|---|---|---|
sn | 是 | String | 设备SN(全局唯一) |
state | 是 | String | 需要用户扫码后透传给设备的参数 |
timestamp | 是 | Uint32 | unix时间戳,单位为秒。动态二维码过期时间为30min即1800s ,当扫码时间戳(UTC/GMT+08:00)与timestamp差值大于1800时,此动态二维码过期 |
nonce | 是 | Uint64 | 随机数 |
type | 是 | string | 此处固定为dynamic_login |
signature | 是 | string(40) | 设备签名,sha1(sort(sn、SecretNo、timestamp、nonce, type、state))。sort的含义是将参数值按照字母字典排序,然后从小到大拼接成一个字符串。SecretNo是由企业微信为每个设备生成的密钥,供应商可将其固化到设备上。如果设备生产线不方便分别烧录SecretNo,可以统一烧录seedSecretNo,首次联网时通过换取SecretNo接口获取。 |
注意:部分设备与服务器可能存在时间差,建议每15min刷新动态二维码。
静态二维码:
在设备每次绑定激活后,都可以请求云端获取一个二维码的二进制数据。此二维码仅在换绑企业后会失效。
请求包体:
{
"cmd":"gen_login_qrcode",
"headers":
{
"req_id":"xxxxx"
},
"body":
{
"state": "Matchine_01",
"format_version":1
}
}
参数说明:
参数名 | 是否必须 | 类型 | 描述 |
---|---|---|---|
req_id | 是 | String | 请求的id,自行保证不会重复即可 |
state | 是 | String | 需要用户扫码后透传给设备的参数 |
format_version | 是 | Uint32 | 表示回包的格式,目前版本为1 |
返回结果:
4Bytes | 4Bytes | req_id_len Bytes | 4Bytes | Data_len Bytes |
---|---|---|---|---|
format_version | req_id_len | req_id | data_len | binary |
以上所有字段均为直接拼接,没有任何分隔符,解析时先解析出字段长度,再继续解析字段内容。
字段含义如下:
format_version | 数据格式的版本号,目前为1 |
---|---|
req_id_len | req_id的长度 |
req_id | 请求的id,此处企业微信透传上行的req_id |
data_len | 文件的二进制长度 |
binary | 文件的二进制 |