最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java微信二次開發(fā)(二) Java微信文本消息接口請(qǐng)求與發(fā)送

 更新時(shí)間:2017年04月26日 09:33:01   作者:wangtianze  
這篇文章主要為大家詳細(xì)介紹了Java微信二次開發(fā)第二篇,Java微信文本消息接口請(qǐng)求與發(fā)送功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

第二篇,做微信文本消息接口請(qǐng)求與發(fā)送,具體內(nèi)容如下

需要導(dǎo)入庫(kù):dom4j-1.6.1.jar,xstream-1.3.1.jar

第一步:新建包c(diǎn)om.wtz.message.response,新建類BaseMessage.java

package com.wtz.message.response;

/**
 * @author wangtianze QQ:864620012
 * @date 2017年4月19日 下午3:12:40
 * <p>version:1.0</p>
 * <p>description:基礎(chǔ)消息類</p>
 */
public class BaseMessage {
 //接收方
 private String ToUserName;
 //發(fā)送方
 private String FromUserName;
 //消息的創(chuàng)建時(shí)間
 private long CreateTime;
 //消息類型
 private String MsgType;
 
 public String getToUserName() {
 return ToUserName;
 }
 public void setToUserName(String toUserName) {
 ToUserName = toUserName;
 }
 public String getFromUserName() {
 return FromUserName;
 }
 public void setFromUserName(String fromUserName) {
 FromUserName = fromUserName;
 }
 public long getCreateTime() {
 return CreateTime;
 }
 public void setCreateTime(long createTime) {
 CreateTime = createTime;
 }
 public String getMsgType() {
 return MsgType;
 }
 public void setMsgType(String msgType) {
 MsgType = msgType;
 }
}

第二步:找到包c(diǎn)om.wtz.message.response,新建類TextMessage.java

package com.wtz.message.response;

/**
 *  @author wangtianze QQ:864620012
 * @date 2017年4月19日 下午3:22:33
 * <p>version:1.0</p>
 *  <p>description:文本消息類</p>
 */
public class TextMessage extends BaseMessage{
 //消息內(nèi)容
 private String Content;
 
 public String getContent() {
  return Content;
 }
 public void setContent(String content) {
  Content = content;
 }
}

第三步:找到包c(diǎn)om.wtz.util,新建類MessageUtil.java

package com.wtz.util;

import java.io.IOException;
import java.io.InputStream;
import java.io.Writer;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.core.util.QuickWriter;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
import com.thoughtworks.xstream.io.xml.XppDriver;
import com.wtz.message.response.TextMessage;

/**
 *  @author wangtianze QQ:864620012
 * @date 2017年4月19日 下午3:29:58
 * <p>version:1.0</p>
 *  <p>description:消息處理工具類</p>
 */
public class MessageUtil {
 //定義了消息類型(常量:文本類型)
 public static final String RESP_MESSAGE_TYPE_TEXT = "text";
 
