WiFi设备连接状态实时查询

Wifi设备没有和客户端直连,客户端无法实时感知wifi设备的连接状态。为了让用户了解到wifi设备的连接状态,客户端会通过微信的消息通道向第三方请求设备的连接状态。另外,第三方感知到设备状态变化时可以主动通过微信消息通道把状态推送给客户端。

处理逻辑如下图所示:

消息接口:用户订阅/退订设备状态,消息推送给第三方

户订阅/退订设备状态,微信把消息推送给第三方,接收第三方的设备状态信息回包。

消息说明

<xml>
	<ToUserName><![CDATA[%s]]></ToUserName>
	<FromUserName><![CDATA[%s]]></FromUserName>
	<CreateTime>%ld</CreateTime>
	<MsgType><![CDATA[%s]]></MsgType>		
	<Event><![CDATA[%s]]></Event>	
	<DeviceType><![CDATA[%s]]></DeviceType>
	<DeviceID><![CDATA[%s]]></DeviceID>
	<OpType>%u</OpType>
	<OpenID><![CDATA[%s]]></OpenID>
</xml>

字段 是否必须 描述
ToUserName 接收方(公众号)的user name
FromUserName 发送方(微信用户)的user name
CreateTime 消息创建时间,消息后台生成
MsgType 消息类型:device_event
Event 事件类型,取值为 subscribe_status/unsubscribe_status subscribe_status:订阅设备状态 unsubscribe_status:退订设备状态
DeviceType 设备类型,目前为“公众账号原始ID”
DeviceID 设备ID,第三方提供
OpType 请求类型: 0:退订设备状态;
1:心跳;(心跳的处理方式跟订阅一样) 2:订阅设备状态;
OpenID 微信用户账号的OpenID

设备状态订阅的响应内容

<xml>
	<ToUserName><![CDATA[%s]]></ToUserName>
	<FromUserName><![CDATA[%s]]></FromUserName> 
	<CreateTime>%u</CreateTime>
	<MsgType><![CDATA[%s]]></MsgType>
	<DeviceType><![CDATA[%s]]></DeviceType>
	<DeviceID><![CDATA[%s id]]></DeviceID>
	<DeviceStatus>%u</DeviceStatus> 
</xml>
字段 是否必须 描述
ToUserName 接收方(微信用户)的user name
FromUserName 发送方(公众号)的user name
CreateTime 消息创建时间,第三方自己取当前秒级时间戳
MsgType 消息类型:device_status
DeviceType 设备类型(同请求参数)
DeviceID 设备ID(同请求参数)
DeviceStatus 设备状态: 0--未连接; 1--已连接

API:第三方主动发送设备状态消息给微信终端

第三方发送设备状态消息给设备主人的微信终端。

接口调用请求说明

http请求方式: POST
https://api.weixin.qq.com/device/transmsg?access_token=ACCESS_TOKEN

POST数据说明

{
    "device_type": "DEVICETYPE", 
    "device_id": "DEVICEID", 
    "open_id": " OPEN_ID", 
    "msg_type": " MSG_TYPE", 
    "device_status": " DEVICE_STATUS"
}
字段 是否必须 描述
device_type 设备类型,目前为“公众账号原始ID”
device_id 设备ID
open_id 微信用户账号的openid
msg_type 消息类型:2--设备状态消息
device_status 设备状态:0--未连接, 1--已连接

返回结果

正确的Json返回结果:
{"ret":0,"ret_info":"this is ok"}
错误的Json返回示例,用户已经退订设备状态,第三方不再主动推送设备状态消息:
{" ret ":-1," ret_info ":" get subscribe cache fail"}