admin
2021-01-27 92f1d85ddc449ce7452f9d52f8b081e6b69c720b
utils/src/main/java/com/qq/weixin/mp/aes/XMLParse.java
@@ -1,79 +1,79 @@
/**
 * 对公众平台发送给公众账号的消息加解密示例代码.
 *
 * @copyright Copyright (c) 1998-2014 Tencent Inc.
 */
// ------------------------------------------------------------------------
package com.qq.weixin.mp.aes;
import java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
/**
 * XMLParse class
 *
 * 提供提取消息格式中的密文及生成回复消息格式的接口.
 */
class XMLParse {
   /**
    * 提取出xml数据包中的加密消息
    *
    * @param xmltext
    *            待提取的xml字符串
    * @return 提取出的加密消息字符串
    * @throws AesException
    */
   public static Object[] extract(String xmltext) throws AesException {
      Object[] result = new Object[3];
      try {
         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
         DocumentBuilder db = dbf.newDocumentBuilder();
         StringReader sr = new StringReader(xmltext);
         InputSource is = new InputSource(sr);
         Document document = db.parse(is);
         Element root = document.getDocumentElement();
         NodeList nodelist1 = root.getElementsByTagName("Encrypt");
         NodeList nodelist2 = root.getElementsByTagName("ToUserName");
         result[0] = 0;
         result[1] = nodelist1.item(0).getNodeValue();
         result[2] = nodelist2.item(0).getNodeValue();
         return result;
      } catch (Exception e) {
         e.printStackTrace();
         throw new AesException(AesException.ParseXmlError);
      }
   }
   /**
    * 生成xml消息
    *
    * @param encrypt
    *            加密后的消息密文
    * @param signature
    *            安全签名
    * @param timestamp
    *            时间戳
    * @param nonce
    *            随机字符串
    * @return 生成的xml字符串
    */
   public static String generate(String encrypt, String signature, String timestamp, String nonce) {
      String format = "<xml>\n" + "<Encrypt><![CDATA[%1$s]]></Encrypt>\n"
            + "<MsgSignature><![CDATA[%2$s]]></MsgSignature>\n" + "<TimeStamp>%3$s</TimeStamp>\n"
            + "<Nonce><![CDATA[%4$s]]></Nonce>\n" + "</xml>";
      return String.format(format, encrypt, signature, timestamp, nonce);
   }
}
/**
 * 对公众平台发送给公众账号的消息加解密示例代码.
 *
 * @copyright Copyright (c) 1998-2014 Tencent Inc.
 */
// ------------------------------------------------------------------------
package com.qq.weixin.mp.aes;
import java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
/**
 * XMLParse class
 *
 * 提供提取消息格式中的密文及生成回复消息格式的接口.
 */
class XMLParse {
   /**
    * 提取出xml数据包中的加密消息
    *
    * @param xmltext
    *            待提取的xml字符串
    * @return 提取出的加密消息字符串
    * @throws AesException
    */
   public static Object[] extract(String xmltext) throws AesException {
      Object[] result = new Object[3];
      try {
         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
         DocumentBuilder db = dbf.newDocumentBuilder();
         StringReader sr = new StringReader(xmltext);
         InputSource is = new InputSource(sr);
         Document document = db.parse(is);
         Element root = document.getDocumentElement();
         NodeList nodelist1 = root.getElementsByTagName("Encrypt");
         NodeList nodelist2 = root.getElementsByTagName("ToUserName");
         result[0] = 0;
         result[1] = nodelist1.item(0).getNodeValue();
         result[2] = nodelist2.item(0).getNodeValue();
         return result;
      } catch (Exception e) {
         e.printStackTrace();
         throw new AesException(AesException.ParseXmlError);
      }
   }
   /**
    * 生成xml消息
    *
    * @param encrypt
    *            加密后的消息密文
    * @param signature
    *            安全签名
    * @param timestamp
    *            时间戳
    * @param nonce
    *            随机字符串
    * @return 生成的xml字符串
    */
   public static String generate(String encrypt, String signature, String timestamp, String nonce) {
      String format = "<xml>\n" + "<Encrypt><![CDATA[%1$s]]></Encrypt>\n"
            + "<MsgSignature><![CDATA[%2$s]]></MsgSignature>\n" + "<TimeStamp>%3$s</TimeStamp>\n"
            + "<Nonce><![CDATA[%4$s]]></Nonce>\n" + "</xml>";
      return String.format(format, encrypt, signature, timestamp, nonce);
   }
}