微信硬件蓝牙扫描绑定JSAPI发送数据

1:登录微信公众平台   查看权限接口  看设备功能是否开通

如果已开通(进行已下操作)   未开通先去开通

2:找到功能里面的  设备功能点击进去 选择添加产品  如果是蓝牙 选择蓝牙系列的 我这里是蓝牙就说蓝牙的

创建完成  回给你个产品ID  继续以下操作

3:开发者工具  在线调式  现获取token

3.1-接着选择 硬件调式api   选择设备授权获取deciceid和二维码/device/getqrcode     下面会出现让你填写刚刚获取到的token

填完token 后面千万要加上你刚刚获取到的产品ID  &product_id=123456   然后点击提交成功会返回OK   还有设备的ID  还有二维码地址  记住别删除了

3.2 录入设备进微信后台  选择设备授权利用deviceid跟新设备属性.....

然后同上面一样填写token 这个时候的token不要 产品ID了

下面还有一个body  填写得json数据  是

{

"device_num": "1", //数量

"device_list": [

{

"id": "xxxxxxx", //刚刚获取到的产品ID

"mac": "68C90B145B7C", //MAC码

"connect_protocol": "3", //3表示BLE蓝牙协议

"auth_key": "",  //不加密 不填

"close_strategy": "1", //1:退出公众号页面时即断开连接

"conn_strategy": "1",  //1:(第1bit置位)在公众号对话页面,不停的尝

"crypt_method": "0", //1:AES加密

"auth_ver": "0", //加密版本,0是不加密

"manu_mac_pos": "-1", /-1:MAC地址在尾部

"ser_mac_pos": "-2"//-2:表示serialnumber不包含mac地址

}

],

"product_id": "产品ID"

}

提交 看是否返回 OK  如果OK  继续往下

3.3 http://pl.iqr.cc/  这是个生产二维码的网站微信指定的  进去这个网站生成二维码用微信扫描  然后他会提示

你是否绑定设备   你点击是的话  进入公众号后  会自动连接设备的  如果设备在边上

3.4以下是生成二维码的过程图:

上传成功  会产生二维码 扫描关注  然后绑定设备

以下是我的测试页面 可参考业务逻辑需要手动修改

<%@page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport"
	content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="format-detection" content="telephone=no">
<title>测试蓝牙1</title>
<link rel="stylesheet" type="text/css" href="css/common.css">
<script src="js/jquery-1.10.2.min.js"></script>
<script type="text/javascript" src="js/JQueryGetParName.js"></script>
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<style type="text/css">
.wdbll4 {
	margin-top: 15px;
}

.grxx_top_biaoge td {
	text-align: center;
}
</style>
</head>
<body id="activity-detail" class="zh_CN ">
	<div class="wdbll4" align="center"
		style="padding-left: 10px; padding-right: 10px;">
		<div style="width: 95%; margin: 0 auto; text-align: center" id="scan">
			<div class='aui-btn aui-btn-info aui-btn-block' onclick=""
				id="startScanWXDevice">搜索蓝牙</div>
		</div>
	</div>
	<div class="wdbll4" align="center"
		style="padding-left: 10px; padding-right: 10px;">
		<div style="width: 95%; margin: 0 auto; text-align: center" id="scan">
			<div class='aui-btn aui-btn-info aui-btn-block' onclick=""
				id="stopScanWXDevice">停止搜索</div>
		</div>
	</div>

	<div class="wdbll4" align="center"
		style="padding-left: 10px; padding-right: 10px;">
		<div style="width: 95%; margin: 0 auto; text-align: center" id="scan">
			<div class='aui-btn aui-btn-info aui-btn-block' onclick="getInfo()">获取设备信息</div>
		</div>
	</div>
	<div class="wdbll4" align="center"
		style="padding-left: 10px; padding-right: 10px;">
		<div style="width: 95%; margin: 0 auto; text-align: center" id="scan">
			<div class='aui-btn aui-btn-info aui-btn-block' onclick="bleConn()">连接蓝牙</div>
		</div>
	</div>
	<div class="wdbll4" align="center"
		style="padding-left: 10px; padding-right: 10px;">
		<div style="width: 95%; margin: 0 auto; text-align: center" id="scan">
			<div class='aui-btn aui-btn-info aui-btn-block' onclick="sendData()">发送数据</div>
		</div>
	</div>

	<div id="initBle"></div>
