調用微信jsapi完成公眾號藍牙藍牙傳輸功能(測試版)
一、第一階段:首先要在微信測試號申請一個產品(得到產品的id號)
二、 第二階段:微信后台基本設置,需要通過在線接口調試去設置
-
回到微信主頁,依次點擊"開發者工具"進入“在線接口調試工具”(http://mp.weixin.qq.com/debug)
-
在“在線接口調試工具”頁面按照如圖所示填入自己在第一階段的測試賬號的appID和appsecret的內容(吐槽:一會兒又appID,這里又appid,上面appsecret這里secret,就不能規范一點嗎?):
並點擊檢查問題(吐槽:其實就是提交請求的設置,不知道為什么按鈕名稱會叫“檢查問題”)。點擊后倘若成功的話會在頁面下面返回有如圖所示的包含access_token的字段信息(若返回了error,請仔細檢查appID和appsecret是否都寫對了,這里要寫測試賬號的哦,因為我們第一階段的設置都是設置的測試賬號的):
-
向上滾動鼠標到這個界面,並填寫如圖所示內容,其中的access_token填寫剛才獲取到的那個字符串並在末尾加上&product_id=21816(注意,這個數字是在第一階段的第7步所得到的那個,這里的21816是我自己的,需要填寫自己對應的那個)。
同樣,點擊“檢查問題”,得到如下圖所示的內容:
-
向上滾動鼠標到這個界面,並填寫如圖所示內容,其中的access_token欄會自動根據你上次操作而自動填寫上,這里可以把“&product_id=21816”這幾個字符刪除。若沒有自動填寫,那就手動填寫一下步驟2獲取到的access_token值吧。
body填寫的是一個json對象,目的是把你的藍牙設備在微信后台進行注冊,不然微信到時候是不會自動去連接你的藍牙設備的。
body內容及參數解釋:
{
"device_num": "1", //這里填寫注冊設備的個數,必須和device_list中的
"device_list": [
{
"id": "gh_dd58c7bef8e7_b00fef105fd4269f", //填寫步驟3獲取到的deviceid
"mac": "209148B74D40", //填寫你的設備的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"
}
],
"op_type": "0", //0表示新注冊設備信息,1表示更新(修改)設備信息,當要修改的時候就寫1。
"product_id": "21543"//填寫設備所屬的產品id,就是第一階段所添加的那個產品的product_id
}
然后點擊“檢查問題”,得到如下回復:

倘若得到的回復是error alredy exist的失敗字樣,可以把op_type的值更改為“1”。若出現account quota not enough,請檢查product_id是否填寫正確。
-
進入百度搜索“在線二維碼”,根據個人喜好選擇一個二維碼平台,制作二維碼。這里選擇的是“草料二維碼”,如圖:
QQ截圖20160814120212.png圖中紅色的url是步驟3獲取到的qrticket。復制填入即可。然后點擊“生成二維碼”即可,然后圖中右邊的就是該設備的綁定二維碼,用微信掃描,並點擊“綁定設備”,然后點擊“進入公眾號”。這個時候在公眾號(測試號)頂部標題欄會顯示灰白色的“連接中”或“已連接1個設備”等相關信息(記得打開手機藍牙和藍牙外設)。
三、第三階段:調用微信jsapi進行數據傳輸(前兩個都是准備階段)
wx.ready(function(){
//初始化設備
wx.invoke('openWXDeviceLib', {'brandUserName':'測試號的appid'}, function(res){});
//連接藍牙
wx.invoke('connectWXDevice', {
'deviceId' :
設備的授權id(生成二維碼時候一同出現的)
,
'connType' : 'ble'
}, function(res) {
//alert(JSON.stringify(res));
//向藍牙發送命令
wx.invoke(
'sendDataToWXDevice',
{
'deviceId' : 設備的授權id(生成二維碼時候一同出現的),
'connType' : 'ble',
'base64Data' : '要發送的數據'
}, function(res) {
var data=JSON.stringify(res);
var json = eval("(" + data + ")");
//alert(json.err_msg);
if(json.err_msg=="sendDataToWXDevice:ok"){
//接收到設備傳來的數據
wx.on('onReceiveDataFromWXDevice',function(res) {
//alert(JSON.stringify(res));
var data = JSON.stringify(res);
var json = eval("(" + data + ")");
alert(json.base64Data);
});
}else{
alert("錯誤提示!");
}
});
});
//錯誤提示
wx.error(function(res){
alert("wx.error錯誤:"+JSON.stringify(res));
//如果初始化出錯了會調用此方法,沒什么特別要注意的
});
});