多平台统一管理软件接口,如何实现多平台统一管理软件接口
229
2023-05-20
Java微信二次开发(二) Java微信文本消息接口请求与发送
第二篇,做微信文本消息接口请求与发送,具体内容如下
需要导入库:dom4j-1.6.1.jar,xstream-1.3.1.jar
第一步:新建包com.wtz.message.response,新建类BaseMessage.java
package com.wtz.message.response;
/**
* @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;
}
}
第二步:找到包com.wtz.message.response,新建类TextMessage.java
package com.wtz.message.response;
/**
* @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.dom4http://j.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
*
*
description:消息处理工具类
*/
public class MessageUtil {
//定义了消息类型(常量:文本类型)
public static final String RESP_MESSAGE_TYPE_TEXT = "text";
//从流中解析出每个节点的内容
public static Map
Map
//从输入流中获取流对象
InputStream in = request.getInputStream();
//构建SAX阅读器对象
SAXReader reader = new SAXReader();
try {
//从流中获得文档对象
Document doc = reader.read(in);
//获得根节点
Element root = doc.getRootElement();
//获取根节点下的所有子节点
List
for(Element e:children){
//遍历每一个节点,并按照节点名--节点值放入map中
map.put(e.getName(), 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;
}
/**
* 用于扩展节点数据按照
*/
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);
}
}
};
}
});
/**
* 将文本消息转换成XML格式
*/
public static String messageToXml(TextMessage textMessage){
xstream.alias("xml",textMessage.getClass());
String xml = xstream.toXML(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 com.wtz.message.response.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
String fromUserName = requestMap.get("FromUserName");
String toUserName = requestMap.get("ToUserName");
String MsgType = requestMap.get("MsgType");
String Content = requestMap.get("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)){
}
textMessage.setContent(respContent);
respXml = MessageUtil.messageToXml(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 20OFzVEaOU17年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 = request.getParameter("signature");
//2.获得时间戳信息
String timestamp = request.getParameter("timestamp");
//3.获得随机数
String nonce = request.getParameter("nonce");
//4.获得随机字符串
String echostr = request.getParameter("echostr");
System.out.println("获得微信签名的加密字符串:"+signature);
System.out.println("获得时间戳信息:"+timestamp);
System.out.println("获得随机数:"+nonce);
System.out.println("获得随机字符串:"+echostr);
PrintWriter out = response.getWriter();
//验证请求确认成功原样返回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 = request.getParameter("signature");
//获取时间戳
String timestamp = request.getParameter("timestamp");
//获取随机数
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;
}
}
完成微信文本消息接口请求与发送。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~