方案一:
注意:这一步可以获取到设备ID和二维码,如果需要引用的可以通过二维码,而设备ID是微信后台生成的。
直接在浏览器中这样请求即可返回你需要的设备和二维码,上图只是为了大家更加明白这个是干嘛的:https://api.weixin.qq.com/device/getqrcode?access_token=TOKEN&product_id=产品ID
此接口会返回一个链接,用链接生成二维码。 用户扫描后,绑定设备。就会与设备绑定。 只有绑定后的设备微信才会主动连接 。
方案二:
1.设备授权
https://api.weixin.qq.com/device/create_qrcode?access_token=ZWcTAh_Ux2p2J6zhXeUt2cQZqMqjfShLbSTK661xrQYagO8ONtqG8LAh6jeTsNTjv7hu-ZsSQzlQOwubrsrmWgJDUa_WZVQH4muVZ75dhQGzBXdMK4lBc0FyHaeF35AKXZWjADANPM参数:
{
"device_num":"1",
"device_list":[
{
"id":"设备Id",
"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":"(0|1)0表示授权设备,1表示更新设备",
"product_id": "产品类型Id(公众平台设备功能中产品ID)"
}
调用此接口后,在公众号主页面就会主动连接设备。
注意:这一步在链接中请求的设备ID可以用方案一中得到的设备ID,但是不一定要用 , 因为微信后台生成的是公众平台唯一ID加上后面的他生成的数据组成的。
完成上面的其中一个步骤后接着执行下面的方法:
1.页面上调用方法
wx.invoke('startScanWXDevice', { "connType": "blue", "btVersion": 'ble' }, function (res) {
$('#result').append('开始扫描' + '\r\n');
});
开始搜索周边设备,搜索到的结果会被onScanWXDeviceResult 监听到,其中会包含有设备Id和绑定状态
2.选择没有绑定设备,调用getWXDeviceTicket获取到ticket后,将ticket和设备Id,传入后台,代码如下:
//绑定设备
$("#bind").click(function () {
wx.invoke('getWXDeviceTicket', { "deviceId": mac, 'type': '1' }, function (res) {
// $('#result').append(JSON.stringify(res) + '\r\n');
//获取ticket
var ticket = res.ticket;
$.ajax({
url: '/Test/Bind',
type: 'post',
data: { ticket: ticket, mac: mac },
success: function (data) {
console.log(JSON.stringify(data));
}
});
});
});
3.后台调用:https://api.weixin.qq.com/device/bind?access_token=ACCESS_TOKEN 参考页面地址:http://iot.weixin.qq.com/wiki/new/index.html?page=3-4-7 绑定的接口,完成设备和用户的绑定
4.绑定成功后,会被onWXDeviceBindStateChange监听到:
wx.on('onWXDeviceBindStateChange',
function (res) {
//把res输出来看吧
$('#result').append(JSON.stringify(res) + '\r\n');
});
5.绑定后,IOS的设备就会主动连接设备了。
好了,下面开始给大家介绍坑。
为什么说IOS会主动连接设备呢?我想在这里说,他不光主动,还特么秒连,如果你们测试连接的时候,尽量找一个IOS手机放在身边,否则你连不上的时候大概就会以为是程序有问题了。 下面来讲讲安卓机,安卓机有时候连接得非常快,有时候会灰常灰常慢,或者直接连不上,任你想破脑袋,最终的结果就是,有时候还是连不上,经过研究发现,这个是因为当你进入微信对应的公众号时,上面有一个正在连接,或者是已连接0个设备,这个是因为微信会不断的去扫描设备,如果扫描到了,会直接请求配对,所以有时候我们没点页面中的扫描按钮就会出现已连接一个设备。开始说重点了 , 如果我们通过公众号,点击网页进入页面,点击扫描设备时,会发现身边的设备都扫描到了,会进入(onScanWXDeviceResult)这个监听函数中,但是连接有时候会连不到,但是扫描的那个函数虽然有时会扫描不到,但是公众号上方的那个不断的扫描和请求是一直都在执行的,如果它连接到设备了,那么你进入网页点扫描的时候会秒连。在这里就是想告诉大家,公众号上方的那个连接是一直都存在的。有时候忽然连上了也许就是它连上了。如果是一个公众号连接多个设备的时候(问题只存在安卓机)在连接中也只能连接一个设备的,连接上来的都是公众号上方的那个连接做的事。
在微信公众号连接设备中,虽然微信会不断的扫描,但是扫描到设备之后只会连接一次,而IOS一次就连接上了,安卓系统完全靠运气!
有不足之处,请大家踊跃发言,提出来大家一起学习,共同进步,让更多人少遇坑!