1. 程式人生 > >微信藍芽BLE接入除錯指引 測試公眾號篇

微信藍芽BLE接入除錯指引 測試公眾號篇

微信藍芽BLE接入除錯指引

測試公眾號篇

微信測試公眾號

2.1 申請測試公眾號

可以在http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login申請到一個用於測試的公眾號,這個帳號可以用於除錯具用AirSync協議的藍芽裝置,簡精協議好像調不了。

申請步驟:

開啟網址,點選登陸後,出來二維碼,用微信掃一下,在彈出的頁面點確認登陸,然後網頁會自動進入測試號介面

 

進入後,注意一下上圖示紅線的值,BLE韌體裡的DEVICE_TYPE的值要改成上面標紅微訊號的值,而appIDappsecret這兩個值在獲取access_token時會用到。

2.2 新增藍芽產品

在測試號介面,找到“功能服務”-》“裝置功能”,點開啟,然後進行設定,進去後新增產品,然後參考下圖填寫,就紅圈要注意,其他隨便填。

 

 

 

新增完後,並不表示進入公眾號後就可以去連藍芽了,這只是將公眾號配置成具有藍芽功能,想要連線藍芽裝置,還得繼續往下。另外,注意上圖示紅圈的那個值6563,它是產品IDproduct_id),在授權時會用到。

另外,說明一下,這裡提到的產品是什麼意思,要是以為是一個裝置就是一樣產品,那就慘了,因為測試帳號的限額就5個產品。我的理解是,一個產品,是指具有相同介面功能的硬體,比如藍芽手錶,就一個產品,所有手錶都是同一個產品,藍芽手環也是一樣產品,

WIFI功能的裝置,就另一個產品,是一樣大種類,或者叫做功能類別。

剛建立的這個產品,只是個空殼,接下來使用“微信公眾平臺介面除錯工具”

來向產品新增藍芽裝置。

2.3 新增藍芽裝置

 

然後再一下appidsecret的值,appid是測試號介面的appID,secretappsecret。填好後點一下“檢查問題”,正常的話,會返回:

 

上面的請求地址,意思是,點選“檢查問題”按鈕時,實際執行的就是這個指令,你把這個地址拷到網頁瀏覽,顯示的資訊就是返回結果。

access_token 叫訪問令牌,它的有效期是2小時,它的作用是下面提到的指令都得帶訪問令牌,否則測試號後臺是不會接受的。

獲取到access_token後,我們就可以新增裝置了。將介面型別選擇為“硬體接入API介面除錯”,介面列表選擇為“裝置授權”:

 

body裡填入下面資訊:

{

    "device_num": "1", 

    "device_list": [

        {

            "id": "device3", 

            "mac": "f4e6f41549f2", 

            "connect_protocol": "3", 

            "auth_key": "000102030405060708090a0b0c0d0e0f", 

            "close_strategy": "1", 

            "conn_strategy": "1", 

            "crypt_method": "1", 

            "auth_ver": "1", 

            "manu_mac_pos": "-1", 

            "ser_mac_pos": "-2"

        }

    ], 

    "op_type": "0", 

    "product_id": "6563"

}

正常返回如下:

 

我們來解讀一下BODY的資訊,BODY是一個json結構,即“變數”:“值”的格式構成,不清楚的可以查一下。

{

    "device_num": "1", //表示device_list裡有多少項,1表示1項,如果是2list就得有兩項。 

    "device_list": [ //裝置列表

        {

            "id": "device3", //這個值要與BLE韌體裡的DEVICE_ID一致,可以自定義,也可通過微信HTTP介面生成。

            "mac": "f4e6f41549f2", //這個值是硬體篇提到的BLE裝置的MAC地址,與廣播資料裡的MAC地址順序一樣,也和手機掃描到的MAC地址順序一樣。

            "connect_protocol": "3", //3 表示BLE藍芽協議

            "auth_key": "000102030405060708090a0b0c0d0e0f", //BLE韌體裡的aes_key值一致。

            "close_strategy": "1", //1:退出公眾號頁面時即斷開連線

            "conn_strategy": "1", //1:(第1bit 置位)在公眾號對話頁面,不停的嘗

試連線裝置

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

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

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

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

        }

    ], 

    "op_type": "0", //0 表示新增,1表示更改,第一次用0,之後用1

    "product_id": "6563" //對用新增的產品號,op_type = 0時需要。

}

裝置授權,不表示進入微訊號後就會連線裝置,只是表示在後面的配置裡可以被引用。

對上面的“id”項,詳細說明一下,id指的是device_id,是唯一的,不能重名,它有兩種產生方式,一種是使用者自己定義,如上的device3就是我自己取的,另一種是呼叫微信介面產生:

 

一般在這裡只填access_token,會產生錯誤提示:

{

    "base_resp": {

        "errcode": 100020, 

        "errmsg": "account quota not enough"

    }

}

原因是deviceid的產生需要指定產品ID,表明它是基於哪個產品。解決方法是:在access_tokey裡填寫ACCESS_TOKEN&product_id=PRODUCT_ID,如下:

 

http的請求方式:

https://api.weixin.qq.com/device/getqrcode?access_token=ue48NdvmlCrEcknhRP0FJwmeg0d0hOu9aB9Q9ZW0d6HB-RhM6O2ffnSxhzXvH8ClAgSJ1mYnHiQLRScXCH3tMfXv5X-Wlk5kYC6waMPCpyMIYKgAGAQGS&product_id=6563

正常返回結果:

 

會產生一個deviceid和一個二維碼地址。這個二維碼地址是對應該裝置的,它與公眾號二維碼的不同是,它加入了裝置資訊,使用者在掃描二維碼後,可以繫結裝置,而掃描公眾號二維碼,則不會要求繫結裝置。