 //從流中解析出每個(gè)節(jié)點(diǎn)的內(nèi)容
 public static Map<String,String> parseXml(HttpServletRequest request) throws IOException{
  Map<String,String> map = new HashMap<String,String>();
  
  //從輸入流中獲取流對(duì)象
  InputStream in = request.getInputStream();
  
  //構(gòu)建SAX閱讀器對(duì)象
  SAXReader reader = new SAXReader();
  try {
   //從流中獲得文檔對(duì)象
   Document doc = reader.read(in);
   
   //獲得根節(jié)點(diǎn)
   Element root = doc.getRootElement();
   
   //獲取根節(jié)點(diǎn)下的所有子節(jié)點(diǎn)
   List<Element> children = root.elements();
   
   for(Element e:children){
    //遍歷每一個(gè)節(jié)點(diǎn),并按照節(jié)點(diǎn)名--節(jié)點(diǎn)值放入map中
    map.put(e.getName(), e.getText());
    System.out.println("用戶發(fā)送的消息XML解析為:" + e.getName() + e.getText());
   }
   
   //關(guān)閉流
   in.close();
   in = null;
  } catch (DocumentException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
  return map;
 }
 
 /**
  * 用于擴(kuò)展節(jié)點(diǎn)數(shù)據(jù)按照<ToUserName><![CDATA[toUser]]></ToUserName>,中間加了CDATA段
  */
 private static XStream xstream = new XStream(new XppDriver(){
  public HierarchicalStreamWriter createWriter(Writer out){
   return new PrettyPrintWriter(out){
    boolean cdata = true;
    public void startNode(String name,Class clazz){
     super.startNode(name,clazz);
    }
    
    protected void writeText(QuickWriter writer,String text){
     if(cdata){
      writer.write("<![CDATA[");
      writer.write(text);
      writer.write("]]>");
     }else{
      writer.write(text);
     }
    }
   };
  }
 });
 
 /**
  * 將文本消息轉(zhuǎn)換成XML格式
  */
 public static String messageToXml(TextMessage textMessage){
  xstream.alias("xml",textMessage.getClass());
  String xml = xstream.toXML(textMessage);
  System.out.println("響應(yīng)所轉(zhuǎn)換的XML:"+xml);
  return xml;
 }
}

第四步:找到包c(diǎn)om.wtz.service,新建類ProcessService.java

package com.wtz.util;

import java.io.IOException;
import java.util.Date;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import com.wtz.message.response.TextMessage;

/**
 *  @author wangtianze QQ:864620012
 * @date 2017年4月19日 下午8:04:14
 * <p>version:1.0</p>
 *  <p>description:核心服務(wù)類</p>
 */
public class ProcessService {
 public static String dealRequest(HttpServletRequest request) throws IOException{
  //響應(yīng)的XML串
  String respXml = "";
  
  //要響應(yīng)的文本內(nèi)容
  String respContent = "未知的消息類型";
  Map<String,String> requestMap = MessageUtil.parseXml(request);
  String fromUserName = requestMap.get("FromUserName");
  String toUserName = requestMap.get("ToUserName");
  String MsgType = requestMap.get("MsgType");
  String Content = requestMap.get("Content");
  
  System.out.println("用戶給公眾號(hào)發(fā)的消息為:" + Content);
  
  //構(gòu)建一條文本消息
  TextMessage textMessage = new TextMessage();
  textMessage.setToUserName(fromUserName);
  textMessage.setFromUserName(toUserName);
  textMessage.setCreateTime(new Date().getTime());
  textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
  
  if(MsgType.equals(MessageUtil.RESP_MESSAGE_TYPE_TEXT)){
   respContent = "王天澤的公眾號(hào)收到了您的一條文本消息:" + Content + ",時(shí)間戳是:" + (new Date().getTime());
  }
  textMessage.setContent(respContent);
  respXml = MessageUtil.messageToXml(textMessage);
  
  System.out.println("respXml:"+respXml);
  
  return respXml;
 }
}

第五步:找到包c(diǎn)om.wtz.service下的LoginServlet類,重寫doPost方法

package com.wtz.service;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.wtz.util.MessageUtil;
import com.wtz.util.ProcessService;
import com.wtz.util.ValidationUtil;

/**
 *  @author wangtianze QQ:864620012
 * @date 2017年4月17日 下午8:11:32
 * <p>version:1.0</p>
 *  <p>description:微信請(qǐng)求驗(yàn)證類</p>
 */
public class LoginServlet extends HttpServlet {

 @Override
 protected void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  System.out.println("get請(qǐng)求。。。。。。");
  
  //1.獲得微信簽名的加密字符串
  String signature = request.getParameter("signature");
  
  //2.獲得時(shí)間戳信息
  String timestamp = request.getParameter("timestamp");
   
  //3.獲得隨機(jī)數(shù)
  String nonce = request.getParameter("nonce");
  
  //4.獲得隨機(jī)字符串
  String echostr = request.getParameter("echostr");
  
  System.out.println("獲得微信簽名的加密字符串:"+signature);
  System.out.println("獲得時(shí)間戳信息:"+timestamp);
  System.out.println("獲得隨機(jī)數(shù):"+nonce);
  System.out.println("獲得隨機(jī)字符串:"+echostr);
  
  PrintWriter out = response.getWriter();
  
  //驗(yàn)證請(qǐng)求確認(rèn)成功原樣返回echostr參數(shù)內(nèi)容,則接入生效,成為開發(fā)者成功,否則失敗
  if(ValidationUtil.checkSignature(signature, timestamp, nonce)){
   out.print(echostr);
  }
  
  out.close();
  out = null;
 }

 /**
  * 接受微信服務(wù)器發(fā)過來的XML數(shù)據(jù)包(通過post請(qǐng)求發(fā)送過來的)
  */
 @Override
 protected void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  
  request.setCharacterEncoding("utf-8");
  response.setCharacterEncoding("utf-8");
  
  //獲取微信加密的簽名字符串
  String signature = request.getParameter("signature");
  
  //獲取時(shí)間戳
  String timestamp = request.getParameter("timestamp");
  
  //獲取隨機(jī)數(shù)
  String nonce = request.getParameter("nonce");
  
  PrintWriter out = response.getWriter();
  
  if(ValidationUtil.checkSignature(signature,timestamp,nonce)){
   String respXml = "";
   try {
    respXml = ProcessService.dealRequest(request);
   } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   out.print(respXml);
  }
  out.close();
  out = null;
 }
}

