java发送微信消息接口,Java微信二次开发(二) Java微信文本消息接口请求与发送...

阅读: 评论:0

java发送微信消息接口,Java微信二次开发(二) Java微信文本消息接口请求与发送...

java发送微信消息接口,Java微信二次开发(二) Java微信文本消息接口请求与发送...

第二篇,做微信文本消息接口请求与发送,具体内容如下

需要导入库:dom4j-1.6.1.jar,xstream-1.3.1.jar

第一步:新建包sponse,新建类BaseMessage.java

package sponse;

/**

* @author wangtianze QQ:864620012

* @date 2017年4月19日 下午3:12:40

*

version:1.0

*

description:基础消息类

*/

public class BaseMessage {

//接收方

private String ToUserName;

//发送方

private String FromUserName;

//消息的创建时间

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;

}

}

第二步:找到包sponse,新建类TextMessage.java

package sponse;

/**

* @author wangtianze QQ:864620012

* @date 2017年4月19日 下午3:22:33

*

version:1.0

*

description:文本消息类

*/

public class TextMessage extends BaseMessage{

//消息内容

private String Content;

public String getContent() {

return Content;

}

public void setContent(String content) {

Content = content;

}

}

第三步:找到包com.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.util.QuickWriter;

import com.thoughtworks.xstream.io.HierarchicalStreamWriter;

import com.thoughtworks.l.PrettyPrintWriter;

import com.thoughtworks.l.XppDriver;

import sponse.TextMessage;

/**

* @author wangtianze QQ:864620012

* @date 2017年4月19日 下午3:29:58

*

version:1.0

*

description:消息处理工具类

*/

public class MessageUtil {

//定义了消息类型(常量:文本类型)

public static final String RESP_MESSAGE_TYPE_TEXT = "text";

//从流中解析出每个节点的内容

public static Map parseXml(HttpServletRequest request) throws IOException{

Map map = new HashMap();

//从输入流中获取流对象

InputStream in = InputStream();

//构建SAX阅读器对象

SAXReader reader = new SAXReader();

try {

//从流中获得文档对象

Document doc = ad(in);

//获得根节点

Element root = RootElement();

//获取根节点下的所有子节点

List children = root.elements();

for(Element e:children){

//遍历每一个节点,并按照节点名--节点值放入map中

map.Name(), e.getText());

System.out.println("用户发送的消息XML解析为:" + e.getName() + e.getText());

}

//关闭流

in.close();

in = null;

} catch (DocumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return map;

}

/**

* 用于扩展节点数据按照,中间加了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("

writer.write(text);

writer.write("]]>");

}else{

writer.write(text);

}

}

};

}

});

/**

* 将文本消息转换成XML格式

*/

public static String messageToXml(TextMessage textMessage){

xstream.alias("xml",Class());

String xml = XML(textMessage);

System.out.println("响应所转换的XML:"+xml);

return xml;

}

}

第四步:找到包com.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 sponse.TextMessage;

/**

* @author wangtianze QQ:864620012

* @date 2017年4月19日 下午8:04:14

*

version:1.0

*

description:核心服务类

*/

public class ProcessService {

public static String dealRequest(HttpServletRequest request) throws IOException{

//响应的XML串

String respXml = "";

//要响应的文本内容

String respContent = "未知的消息类型";

Map requestMap = MessageUtil.parseXml(request);

String fromUserName = ("FromUserName");

String toUserName = ("ToUserName");

String MsgType = ("MsgType");

String Content = ("Content");

System.out.println("用户给公众号发的消息为:" + Content);

//构建一条文本消息

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 = "王天泽的公众号收到了您的一条文本消息:" + Content + ",时间戳是:" + (new Date().getTime());

}

textMessage.setContent(respContent);

respXml = ssageToXml(textMessage);

System.out.println("respXml:"+respXml);

return respXml;

}

}

第五步:找到包com.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

*

version:1.0

*

description:微信请求验证类

*/

public class LoginServlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

System.out.println("get请求。。。。。。");

//1.获得微信签名的加密字符串

String signature = Parameter("signature");

//2.获得时间戳信息

String timestamp = Parameter("timestamp");

//3.获得随机数

String nonce = Parameter("nonce");

//4.获得随机字符串

String echostr = Parameter("echostr");

System.out.println("获得微信签名的加密字符串:"+signature);

System.out.println("获得时间戳信息:"+timestamp);

System.out.println("获得随机数:"+nonce);

System.out.println("获得随机字符串:"+echostr);

PrintWriter out = Writer();

//验证请求确认成功原样返回echostr参数内容,则接入生效,成为开发者成功,否则失败

if(ValidationUtil.checkSignature(signature, timestamp, nonce)){

out.print(echostr);

}

out.close();

out = null;

}

/**

* 接受微信服务器发过来的XML数据包(通过post请求发送过来的)

*/

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

request.setCharacterEncoding("utf-8");

response.setCharacterEncoding("utf-8");

//获取微信加密的签名字符串

String signature = Parameter("signature");

//获取时间戳

String timestamp = Parameter("timestamp");

//获取随机数

String nonce = Parameter("nonce");

PrintWriter out = Writer();

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;

}

}

完成微信文本消息接口请求与发送。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持聚米学院。

本文发布于:2024-02-01 10:22:39,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170675415935951.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:接口   消息   文本   java   Java
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23