二維碼地址可以通過這個網站http://cli.im/url來產生二維碼圖片。

另外,自己定義的device id,可以通過下命令來產生二維碼地址:

curl https://api.weixin.qq.com/device/create_qrcode?access_token=ACCESS_TOKEN -d "{\"device_num\":\"1\", \"device_id_list\":[\"device3\"]}"

上面的access_tokendevice3要換成自己的。

Curl命令一般在linux終端下使用比較方便,WINDOWS的自己查一下。

2.4 繫結裝置

二維碼圖片產生後,在微信掃一掃,就會跳出繫結介面,已綁過的除外。

 

點選繫結後,微信就會將device3與使用者的微號進行繫結,可以通除錯介面工具,在“查詢使用者繫結的裝置”中查到,

 

Openid是使用者微訊號,當用戶微信關注裝置後,可以在測試號介面裡的使用者列表上看到。

查詢使用者繫結的裝置”也可通過下面命令查到:

https://api.weixin.qq.com/device/get_bind_device?access_token=ACCESS_TOKEN&openid=微訊號

這裡的繫結,不是實際物理意義上的繫結,只是軟體的配置,並沒有形成實際的連線。在繫結後,進入公眾號,公眾號就才會根據它繫結的裝置去掃描,當找到對應的裝置後,才去連線。所以,如果沒有配置好繫結資訊,進入公眾號後是不會去連線裝置的。

另外,除了通過掃描裝置二維碼去繫結裝置,還可以通過HTTP介面來繫結裝置,這個可以參考下面2.6提到的強制繫結裝置。

至此,繫結裝置後就可以在公眾號裡連線BLE裝置,完成第一階段的握手,當然,資料的互發還得等第三方伺服器建好後。

2.5 裝置接入介面協議

可以看到,除錯工具的每個介面都有對應的http請求方式,這些請求方式,在《裝置接入介面協議V2.3.2》裡有詳細解釋,可以在http://iot.weixin.qq.com/wiki/new/index.html?page=6-1下載。

接入介面協議有涉及第三方伺服器介面,也有微信本身介面,下面做一下簡單導讀。

開啟文件後,翻到目錄,字首是“訊息介面”的,是微信發給第三方伺服器的,方式是向地址http://URL?signature=SIGNATURE×tamp=12345678&nonce=NONCE傳送一段格式如下的xml資料:

<xml>

<ToUserName><![CDATA[%s]]></ToUserName>

<FromUserName><![CDATA[%s]]></FromUserName>

<CreateTime>%u</CreateTime>

<MsgType><![CDATA[%s]]></MsgType>

<DeviceType><![CDATA[%s]]></DeviceType>

<DeviceID><![CDATA[%s]]></DeviceID>

<Content><![CDATA[%s]]></Content>

<SessionID>%lu</SessionID>

<MsgID>%lu</MsgID>

<OpenID><![CDATA[%s]]></OpenID>

</xml>

然後,第三伺服器也會迴應一段xml資料,格式如下:

<xml>

<ToUserName><![CDATA[%s]]></ToUserName>

<FromUserName><![CDATA[%s]]></FromUserName>

<CreateTime>%u</CreateTime>

<MsgType><![CDATA[%s]]></MsgType>

<DeviceType><![CDATA[%s]]></DeviceType>

<DeviceID><![CDATA[%s]]></DeviceID>

<SessionID>%u</SessionID>

<Content><![CDATA[%s]]></Content>

</xml>

在目錄中,字首為“API”的,是對微信進行操作的介面,比如配置微信,上面2.32.4提到的新增裝置、查詢繫結,以及通過微信往裝置發資料等。API方式,是請求微信的API地址,如果附帶有引數或資料,則發一段JSCON格式的資料,如獲取裝置二維碼:

curl https://api.weixin.qq.com/device/create_qrcode?access_token=ATOKEN -d

"{\"device_num\":\"2\", \"device_id_list\":[\"ID1\",\"ID2\"]}"

2.6 API除錯

除錯公眾號後臺,常用到的幾個API

獲取ACCESS_TOKEN:

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appID&secret=appsecret

appIDappsecret可以在測試號介面找到。

ACCESS_TOKEN是其他API的訪問令牌,有效期是2小時。

獲取裝置二維碼:

curl https://api.weixin.qq.com/device/create_qrcode?access_token=ACCESS_TOKEN -d "{\"device_num\":\"1\", \"device_id_list\":[\"device1\"]}"

device1是使用者自定義的裝置ID

授權裝置:

curl https://api.weixin.qq.com/device/authorize_device?access_token=ACCESS_TOKEN -d '{"device_num": "1","device_list": [{"id": "device1", "mac": "f4e6f41549f2", "connect_protocol": "3","auth_key": "", "close_strategy": "1","connect_protocol": "3","conn_strategy": "1","crypt_method": "0","auth_ver": "0","manu_mac_pos": "-1","ser_mac_pos": "-2"}], "op_type": "1", "product_id": "6563"}'

各項引數在2.3有提到。

查詢使用者繫結的裝置:

https://api.weixin.qq.com/device/get_bind_device?access_token=ACCESS_TOKEN&openid=OPEN_ID

OPEN_ID是使用者的微訊號。查詢該微訊號已繫結的裝置。

強制繫結裝置

Curl https://api.weixin.qq.com/device/compel_bind?access_token=ACCESS_TOKEN -d ‘{"device_id": "device1","openid": "OPEN_ID"}’

device1是使用者自定義的裝置IDOPEN_ID是使用者微訊號

強制解綁裝置

Curl https://api.weixin.qq.com/device/compel_unbind?access_token=ACCESS_TOKEN -d ‘{"device_id": "device1","openid": "OPEN_ID"}’

device1是使用者自定義的裝置IDOPEN_ID是使用者微訊號