</body>
<script type="text/javascript">
	function sacn() {
		wx.invoke("startScanWXDevice", {
			"btVersion" : "ble"
		}, function(res) {
			alert(JSON.stringify(res))
		});
	}

	function stopScan() {
		wx.invoke('stopScanWXDevice', {
			'connType' : 'ble'
		}, function(res) {
			alert(JSON.stringify(res))
		});
	}

	function getInfo() {
		wx.invoke('getWXDeviceInfos', {
			'connType' : 'ble'
		}, function(res) {
			alert(JSON.stringify(res))
		});
	}

	function bleConn() {
		wx.invoke('connectWXDevice', {
			'deviceId' : 'MTT1',
			'connType' : 'ble'
		}, function(res) {
			alert(JSON.stringify(res))
		});
	}

	function sendData() {
		wx.invoke('sendDataToWXDevice', {
			'deviceId' : 'MD99201',
			'connType' : 'ble',
			'base64Data' : 'MDAwMEZGRjItMDAwMC0xMDAwLTgwMDAtMDA4MDVGOUIzNEZC'
		}, function(res) {
			alert(JSON.stringify(res))
		});
	}

	wx.config({
		beta : true, //坑:这个很重要,必须配置这个为true,才能调用微信的硬件API
		debug : true, //是否开启调试模式,会自动弹一些消息框显示微信返回的数据
		appId : "", //让后台返回appid
		timestamp : "1465264902", //让后台返回生成证书时用的时间戳
		nonceStr : "ovRc9vDzRzAtoUNfeOzp8jiq4qISjV5y", //让后台返回生成证书时用的随机串
		signature : "", //让后台返回已当前URL地址生成的证书
		jsApiList : [ //需要调用的接口,都得在这里面写一遍
		"openWXDeviceLib",//初始化设备库(只支持蓝牙设备)
		"closeWXDeviceLib",//关闭设备库(只支持蓝牙设备)
		"getWXDeviceInfos",//获取设备信息(获取当前用户已绑定的蓝牙设备列表)
		"sendDataToWXDevice",//发送数据给设备
		"startScanWXDevice",//扫描设备(获取周围所有的设备列表,无论绑定还是未被绑定的设备都会扫描到)
		"stopScanWXDevice",//停止扫描设备
		"connectWXDevice",//连接设备
		"disconnectWXDevice",//断开设备连接
		"getWXDeviceTicket",//获取操作凭证

		//下面是监听事件:
		"onWXDeviceBindStateChange",//微信客户端设备绑定状态被改变时触发此事件
		"onWXDeviceStateChange",//监听连接状态,可以监听连接中、连接上、连接断开
		"onReceiveDataFromWXDevice",//接收到来自设备的数据时触发
		"onScanWXDeviceResult",//扫描到某个设备时触发
		"onWXDeviceBluetoothStateChange",//手机蓝牙打开或关闭时触发
		]
	});
	wx.ready(function() {

		wx.invoke('openWXDeviceLib', {
			'brandUserName' : 'gh_xxxxxxxxxx'  //公众号原始ID   IOS好像不需要要这一行代码
		}, function(res) {
			$("#initBle").append("<p>初始化设备库:" + res.err_msg + "</p>");
			if (res.bluetoothState == "off") {
				$("#initBle").append("<p>请先开启手机蓝牙</p>");
			}
		});

		wx.invoke('getWXDeviceInfos', {
			'connType' : 'blue'
		}, function(res) {
			$("#initBle").append("<p>获取我的设备:" + res.err_msg + "</p>");
		});

		document.querySelector('#startScanWXDevice').onclick = function() {
			wx.invoke('startScanWXDevice', {
				'connType' : 'blue',
				'btVersion' : 'ble'
			}, function(res) {
				console.log('开始扫描设备:', res);
				$("#initBle").append("<p>开始扫描设备:" + res.err_msg + "</p>");
				//alert(res.err_msg);
			});
		};
		document.querySelector('#stopScanWXDevice').onclick = function() {
			wx.invoke('stopScanWXDevice', {
				'connType' : 'blue'
			}, function(res) {
				$("#initBle").append("<p>停止扫描设备:" + res.err_msg + "</p>");
				console.log('停止扫描设备:', res);
				//alert(res.err_msg);
			});
		};

		wx.on('onScanWXDeviceResult', function(res) {

			var macid = JSON.stringify(res.devices[0].deviceId).replace(/\"/g,"");
			alert(macid);
			$("#initBle").append(
					"<button onclick=\"bindBle('" + macid + "')\">扫描到设备:"
							+ macid + "</button>");
		});

		//手机蓝牙状态改变时触发 (这是监听事件的调用方法,注意,监听事件都没有参数)
		wx.on('onWXDeviceBluetoothStateChange', function(res) {
			//把res输出来看吧
			$("#initBle").append("<p>蓝牙状态变更:" + JSON.stringify(res) + "</p>");
		});

		//设备绑定状态改变事件(解绑成功,绑定成功的瞬间,会触发)
		wx.on('onWXDeviceBindStateChange', function(res) {
			$("#initBle").append("<p>绑定状态变更:" + res.err_msg + "</p>");
		});

		//设备连接状态改变
		wx.on('onWXDeviceStateChange', function(res) {
			//有3个状态:connecting连接中,connected已连接,unconnected未连接
			//每当手机和设备之间的状态改变的瞬间,会触发一次
			alert(JSON.stringify(res))
			$("#initBle").append("<p>设备连接状态:" + res.state + "</p>");
		});

		//接收到设备传来的数据
		wx.on('onReceiveDataFromWXDevice', function(res) {
			$("#initBle").append("<p>收到设备数据:" + res.err_msg + "</p>");
		});

		wx.error(function(res) {
			alert("wx.error错误:" + JSON.stringify(res));
			//如果初始化出错了会调用此方法,没什么特别要注意的
		});

	});

	var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
	function base64encode(str) {
		var out, i, len;
		var c1, c2, c3;
		len = str.length;
		i = 0;
		out = "";
		while (i < len) {
			c1 = str.charCodeAt(i++) & 0xff;
			if (i == len) {
				out += base64EncodeChars.charAt(c1 >> 2);
				out += base64EncodeChars.charAt((c1 & 0x3) << 4);
				out += "==";
				break;
			}
			c2 = str.charCodeAt(i++);
			if (i == len) {
				out += base64EncodeChars.charAt(c1 >> 2);
				out += base64EncodeChars.charAt(((c1 & 0x3) << 4)
						| ((c2 & 0xF0) >> 4));
				out += base64EncodeChars.charAt((c2 & 0xF) << 2);
				out += "=";
				break;
			}
			c3 = str.charCodeAt(i++);
			out += base64EncodeChars.charAt(c1 >> 2);
			out += base64EncodeChars.charAt(((c1 & 0x3) << 4)
					| ((c2 & 0xF0) >> 4));
			out += base64EncodeChars.charAt(((c2 & 0xF) << 2)
					| ((c3 & 0xC0) >> 6));
			out += base64EncodeChars.charAt(c3 & 0x3F);
		}
		return out;
	}
</script>
</html>

下面教怎么获取正确的签名也就上上面JS中config中要用到的

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&token=&lang=zh_CN   这是错误码查看连接

http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign   这才是生成签名的连接注意上面填写的四个字段

1:jsapi_ticket      //下面介绍怎么获取他的值

2:noncestr
 为了测试这里我们先写一个零时的   ovRc9vDzRzAtoUNfeOzp8jiq4qISjV5y  //跟上面config中的一致

3:timestamp
 1465264902

4:url
     这里是需要调JS的页面所在的URL

然后点击生存签名
 

jsapi_ticket
 //获取 

https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="这里面要自己获取其它的不用改变"&type=jsapi
这是获取的请求 自己在后头组装get或post请求先获取token然后传进去请求这个连接出来的就是jsapi_ticket 

xin新手发贴大神勿喷
   建议以上能成功通过在结合后台来开发后续流程  如果不懂 [email protected]

时间: 2024-11-06 07:35:05

微信硬件蓝牙扫描绑定JSAPI发送数据的相关文章

微信硬件蓝牙开发各种坑不完全开发指南

写于:2016-4-15 几个基本要用的东西: 1.微信公众平台 网址:https://mp.weixin.qq.com 可以在此申请微信公众号,获取微信测试号. 微信测试号拥有所有功能权限,如果你有正式的企业服务号,就不必用测试号了. 2.微信JS-SDK说明文档 网址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html 到时候会引入一个JS文件,是用来调用微信提供的那些接口的 3.微信硬件平台说明文档 网址

微信硬件设备接入接口协议

微信硬件设备接入接口协议 (公开使用)Tencent Technologies Co., Ltd.腾讯科技有限公司All rights reserved产品版本 密级V2.0Beta 请输入密级:公开Tencent.腾讯科技有限公司项目名称: 微信硬件设备接入接口协议 共 页第 2 页 共 29页第 3 页 共 29页 文档历史记录第 4 页 共 29页部门 微信产品部\开放平台中心\平台开发组\架构优化组起始人员 koukoutan文档版本 描述 撰写人员 更新时间V1.0Beta 初稿 ko

微信硬件开发步骤

微信硬件开发步骤 一. 组册微信测试号 1. 首先登录http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login,然后进行组册,可以申请到一个测试号 2. 填写调试时候的接口配置信息,这样调试的时候微信后台发来的信息都会传送到这个指定的URL网页上面 这里的token相当于一种验证码,可以随意设置,只要与后面自己编写的用来响应微信后台的PHP代码里面的token值一致就可以,类似于一种加密的措施. 二. 注册一台云服务器 由第一步我

微信硬件H5面板开发(一) ---- 调用openApi

微信硬件平台是微信推出连接物与人,物与物的IOT解决方案.也就是说可以通过微信控制各种智能设备.比如一些蓝牙设备.空调.电视等等. 我本身不懂硬件(虽然是电子信息专业),硬件是北航的两个研究生在弄,小团队里我负责开发H5自定义面板,刚开始看官方文档各种迷糊,对于jssdk.jsapi.Airkiss.openApi.直连SDK都不知道该用哪个做,官方论坛问问题基本上没结果,加了几个微信硬件群问问题,发现好些开发者和我一样,同一个问题,发到几个群里问,画面好心酸.给wxthings发邮件问,能回复

基于微信硬件公众平台的智能控制开发流程

一.微信硬件公众平台整体架构 上一篇<物联网架构场景技术分析>已经探讨和分析了物联网架构的演进,基于微信硬件公众平台的智能控制方案即属于文中的第三种架构--基于统一后台服务的物联架构.其中的架构如下: 各部分的角色和分工如下: 1.微信硬件公众号平台服务器,是物联网的基础和核心部分,其负责外设设备ID的认证,类似公安部给每个公民一个身份证一样,保证每个外设都有一个合法并且唯一的ID.目前微信平台的设备ID由两部分组成,一部分是厂商运维的公众号(即手机微信关注的公众号)的原始ID,称为设备类型,

从零开始搭建微信硬件开发环境全过程——1小时掌握微信硬件开发流程

笔者决定在嵌入式企鹅圈2016年的首篇文章中,发表微信硬件物联领域极具实践价值的文章,它将能指引和帮助任何有兴趣于物联网开发的童鞋们快速掌握微信硬件开发流程,只需一个小时,而再不需要通过揣摩微信硬件浩瀚的文档资料来完成艰难构建. 笔者之前曾经撰写过一篇文章<基于微信硬件公众平台的智能控制开发流程>介绍微信硬件开发的流程,但该篇文章是理论性的描述.而本篇文章是完全可操作实践的,请结合两篇文章理解.技术咨询请发邮件至[email protected] 本篇文章的目的是快速搭建微信硬件开发的环境,完

Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析

关键词:蓝牙blueZ  A2DP.SINK.sink_connect.sink_disconnect.sink_suspend.sink_resume.sink_is_connected.sink_get_properties.AUDIO.DBUS版本号:基于android4.2之前版本号 bluez内核:linux/linux3.08系统:android/android4.1.3.4作者:xubin341719(欢迎转载.请注明作者.请尊重版权谢谢)欢迎指正错误.共同学习.共同进步!! 參考

【转】Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析

原文网址:http://blog.csdn.net/xubin341719/article/details/38584469 关键词:蓝牙blueZ  A2DP.SINK.sink_connect.sink_disconnect.sink_suspend.sink_resume.sink_is_connected.sink_get_properties.AUDIO.DBUS版本:基于android4.2之前版本 bluez内核:linux/linux3.08系统:android/android4

从零開始搭建微信硬件开发环境全过程——1小时掌握微信硬件开发流程

笔者决定在嵌入式企鹅圈2016年的首篇文章中,发表微信硬件物联领域极具实践价值的文章,它将能指引和帮助不论什么有兴趣于物联网开发的童鞋们高速掌握微信硬件开发流程.仅仅需一个小时.而再不须要通过揣摩微信硬件浩瀚的文档资料来完毕艰难构建. 笔者之前以前撰写过一篇文章<基于微信硬件公众平台的智能控制开发流程>介绍微信硬件开发的流程,但该篇文章是理论性的描写叙述.而本篇文章是全然可操作实践的,请结合两篇文章理解.技术咨询请发邮件至[email protected] 本篇文章的目的是高速搭建微信硬件开发