Closed xtwvf207 closed 6 years ago
@xtwvf207 发下相关文档的链接
主要是在安全模式下,微信给第三方系统的通知,是加密后的 https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419318479&token=&lang=zh_CN
拿每隔10分钟,微信发给第三方的数据举例:
我们收到的数据如下:
<xml> <AppId><![CDATA[wxee9eaed635441255]]></AppId> <Encrypt><![CDATA[i0Daw26UQhti4FUu2OdCz3bMZZTH5/G68Vhu9xo6vui5mt2AP3vEVmzWhR+HdVZuwtxVGPWQV/r5OhP4WZrGv2m6bfXgvC3m91yFpWxr8+lW2jo+nZH7zk3/eKkOpzlg+UT2m9rQR3N19Drt97x1/TTy7XbZqpoUaWMX1pUK87Jpd0UdOZ/nTQKDdb6OHom/7LaddBWWPVTCarOAQB+GbDZT7HKSqgsuvCw6z3wKOiUk3lxoFcqhyZ8eyD5XzuQy6/RsYuCrC4iXoapRIxKC8f/El0HwcigX5WljmfbAuF7UN8HFFoeysAUzIN7xrNGbN8wHy06ebI7XQr+8GC5jAEgH3RpGRoqenXbhIdnuM4b50b9CPGMjSyGwXLsZGpqtBfdV/E8nc+Rib7CV0b88McxcuJ4Ej3rD3vGQ8kG3OLu7fo9Ifqiw+QDG2QhFGJrd6KZOcmy2rz+EQuA7IAn/Qg==]]></Encrypt></xml>
其中,我们把Encrypt中的内容进行解密,解密后的数据为:
<xml><AppId><![CDATA[wxee9eaed635441255]]></AppId>
<CreateTime>1523869379</CreateTime>
<InfoType><![CDATA[component_verify_ticket]]></InfoType>
<ComponentVerifyTicket><![CDATA[ticket@@@YKpz2m7RaMnH7zeGhWS2gDBh56Y_5SMfuO4f6MfslcE0pClowYHTjKD5HOrcpH8LfhaRnr2t3AAQt55qAuhN5Q]]></ComponentVerifyTicket>
</xml>
如果不是安全模式,那么第三方平台收到的数据,就直接是上面的xml内容。
另外,还有其它格式,比如,加密消息,那么加密的数据格式为:
<xml>
<ToUserName></ToUserName>
<Encrypt></Encrypt>
</xml>
所以,针对加密消息,可能还需要创建一个javaBean。
解密之后,变成:
<xml>
<ToUserName></ToUserName>
<FromUserName></FromUserName>
<CreateTime>1411035097</CreateTime>
<MsgType></MsgType>
<Content></Content>
<MsgId>6060349595123187712</MsgId>
</xml>
@xtwvf207 对于api 调用我们主要关心的是解密后数据,可以使用以下方式操作:
String postData = StreamUtils.copyToString(inputStream, Charset.forName("utf-8"));
//使用 XMLConverUtil 将数据转成map ,
XMLConverUtil.convertToMap(postData);
恩,很有道理。就按照你说的,我修改一下我这边代码。谢谢!
包 weixin.popular.bean.component下,可否增加一个类ComponentEncryptXML.java用于解密微信定时10分钟每次发送过来的加密数据。
package weixin.popular.bean.component;
import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "xml") @XmlAccessorType(XmlAccessType.FIELD) public class ComponentEncryptXML {
}