微信设备授权
第一步 : https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
第二步: 获取deviceid和二维码
第三方获取deviceid和设备二维码。
接口调用请求说明
http请求方式: GET
https://api.weixin.qq.com/device/getqrcode?access_token=ACCESS_TOKEN&product_id=PRODUCT_ID
参数说明:
字段 | 是否必须 | 描述 |
---|---|---|
product_id | 否 | 设备的产品编号(由微信硬件平台分配)。可在公众号设备功能管理页面查询。 当product_id 为‘1’时,不要填写product_id 字段(会引起不必要错误); 当product_id 不为‘1’时,必须填写 product_id 字段; |
返回结果
正确的Json返回结果:
{resp_msg:{"ret_code":0," error_info":"ok"},"deviceid":"XXX","qrticket":"XXX"}
错误的Json返回示例:
{resp_msg:{"ret_code":-1," error_info":"system error"}}
返回字段说明:
字段 | 描述 |
---|---|
device_id | 设备id |
qrticket | 设备二维码生产串 |
devicelicence | 产品使用直连SDK时返回的设备证书 |
【注意】 device_id由公众平台生成,是设备的唯一标识,且与二维码(qrticket字段)存在对应关系。 【第三方厂商在二维码中追加自定数据】 公众平台返回的二维码生成串形式如: http://we.qq.com/d/QRCODE_TICKET(其中QRCODE_TICKET是微信生产的二维码ticket),第三方可以自行选择是否在公众平台返回的二维码的基础之上追加自定义的数据,是否追加自定义数据是可选的,由第三方自行决定。 追加自定义数据的方法:在公众平台的二维码后追加#3RD_DEFINE_DATA(其中,#作为分隔符,3RD_DEFINE_DATA是第三方自定义数据),追加后的二维码形式如:http://we.qq.com/d/QRCODE_TICKET#3RD_DEFINE_DATA 。 在用户扫描绑定设备的时候,公众平台会把二维码中的3RD_DEFINE_DATA使用base64编码,放到bind消息中,推送给第三方(详情参考1.2章节 消息接口:“绑定/解绑”设备)。
字段 |
字段的值 |
微信返回的设备二维码 |
http://we.qq.com/d/QRCODE_TICKET |
第三方自定义数据 |
3RD_DEFINE_DATA |
追加自定义数据后的二维码 |
http://we.qq.com/d/QRCODE_TICKET#3RD_DEFINE_DATA |
扫描绑定时bind消息推送给 第三方的数据 |
Base64编码后的3RD_DEFINE_DATA |
第三步 :利用deviceid更新设备属性
第三方公众账号将device id及其属性信息提交公众平台进行授权。
接口调用请求说明
http请求方式: POST
https://api.weixin.qq.com/device/authorize_device?access_token=ACCESS_TOKEN
POST数据说明
POST数据示例如下:
{
"device_num":"1",
"device_list":[
{
"id":"dev1",
"mac":"123456789ABC",
"connect_protocol":"3",
"auth_key":"",
"close_strategy":"1",
"conn_strategy":"1",
"crypt_method":"0",
"auth_ver":"1",
"manu_mac_pos":"-1",
"ser_mac_pos":"-2",
"ble_simple_protocol": "0"
}
],
"op_type":"1"
}
字段 | 是否必须 | 描述 |
---|---|---|
access_token | 是 | 调用接口凭证 |
device_num | 是 | 设备id的个数 |
device_list | 是 | 设备id的列表,json的array格式,其size必须等于device_num |
id | 是 | 设备的deviceid |
mac | 是 | 设备的mac地址 格式采用16进制串的方式(长度为12字节), 不需要0X前缀,如: 1234567890AB |
connect_protocol | 是 | 支持以下四种连接协议: android classic bluetooth – 1 ios classic bluetooth – 2 ble – 3 wifi -- 4 一个设备可以支持多种连接类型,用符号"|"做分割,客户端优先选择靠前的连接方式(优先级按|关系的排序依次降低),举例: 1:表示设备仅支持andiod classic bluetooth 1|2:表示设备支持andiod 和ios 两种classic bluetooth,但是客户端优先选择andriod classic bluetooth 协议,如果andriod classic bluetooth协议连接失败,再选择ios classic bluetooth协议进行连接 (注:安卓平台不同时支持BLE和classic类型) |
auth_key | 是 | auth及通信的加密key,第三方需要将key烧制在设备上(128bit),格式采用16进制串的方式(长度为32字节),不需要0X前缀,如: 1234567890ABCDEF1234567890ABCDEF |
close_strategy | 是 | 断开策略,目前支持: 1:退出公众号页面时即断开连接 2:退出公众号之后保持连接不断开 |
conn_strategy | 是 | 连接策略,32位整型,按bit位置位,目前仅第1bit和第3bit位有效(bit置0为无效,1为有效;第2bit已被废弃),且bit位可以按或置位(如1|4=5),各bit置位含义说明如下: 1:(第1bit置位)在公众号对话页面,不停的尝试连接设备 4:(第3bit置位)处于非公众号页面(如主界面等),微信自动连接。当用户切换微信到前台时,可能尝试去连接设备,连上后一定时间会断开 |
crypt_method | 是 | auth加密方法,目前支持两种取值: 0:不加密 1:AES加密(CBC模式,PKCS7填充方式) |
auth_ver | 是 | auth version,设备和微信进行auth时,会根据该版本号来确认auth buf和auth key的格式(各version对应的auth buf及key的具体格式可以参看“客户端蓝牙外设协议”),该字段目前支持取值: 0:不加密的version 1:version 1 |
manu_mac_pos | 是 | 表示mac地址在厂商广播manufature data里含有mac地址的偏移,取值如下: -1:在尾部、 -2:表示不包含mac地址 其他:非法偏移 |
ser_mac_pos | 是 | 表示mac地址在厂商serial number里含有mac地址的偏移,取值如下: -1:表示在尾部 -2:表示不包含mac地址 其他:非法偏移 |
ble_simple_protocol | 否 | 精简协议类型,取值如下:计步设备精简协议:1 (若该字段填1,connect_protocol 必须包括3。非精简协议设备切勿填写该字段) |
op_type | 否 | 请求操作的类型,限定取值为: 1:设备更新(更新已授权设备的各属性值) |
返回结果
成功:json方式返回授权成功的设备
{"resp":[
{
"base_info":
{
"device_type":"your_devcie_type",
"device_id":"id"
},
"errcode":0,
"errmsg":"ok"
}
]}
错误的Json返回示例:
{"errcode":42001,"errmsg":""}
字段 | 是否必须 | 说明 |
resp | 是 | 设备id授权的response(json数组形式) |
base_info | 是 | 设备基本信息 (包括device typ和device id,目前device type为用户的原始id) |
errcode | 是 | 错误码,0表示设置成功,非0表示失败 |
errmsg | 是 | 错误信息(同errcode对应) |
1、 第三方调用该服务,需要拥有设备功能权限
2、 建议id字段为英文字母、下划线、数字三类字符的串或者组合,不带其他标点符号,以免json串解析失败
3、 connec_protocol为设备连接的协议类型,目前有四种连接方式(见字段说明),可以支持四种连接方式的任意组合,并且可以设置客户端优先选择的连接方式,客户端会优先选择该连接方式进行连接,若制定的优先协议无法连接成功,客户端回尝试指定的其他协议方式连接;其他类型可以后续再添加,请第三方同学确保值有效
4、 conn_strategy连接策略,按位进行定义取值(第2bit不能置位;所有bit均不置位也不支持,即取值为 0),譬如手环类产品,可能需要及时同步数据,可以填5,表示在公众号对话页面,不停的尝试连接设备(取值1),并且处于非公众号页面时,微信有机会去连接设备,保证数据能及时同步(取值4)
5、 crypt_method目前支持取值为0和1,对于计算能力弱的设备可以设置为0(不进行加密处理,此时auth_ver也需要为0),目前的加密方法只支持AES
6、 auth_ver目前只支持取值为0或1,不同的取值会影响“设备---微信---后台”的auth过程的数据包的格式,具体的取值请参看“客户端蓝牙外设协议”,并且,如果不需要加密,则crypt_method和auth_ver都需要为0,
7、 对于ios蓝牙2.0和4.0设备,微信客户端做了连接建立的弹框优化操作:对于ios蓝牙4.0协议,广播包必须带上mac地址,即:manu_mac_pos必须设置(且为-1,非ios蓝牙4.0设备才可以设置为-2);对于ios蓝牙2.0协议,iap的accessory Info的serial number可以不带mac地址,ser_mac_pos设置为-2,也可以在尾部带上mac地址,设置有效(-1),对于除以上两种协议以外的其他协议,该两个值的设置均无效,可以设置为0
作者:KeerDi —— 北方的后生
出处:http://www.cnblogs.com/keerdi/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。