完成微信文本消息接口請(qǐng)求與發(fā)送。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Mybatis的核心架構(gòu)及源碼解讀

    Mybatis的核心架構(gòu)及源碼解讀

    這篇文章主要介紹了Mybatis的核心架構(gòu)及源碼解讀,mybatis是一款半自動(dòng)化的持久層框架,它封裝了JDBC操作,支持定制化SQL,高級(jí)映射,但它的數(shù)據(jù)庫(kù)無關(guān)性較低,需要的朋友可以參考下
    2023-08-08
  • 不了解這12個(gè)語(yǔ)法糖,別說你會(huì)Java

    不了解這12個(gè)語(yǔ)法糖,別說你會(huì)Java

    這篇文章主要介紹了不了解這12個(gè)語(yǔ)法糖,別說你會(huì)Java,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 使用Idea簡(jiǎn)單快速搭建springcloud項(xiàng)目的圖文教程

    使用Idea簡(jiǎn)單快速搭建springcloud項(xiàng)目的圖文教程

    這篇文章主要介紹了使用Idea簡(jiǎn)單快速搭建springcloud項(xiàng)目,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • mybatis in foreach 雙層嵌套問題

    mybatis in foreach 雙層嵌套問題

    這篇文章主要介紹了mybatis in foreach 雙層嵌套問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • SpringMvc配置靜態(tài)資源訪問路徑的實(shí)現(xiàn)

    SpringMvc配置靜態(tài)資源訪問路徑的實(shí)現(xiàn)

    本文主要介紹了SpringMvc配置靜態(tài)資源訪問路徑的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java中StringBuffer和StringBuilder區(qū)別

    Java中StringBuffer和StringBuilder區(qū)別

    這篇文章主要介紹了Java中StringBuffer和StringBuilder區(qū)別,本文只介紹了它們之間的核心區(qū)別,需要的朋友可以參考下
    2015-06-06
  • 解讀為什么@Autowired在屬性上被警告,在setter方法上不被警告問題

    解讀為什么@Autowired在屬性上被警告,在setter方法上不被警告問題

    在Spring開發(fā)中,@Autowired注解常用于實(shí)現(xiàn)依賴注入,它可以應(yīng)用于類的屬性、構(gòu)造器或setter方法上,然而,當(dāng)@Autowired注解在屬性上使用時(shí),IntelliJIDEA等IDE會(huì)給出Fieldinjectionisnotrecommended的警告,而在setter方法上使用@Autowired時(shí)卻不會(huì)出現(xiàn)這個(gè)警告
    2025-02-02
  • Java8 如何正確高效的使用并行流

    Java8 如何正確高效的使用并行流

    這篇文章主要介紹了Java8 如何正確高效的使用并行流,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java多線程使用阻塞隊(duì)列實(shí)現(xiàn)生產(chǎn)者消費(fèi)者模型詳解

    Java多線程使用阻塞隊(duì)列實(shí)現(xiàn)生產(chǎn)者消費(fèi)者模型詳解

    這篇文章主要介紹了Java多線程使用阻塞隊(duì)列實(shí)現(xiàn)生產(chǎn)者消費(fèi)者模型詳解,主要講解阻塞隊(duì)列的特性、實(shí)際開發(fā)中常用的到的生產(chǎn)者消費(fèi)者模型,以及生產(chǎn)者消費(fèi)者模型解耦合、削峰填谷的好處,需要的朋友可以參考下
    2023-07-07
  • Spring、SpringMvc和SpringBoot的區(qū)別及說明

    Spring、SpringMvc和SpringBoot的區(qū)別及說明

    Spring框架提供了全面的Java開發(fā)解決方案,核心包括IOC和AOP,SpringMvc作為其中的WEB層開發(fā)框架,通過復(fù)雜的XML配置管理前端視圖和后臺(tái)邏輯,SpringBoot則簡(jiǎn)化了配置,專注于微服務(wù)接口開發(fā),支持嵌入式服務(wù)器,提高了開發(fā)效率
    2024-10-10

最新評(píng)論

瓦房店市| 巫溪县| 彩票| 敦化市| 汝州市| 沂源县| 南通市| 封开县| 汶上县| 三门县| 五寨县| 万山特区| 南川市| 隆安县| 镶黄旗| 镇康县| 云安县| 罗山县| 土默特左旗| 长乐市| 介休市| 枝江市| 刚察县| 定远县| 崇州市| 琼中| 全州县| 靖州| 团风县| 冕宁县| 上犹县| 永仁县| 沙湾县| 前郭尔| 瓦房店市| 金湖县| 上高县| 济南市| 宜黄县| 社旗县| 古丈县|