JSAPI:微信JSAPI是网页javascript的接口,通过JSAPI可以对支持该接口的蓝牙设备进行操作。例如扫描设备,连接设备,收发数据,绑定设备等。
其与JS-SDK的关系:微信硬件JSAPI接口属于微信JS-SDK的一部分,所以硬件JSAPI的使用首先需要遵循微信JS-SDK的使用规范。
1、绑定域名
先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。域名配置有误会报错 “invalid url domain”。
2、引入JS文件
新建html页面,并引入如下JS文件:http://res.wx.qq.com/open/js/jweixin-1.0.0.js
3、config接口配置
wx.config({
beta:true, //设置为true ,会在注入wx.invoke方法来调用还未开放的jsapi方法。
debug: true, //开启调试模式,
appId:'wxf74686d92b161ff7', //登录公众号平台可见
timestamp: <%=timestamp%>,
nonceStr: '<%=nonceStr%>',
signature: '<%=signature%>',
jsApiList: [ //需要使用的JS接口列表,需要调用的方法都在此声明一下
"openWXDeviceLib",//初始化设备库
"closeWXDeviceLib",//关闭设备库
"getWXDeviceInfos",//获取设备信息(已绑定的蓝牙设备列表)
"sendDataToWXDevice",//发送数据给设备
"startScanWXDevice",//扫描设备
"stopScanWXDevice",//停止扫描
"connectWXDevice",//连接
"disconnectWXDevice",//断开连接
"getWXDeviceTicket",//获取操作证书
"onWXDeviceBindStateChange",//设备绑定状态被改变时触发
"onWXDeviceStateChange",//监听连接状态
"onReceiveDataFromWXDevice",//接收来自连接设备所发送的数据
"onScanWXDeviceResult",//扫描到设备时会被触发
"onWXDeviceBluetoothStateChange",//蓝牙开/关切换时触发
]
});
签名算法获取signature(附录1中)
需要参数:noncestr(随机字符串)、timestamp(时间戳)、jsapi_ticket(临时票据)、url(当前网页的URL)。
示例代码:http://demo.open.weixin.qq.com/jssdk/sample.zip
wx.ready(function () {
wx.invoke("openWXDeviceLib", {"brandUserName":"gh_248e6ca70bbb"}, function (res) {
alert("openWXDeviceLib" + JSON.stringify(res));
});
wx.on("onWXDeviceBluetoothStateChange", function (res) {
alert("onWXDeviceBluetoothStateChange::" + JSON.stringify(res));
});
wx.on("onWXDeviceBindStateChange", function (res) {
alert("onWXDeviceBindStateChange::" + JSON.stringify(res));
});
wx.on("onWXDeviceStateChange", function (res) {
alert("onWXDeviceStateChange::" + JSON.stringify(res));
});
wx.on("onReceiveDataFromWXDevice", function (res) {
console.log("onReceiveDataFromWXDevice:: " + str);
});
});
需要绑定设备时则需先扫描设备,当到某个设备的时候,html会收到事件回调(onScanWXDevicesResult)。
function staScanWXDevice() {
alert("staScanWXDevice");
//监听扫描结果
wx.on("onScanWXDeviceResult", function (res) {
//解析res,获取deviceid,绑定设备需传人此字段
});
//开始扫描
wx.invoke("startScanWXDevice", {"btVersion":"ble"}, function (res) {
});
}
/绑定设备
//先获取操作凭证(type为获取的操作凭证类型,1:绑定设备 2:解绑设备)deviceId 是扫描设备时解析出
wx.invoke('getWXDeviceTicket',{"deviceId":"gh_248e6ca70bbb_5aab93a29ec00965","type":1},function(res){
if(res.err_msg !="getWXDeviceTicket:ok"){
alert("获取操作凭证失败,请重试");
return;
}else{
alert("获取操作凭证成功");
//2. 绑定操作应有后台完成,此处将deviceID和操作凭证传给后台进行绑定
//绑定操作需传入用户对应的openid,后台数据库应存储此字段
// 获取openid 需进行网页授权
//https://mp.weixin.qq.com/wiki/4/9ac2e7b1f1d22e9e57260f6553822520.html }
});
当前用户绑定设备成功后,再次打开公众号时将尝试自动连接所绑定的设备,android 微信连接成功如图,当连上设备之后,即可对设备进行收发数据。收发数据前需进行base64的编解码。
发送数据:
wx.invoke('sendDataToWXDevice', {'deviceId':'gh_248e6ca70bbb_5aab93a29ec0xxxx',"base64Data":base64encode('xxxx')}, function(res){
alert("connectWXDevice"+JSON.stringify(res));
if(res.err_msg =="sendDataToWXDevice:ok"){
alert("数据发送成功");
}else{
alert("数据发送失败");
}});
接收数据:
//接收数据
wx.on('onReceiveDataFromWXDevice',function(res){
//base64解码
});
以上实现了与蓝牙硬件设备间的信息交互,发送特定的指令到设备来实现对蓝牙硬件的控制。