文章目录
前言
本案例中将介绍在物联网智能家居设备场景下,如何使用微信小程序的设备订阅消息能力将设备提供的告警信息以订阅消息的形式发送给微信用户。
一、小程序设备消息能力是什么?
小程序设备消息能力指的是,只要用户在小程序内订阅通知,开发者就可以将这些事件以订阅消息的形式发送给用户。消息在微信内的产品形态,目前以服务通知形式呈现。
二、使用步骤
1.小程序管理平台
1.1申请硬件设备能力
具体请参看: [https://developers.weixin.qq.com/miniprogram/dev/framework/device/device-access.html]
1.2配置订阅模板
2.后端开发
2.1获取票据
通过调用https://api.weixin.qq.com/wxa/getsnticket来获取票据。代码如下(示例):
public WxDeviceTicketResultVO getSnTicket(WxDeviceTicketVO vxDeviceTicketVO) {
HttpRequest postRequest = HttpUtil.createPost(weChatConfig.getSnUrl() + "?access_token=" + getAccessToken());
HttpResponse postResponse = postRequest.body(JSONUtil.toJsonStr(vxDeviceTicketVO)).execute();
if (postResponse.getStatus() == HttpStatus.HTTP_OK) {
WxDeviceTicketResultVO wxDeviceTicketResultVO = JSONUtil.toBean(postResponse.body(), WxDeviceTicketResultVO.class);
return wxDeviceTicketResultVO;
}else{
log.error("获取token失败:", postResponse);
throw new BusinessException(postResponse.body());
}
}
2.2推送消息
通过调用https://api.weixin.qq.com/wxa/getsnticket来推送消息。代码如下(示例):
public WxDeviceMsgResultVO sendDeviceMsg(WxDeviceMsgVO wxDeviceMsgVO) {
HttpRequest postRequest = HttpUtil.createPost(weChatConfig.getSendDeviceMsgUrl() + "?access_token=" + getAccessToken());
HttpResponse postResponse = postRequest.body(JSONUtil.toJsonStr(wxDeviceMsgVO)).execute();
if (postResponse.getStatus() != HttpStatus.HTTP_OK) {
log.error("发送设备消息失败:", postResponse);
throw new BusinessException(postResponse.body());
}
WxDeviceMsgResultVO wxDeviceMsgResultVO = JSONUtil.toBean(postResponse.body(), WxDeviceMsgResultVO.class);
if (wxDeviceMsgResultVO.getErrcode().equals("0")) {
return wxDeviceMsgResultVO;
}else{
throw new BusinessException(wxDeviceMsgResultVO.getErrcode() + ":" + wxDeviceMsgResultVO.getErrmsg());
}
}
3.小程序开发
3.1用户授权订阅消息
小程序主要就是通过消息模版id和设备modelId来进行订阅。代码如下(示例):
let dicA = {
sn: this.$store.state.user.userInfo.id ,
modelId: getApp().globalData.config.modelId
}
let _this = this
getSnTicket(dicA).then(res => {
console.log(" 获取票据信息 = ",res);
console.log("ticket:" , res.data.snTicket)
wx.requestSubscribeDeviceMessage({
tmplIds: [getApp().globalData.config.tempId],
sn: _this.$store.state.user.userInfo.id + '',
snTicket: res.data.snTicket,
modelId: getApp().globalData.config.modelId,
success(res) {
console.log(res)
},
fail(res) {
console.log(res)
}
}
)
}).catch(err => {
console.log(err)
})
}
4. 案例图示
总结
本文简单介绍了微信小程序的设备订阅消息的简单使用,如有任何问题欢迎留言交流。