微信公众号开发——3、硬件设备接入
来源:互联网 发布:北京优化新材料 编辑:程序博客网 时间:2024/05/21 12:48
关键参考文档:微信硬件平台
一、为设备添加产品
1、在认证过的服务号或订阅号下,在微信公众平台添加“设备功能”插件。公众测试号提供设备功能接口,供开发者测试使用。
2、在公众号平台的“测试号管理”下,选择“设备功能接口”并对其进行设置,进入“产品管理界面”并选择“添加产品”。
3、产品添加成功后,会为每一类型的产品提供一个产品编号,该产品编号在为设备授权时,以product_id字段为每个产品授权,默认分配100个测试产品。
重点参数:
每个产品唯一的二维码:微信硬件平台要求每一个注册设备都有唯一的设备编号,设备开发者可以调用微信 后台接口生成带设备编号的二维码,每个二维码需要与每台设备一一对应。用户购买产 品的同时拿到设备二维码,通过扫描设备二维码就可以在微信上直接绑定该设备
每种型号唯一的二维码:型号二维码是指一个二维码对应某一个类别/型号的产品,不包含某个具体设备的信息,因此在设备生产过程中,不需要二维码与设备进行一一对应。用户使用扫一扫,扫描品类二维码时,微信客户端会通过局域网发现技术搜索该类别/型号的设备,发现后再进行绑定。因此,使用型号二维码的设备必须支持微信AirKiss局域网发现(即AirKiss2.0)
微信配网:通过微信公众号使用AirKiss技术为硬件设备进行连网配置。
蓝牙配网:通过微信公众号使用AirSync技术为硬件设备进行连网配置。
二、获取设备二维码:
型号二维码(每种型号唯一的二维码):在添加产品时,若选择了产品二维码对应类型,在设备管理的产品详情,可以找到对应产品对应的二维码。
一机一码(每个产品唯一的二维码):每授权一个设备,产品对应授权配额将为减少减少一个。通过以下两种方式进行授权
方案一:第三方获取deviceid和设备二维码(由微信公众平台生成设备id,根据产品id和公众账号access_token随机授权一台设备,并生成deviceid),调用微信接口如下
private void getqrcode(String token, String productid) throws Exception{String initUrl = "https://api.weixin.qq.com/device/getqrcode?access_token=" + token + "&product_id=" + productid;doGet(new URL(initUrl));}
protected String doGet(URL url) throws Exception{HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();StringBuffer sb = new StringBuffer();String line = "";BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));if (connection.getResponseCode() == HttpsURLConnection.HTTP_OK) {while((line = reader.readLine()) != null){sb.append(line);}}reader.close();connection.disconnect();return sb.toString();}返回结果格式如下:
{"base_resp":{"errcode":0,"errmsg":"ok"},"deviceid":"deviceid","qrticket":"qrticket","devicelicence":"devicelicence"}
其中,deviceid表示每个设备对应的标识,qrticket是该设备对应的二维码链接,通过草料二维码即可生成相应二维码,devicelicence为设备证书,可提供给设备作为凭据。之后需要为设备进行授权,方可在网页中获取设备信息,并为设备配网。
该授权过程同方案2,但post数据格式不同,不需要productid为参数,op_type设为1,post数据格式如下
{ "device_num":"1", "device_list":[ { "id":"deviceid", "mac":"1cda27c12d69", "connect_protocol":"4", "auth_key":"Abcdef1234566543abcdef1234566544", "close_strategy":"2", "conn_strategy":"1", "crypt_method":"0", "auth_ver":"0", "manu_mac_pos":"-1", "ser_mac_pos":"-2", "ble_simple_protocol": "0" } ], "op_type":"1"}方案二:第三方公众账号将deviceid及其属性提交到公众平台,并进行授权,之后再调用微信接口获取对应设备的获取二维码(需要硬件设备提供deviceid及其他属性信息),post调用微信接口如下,其中本文post参数从文件中读取。
授权过程(如果deviceid已经被授权过,则不能重新授权):
private void authorizeDevices(String token, String postFilePath ) throws Exception{URL url = new URL("https://api.weixin.qq.com/device/authorize_device?access_token=" + token);doPost(url, postFilePath);}
protected void doPost(URL url, String postFilePath) throws Exception{HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); connection.setConnectTimeout(5*1000); connection.setReadTimeout(5*1000); connection.setDoOutput(true); connection.setDoInput(true); connection.setUseCaches(false); connection.setRequestMethod("POST"); connection.setRequestProperty("Charset","utf-8"); connection.setRequestProperty("Content-Disposition","utf-8"); String params = readfile(postFilePath); OutputStream os = connection.getOutputStream(); os.write(params.getBytes()); os.flush(); os.close(); if (connection.getResponseCode() == HttpsURLConnection.HTTP_OK){ InputStream is = connection.getInputStream(); StringBuilder sb = new StringBuilder(); byte[] bytes = new byte[1024]; int i = 0; while ((i = is.read(bytes)) != -1){ sb.append(new String(bytes,0,i,"utf-8")); } is.close(); } os.close(); connection.disconnect();}
private String readfile(String path) throws Exception{FileReader fileReader = new FileReader(path);BufferedReader reader = new BufferedReader(fileReader);StringBuffer sBuffer = new StringBuffer();String line = "";while((line = reader.readLine()) != null){sBuffer.append(line);}fileReader.close();reader.close();return sBuffer.toString();}post文件格式如下,一次授权设备数量建议不超过5个。
{ "device_num":"1", "device_list":[ { "id":"test", "mac":"1cda27c12d69", "connect_protocol":"4", "auth_key":"Abcdef1234566543abcdef1234566544", "close_strategy":"2", "conn_strategy":"1", "crypt_method":"1", "auth_ver":"1", "manu_mac_pos":"-1", "ser_mac_pos":"-2", "ble_simple_protocol": "0" } ], "op_type":"0", "product_id": "40332"}微信服务器返回数据格式如下:
{"resp":[{"base_info":{"device_type":"gh_3ec41c424","device_id":"test"},"errcode":0,"errmsg":"ok"}]}其中device_type表示微信公众号的原始id,device_id表示硬件设备所提供的唯一标识。
根据device_id生成二维码过程(建议获取二维码链接一次不超过5个):
private void create_qrcode(String token, String postFilePath) throws Exception{URL url = new URL("https://api.weixin.qq.com/device/create_qrcode?access_token=" + token);doPost(url, postFilePath);}发送post数据格式如下:
{ "device_num":"1", "device_id_list":["test"]}返回对应的二维码格式如下:
{"errcode":0,"errmsg":"ok","device_num":1,"code_list":[{"device_id":"test","ticket":"http://we.qq.com/d/AQA0CYHUzuT6DRPIo9pmjSA9yq2SPqcfv6z5"}]}通过草料二维码即可生成相应的二维码图片。
三、公众号绑定设备
1、使用型号二维码绑定设备:
微信扫码型号二维码:将首先进入网络配置模式,设备需要具备微信配网(Airkiss)或蓝牙配网(AirSync)的功能。微信将通过局域网发现功能区蓝牙发现功能搜索相应设备,并为设备进行网络配置。
2、使用一机一码绑定设备:
扫码绑定即可。
3、微信中查看绑定的设备:
路径:"我"->"设置"->"设备"。
四、在网页中获取设备信息
关键信息:用户openid,参考”微信网页开发“第三部分,两种方式获取openid。
public String getBindDevicesByOpenId(String token, String open_id) throws Exception{String url = "https://api.weixin.qq.com/device/get_bind_device?access_token=" + token + "&openid=" + open_id; String connect = doGet(new URL(url)); return connect;}获取数据格式如下:
{"resp_msg":{"ret_code":0,"error_info":"ok"},"openid":"oNAmB1KA5ykfs09m02N0AhcUk","device_list":[{"device_type":"gh_3154bc424","device_id":"AA25799","sub_device_list":[]},{"device_type":"gh_3154bc424","device_id":"test","sub_device_list":[]}]}
1、型号二维码:
使用微信扫一扫型号二维码,按流程即可成功为已进入网络配置模式的设备进行配置网络。
2、一机一码:
在网页中调用JsApi接口为设备配置网络。在jsp网页配置如下:
<script type="text/javascript"> wx.config({beta:true,debug : false,appId : '${appid}',timestamp : ${sign.timestamp},nonceStr : '${sign.nonceStr}',signature : '${sign.signature}',jsApiList : ['configWXDeviceWiFi', 'openWXDeviceLib', 'startScanWXDevice', 'getWXDeviceInfos']});$(document).ready(function(){ wx.ready(function(){wx.invoke('configWXDeviceWiFi', {}, function(res){ var err_msg = res.err_msg; if(err_msg == 'configWXDeviceWiFi:ok') { alert("配网成功" + res); } }); })});</script>注意事项:
1、注入js文件:
<script src="https://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>2、确保signature有效,保证网页有权调用接口,可设置bubug:true开启调试模式
- 微信公众号开发——3、硬件设备接入
- 微信硬件平台设备直连全讲解(3)公众号的开发
- 微信公众号开发之接入
- 微信公众号开发接入指南
- 微信公众号开发--接入
- 1、微信公众号开发-接入
- 微信公众号开发第一步 - 接入
- 微信公众号开发-接入指南
- 微信开发 公众号接入服务器
- Java微信公众平台开发(一)——接入微信公众平台
- 微信硬件设备接入接口协议
- 微信公众号开发接入微信
- 微信公众号开发之——第三方自动回复机器人接入
- 微信开发学习总结(二)—微信开发入门(公众号接入以及access_token获取)
- 微信java开发1——接入微信公众平台开发
- 微信支付接入流程——公众号支付
- 微信公众号接入
- 微信公众号接入
- 无法注入XXXMapper
- xor
- R
- Eclipse怎么在线安装JD-Eclipse反编译插件?
- [干货] Flume综述与实例
- 微信公众号开发——3、硬件设备接入
- qb day5
- CCF 历年真题之最大的矩形(_1312_3_LargestRectangle.java)参考答案
- 滴滴笔试第一题xor(参考大神的)
- 安卓开发:使用AsyncTask异步向服务器发起request请求
- HDU 6205 card card card(展开字符串思想+思维)
- Java编程---贪吃蛇游戏
- 链表的相关操作
- QT使用插件QAxWidget来展示web页面