完整微信硬件接入案例源码:点我下载案例源码
设备授权:新接口,厂商不需要提供deviceid
为了简化第三方厂商的生产流程,降低接入微信的门槛,公众平台提供了新的设备授权接口。新接口中,deviceid由微信生成,作为设备在微信平台的唯一标识,第三方不需要在固件中烧入deviceid。deviceid和设备二维码在上一节已经讲过,不明白的读者可点击获取设备deviceid和设备二维码查看。
设备授权流程如下:
设备功能服务器设置:
这是微信硬件设备服务器设置,如果硬件设备类型返回到H5界面,可关闭此项功能。
java授权代码:
package com.wepayweb.weixin.util.device; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.URL; import java.net.URLConnection; /**** * * @author www.vxzsk.com V型知识库 * */ public class DeviceAuthTest { /** * V型知识库 * 模拟post方法 */ public static String sendPost(String requrl,String param){ URL url; String sTotalString=""; try { url = new URL(requrl); URLConnection connection = url.openConnection(); connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("Content-Type", "text/xml"); // connection.setRequestProperty("Content-Length", body.getBytes().length+""); connection.setRequestProperty("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"); connection.setDoOutput(true); OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), "utf-8"); out.write(param); // 向页面传递数据。post的关键所在! out.flush(); out.close(); // 一旦发送成功,用以下方法就可以得到服务器的回应: String sCurrentLine; sCurrentLine = ""; sTotalString = ""; InputStream l_urlStream; l_urlStream = connection.getInputStream(); // 传说中的三层包装阿! BufferedReader l_reader = new BufferedReader(new InputStreamReader( l_urlStream)); while ((sCurrentLine = l_reader.readLine()) != null) { sTotalString += sCurrentLine + "\r\n"; } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(sTotalString); return sTotalString; } public static void main(String[] args) { String access_token="";//更换为自己的access_token String deviceId="";//调用生成二维码接口返回的设备id String mac="";//设备mac地址,可询问提供硬件设备的厂商人员 String params="{\"device_num\":\"1\",\"device_list\":[{" +"\"id\":\""+deviceId+"\"," +"\"mac\":\""+mac+"\"," +"\"connect_protocol\":\"3\"," +"\"auth_key\":\"\"," +"\"close_strategy\":\"1\"," +"\"conn_strategy\":\"1\"," +"\"crypt_method\":\"0\"," +"\"auth_ver\":\"0\"," +"\"manu_mac_pos\":\"-1\"," +"\"ser_mac_pos\":\"-2\"," +"\"ble_simple_protocol\": \"0\"" + "}]," +"\"op_type\":\"1\"" + "}"; String s=DeviceAuthTest.sendPost("https://api.weixin.qq.com/device/authorize_device?access_token="+access_token, params); System.out.println("返回:"+s); } }
用户把上述代码复制到自己工程里,执行main方法即可。
在main方法中读者要填充几个参数,其中67行的access_token参数可在https://www.vxzsk.com/28.html地址参考。
68行的deviceid参数可参考获取设备id和二维码这节课程。
mac地址询问硬件设备提供商。
返回结果
成功:json方式返回授权成功的设备
{"resp":[ { "base_info": { "device_type":"your_devcie_type", "device_id":"id" }, "errcode":0, "errmsg":"ok" } ]}
错误的Json返回示例:{"errcode":42001,"errmsg":""}
接口入参:
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
感觉本站内容不错,读后有收获?小额赞助,鼓励网站分享出更好的教程