最近有项目需要做物联网设备和微信能实现互发消息。经过调研觉得通过公众号发送普通消息的体验不好,选择了微信硬件云方案。目前接入方案有两种具体看 https://iot.weixin.qq.com/wiki/new/index.html
1、硬件设备直接接入(设备厂商没有云服务器的方式)
2、硬件设备云接入(这种设备不需要集成微信SDK,不依赖sdk开发库的编译)
3、平台基础接入 (这种有点是接入公众号平台方式,在微信端不能出现“打开”分享功能,没有微信自定义面板)
从友好交互和方便性我们选择了第二种。
接入方案看 https://iot.weixin.qq.com/wiki/new/index.html?page=3-3
1、准备条件
申请公众号、微信认证、开通设备功能填写物联网设备产品能力登记,因为能力等级要和添加产品管理里面的消息能力相匹配不然会认证会不通过。
公众号配置基本开发信息
这里需要注意的是公众号的服务器配置和设备端的服务器配置。这些消息格式会分为json和xml。
2、做接口开发
接下来需要至少实现如下接口
如果需要实现后台直接批量绑定,这个就需要调用设备绑定和解绑API接口。如果用户取消关注公众号,那么友好的应用交互在平台收到取消关注事件时候,进行强制解绑操作。
在表结构设计上使用MongoDB进行存储,因为xml和json存储方便直接。
对xml解析使用dom4j包,导入方式
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.3</version>
</dependency>
微信xml事件推送基本可以转换成haspmap形式。简单代码如下:
Map<String,String> values=new HashMap<String, String>();
StringReader sr=new StringReader(content);
InputSource in=new InputSource(sr);
SAXReader reader = new SAXReader();
Document document=reader.read(in);
Element rootNode=document.getRootElement();
List<Element> nodes=rootNode.elements();
for(Element node:nodes) {
values.put(node.getName(),node.getText());
}
当前使用的微信传输是没有加密的,如果要对消息数据进行加密参考如下: