第一步 : https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
第二步: 獲取deviceid和二維碼
第三方獲取deviceid和設備二維碼。
接口調用請求說明
http請求方式: GET https://api.weixin.qq.com/device/getqrcode?access_token=ACCESS_TOKEN&product_id=PRODUCT_ID
參數說明:
字段 | 是否必須 | 描述 |
---|---|---|
product_id | 否 | 設備的產品編號(由微信硬件平台分配)。可在公眾號設備功能管理頁面查詢。 當product_id 為‘1’時,不要填寫product_id 字段(會引起不必要錯誤); 當product_id 不為‘1’時,必須填寫 product_id 字段; |
返回結果
正確的Json返回結果:
{resp_msg:{"ret_code":0," error_info":"ok"},"deviceid":"XXX","qrticket":"XXX"}
錯誤的Json返回示例:
{resp_msg:{"ret_code":-1," error_info":"system error"}}
返回字段說明:
字段 | 描述 |
---|---|
device_id | 設備id |
qrticket | 設備二維碼生產串 |
devicelicence | 產品使用直連SDK時返回的設備證書 |
【注意】 device_id由公眾平台生成,是設備的唯一標識,且與二維碼(qrticket字段)存在對應關系。 【第三方廠商在二維碼中追加自定數據】 公眾平台返回的二維碼生成串形式如: http://we.qq.com/d/QRCODE_TICKET(其中QRCODE_TICKET是微信生產的二維碼ticket),第三方可以自行選擇是否在公眾平台返回的二維碼的基礎之上追加自定義的數據,是否追加自定義數據是可選的,由第三方自行決定。 追加自定義數據的方法:在公眾平台的二維碼后追加#3RD_DEFINE_DATA(其中,#作為分隔符,3RD_DEFINE_DATA是第三方自定義數據),追加后的二維碼形式如:http://we.qq.com/d/QRCODE_TICKET#3RD_DEFINE_DATA 。 在用戶掃描綁定設備的時候,公眾平台會把二維碼中的3RD_DEFINE_DATA使用base64編碼,放到bind消息中,推送給第三方(詳情參考1.2章節 消息接口:“綁定/解綁”設備)。
字段 |
字段的值 |
微信返回的設備二維碼 |
http://we.qq.com/d/QRCODE_TICKET |
第三方自定義數據 |
3RD_DEFINE_DATA |
追加自定義數據后的二維碼 |
http://we.qq.com/d/QRCODE_TICKET#3RD_DEFINE_DATA |
掃描綁定時bind消息推送給 第三方的數據 |
Base64編碼后的3RD_DEFINE_DATA |
第三步 :利用deviceid更新設備屬性
第三方公眾賬號將device id及其屬性信息提交公眾平台進行授權。
接口調用請求說明
http請求方式: POST https://api.weixin.qq.com/device/authorize_device?access_token=ACCESS_TOKEN
POST數據說明
POST數據示例如下: { "device_num":"1", "device_list":[ { "id":"dev1", "mac":"123456789ABC", "connect_protocol":"3", "auth_key":"", "close_strategy":"1", "conn_strategy":"1", "crypt_method":"0", "auth_ver":"1", "manu_mac_pos":"-1", "ser_mac_pos":"-2", "ble_simple_protocol": "0" } ], "op_type":"1" }
字段 | 是否必須 | 描述 |
---|---|---|
access_token | 是 | 調用接口憑證 |
device_num | 是 | 設備id的個數 |
device_list | 是 | 設備id的列表,json的array格式,其size必須等於device_num |
id | 是 | 設備的deviceid |
mac | 是 | 設備的mac地址 格式采用16進制串的方式(長度為12字節), 不需要0X前綴,如: 1234567890AB |
connect_protocol | 是 | 支持以下四種連接協議: android classic bluetooth – 1 ios classic bluetooth – 2 ble – 3 wifi -- 4 一個設備可以支持多種連接類型,用符號"|"做分割,客戶端優先選擇靠前的連接方式(優先級按|關系的排序依次降低),舉例: 1:表示設備僅支持andiod classic bluetooth 1|2:表示設備支持andiod 和ios 兩種classic bluetooth,但是客戶端優先選擇andriod classic bluetooth 協議,如果andriod classic bluetooth協議連接失敗,再選擇ios classic bluetooth協議進行連接 (注:安卓平台不同時支持BLE和classic類型) |
auth_key | 是 | auth及通信的加密key,第三方需要將key燒制在設備上(128bit),格式采用16進制串的方式(長度為32字節),不需要0X前綴,如: 1234567890ABCDEF1234567890ABCDEF |
close_strategy | 是 | 斷開策略,目前支持: 1:退出公眾號頁面時即斷開連接 2:退出公眾號之后保持連接不斷開 |
conn_strategy | 是 | 連接策略,32位整型,按bit位置位,目前僅第1bit和第3bit位有效(bit置0為無效,1為有效;第2bit已被廢棄),且bit位可以按或置位(如1|4=5),各bit置位含義說明如下: 1:(第1bit置位)在公眾號對話頁面,不停的嘗試連接設備 4:(第3bit置位)處於非公眾號頁面(如主界面等),微信自動連接。當用戶切換微信到前台時,可能嘗試去連接設備,連上后一定時間會斷開 |
crypt_method | 是 | auth加密方法,目前支持兩種取值: 0:不加密 1:AES加密(CBC模式,PKCS7填充方式) |
auth_ver | 是 | auth version,設備和微信進行auth時,會根據該版本號來確認auth buf和auth key的格式(各version對應的auth buf及key的具體格式可以參看“客戶端藍牙外設協議”),該字段目前支持取值: 0:不加密的version 1:version 1 |
manu_mac_pos | 是 | 表示mac地址在廠商廣播manufature data里含有mac地址的偏移,取值如下: -1:在尾部、 -2:表示不包含mac地址 其他:非法偏移 |
ser_mac_pos | 是 | 表示mac地址在廠商serial number里含有mac地址的偏移,取值如下: -1:表示在尾部 -2:表示不包含mac地址 其他:非法偏移 |
ble_simple_protocol | 否 | 精簡協議類型,取值如下:計步設備精簡協議:1 (若該字段填1,connect_protocol 必須包括3。非精簡協議設備切勿填寫該字段) |
op_type | 否 | 請求操作的類型,限定取值為: 1:設備更新(更新已授權設備的各屬性值) |
返回結果
成功:json方式返回授權成功的設備
{"resp":[ { "base_info": { "device_type":"your_devcie_type", "device_id":"id" }, "errcode":0, "errmsg":"ok" } ]}
錯誤的Json返回示例:
{"errcode":42001,"errmsg":""}
字段 | 是否必須 | 說明 |
resp | 是 | 設備id授權的response(json數組形式) |
base_info | 是 | 設備基本信息 (包括device typ和device id,目前device type為用戶的原始id) |
errcode | 是 | 錯誤碼,0表示設置成功,非0表示失敗 |
errmsg | 是 | 錯誤信息(同errcode對應) |
1、 第三方調用該服務,需要擁有設備功能權限 2、 建議id字段為英文字母、下划線、數字三類字符的串或者組合,不帶其他標點符號,以免json串解析失敗 3、 connec_protocol為設備連接的協議類型,目前有四種連接方式(見字段說明),可以支持四種連接方式的任意組合,並且可以設置客戶端優先選擇的連接方式,客戶端會優先選擇該連接方式進行連接,若制定的優先協議無法連接成功,客戶端回嘗試指定的其他協議方式連接;其他類型可以后續再添加,請第三方同學確保值有效 4、 conn_strategy連接策略,按位進行定義取值(第2bit不能置位;所有bit均不置位也不支持,即取值為 0),譬如手環類產品,可能需要及時同步數據,可以填5,表示在公眾號對話頁面,不停的嘗試連接設備(取值1),並且處於非公眾號頁面時,微信有機會去連接設備,保證數據能及時同步(取值4) 5、 crypt_method目前支持取值為0和1,對於計算能力弱的設備可以設置為0(不進行加密處理,此時auth_ver也需要為0),目前的加密方法只支持AES 6、 auth_ver目前只支持取值為0或1,不同的取值會影響“設備---微信---后台”的auth過程的數據包的格式,具體的取值請參看“客戶端藍牙外設協議”,並且,如果不需要加密,則crypt_method和auth_ver都需要為0, 7、 對於ios藍牙2.0和4.0設備,微信客戶端做了連接建立的彈框優化操作:對於ios藍牙4.0協議,廣播包必須帶上mac地址,即:manu_mac_pos必須設置(且為-1,非ios藍牙4.0設備才可以設置為-2);對於ios藍牙2.0協議,iap的accessory Info的serial number可以不帶mac地址,ser_mac_pos設置為-2,也可以在尾部帶上mac地址,設置有效(-1),對於除以上兩種協議以外的其他協議,該兩個值的設置均無效,可以設置為0