企业微信智慧设备设备签名计算

企业微信考勤机设备签名踩坑

在进行sha1加密前,先要把sn seedSecretNo timestamp 进行字母字典排序再拼接上请求对应的字符串

获取SecretNo时

官方文档说明

设备签名,sha1(sort(sn、seedSecretNo、timestamp、nonce, “secret_no”))。sort的含义是将参数值按照字母字典排序,然后从小到大拼接成一个字符串。seedSecretNo是由企业微信为这一批设备统一生成的密钥,供应商可将其固化到设备上。本接口计算签名时,需要把字符串常量 “secret_no”参与到计算之中,区别其他场景的签名。

js示例

1
2
3
4
5
6
7
8
9
const sn = "dz103xxxx23";
const seedSecretNo = "5be31dc585047fccxxxxcd957286d759";
const timestamp = Math.floor(Date.now() / 1000);
const nonce = "1235125213";
const tmp = [];
const secret_no = "secret_no";
tmp.push(sn, seedSecretNo, timestamp, nonce);
tmp.sort();
const device_signature = sha1(tmp.join("") + secret_no);

注册网络

官方文档

设备签名,sha1(sort(sn、SecretNo、timestamp、nonce, “register”))。sort的含义是将参数值按照字母字典排序,然后从小到大拼接成一个字符串。SecretNo是由企业微信为每个设备生成的密钥,供应商可将其固化到设备上。如果设备生产线不方便分别烧录SecretNo,可以统一烧录seedSecretNo,首次联网时通过换取SecretNo接口获取。本接口计算签名时,需要把字符串常量”register”参与到计算之中,区别二维码的签名。

js示例

1
2
3
4
5
6
7
8
9
const sn = "dz103xxxx23";
const seedSecretNo = "5be31dc585047fccxxxxcd957286d759";
const timestamp = Math.floor(Date.now() / 1000);
const nonce = "1235125213";
const tmp = [];
const secret_no = "register";
tmp.push(sn, seedSecretNo, timestamp, nonce);
tmp.sort();
const device_signature = sha1(tmp.join("") + secret_no);