问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

使用微信公众平台自动回复 API 时候,如何向服务器提交 xml 消息内容?

发布网友 发布时间:2022-04-29 12:32

我来回答

3个回答

热心网友 时间:2023-10-06 05:16

我的开发环境是eclipse+springMvc
"/chat" 是我最终项目的请求Controller URL路径

下面是homecontroller

[java] view plain copy
@Controller
@RequestMapping("/*")
public class HomeController {

private String Token = "123456789abcdef";

@RequestMapping(value = "chat", method = { RequestMethod.GET, RequestMethod.POST })
@ResponseBody
public void liaotian(Model model, HttpServletRequest request, HttpServletResponse response) {
System.out.println("进入chat");
boolean isGet = request.getMethod().toLowerCase().equals("get");
if (isGet) {
String signature = request.getParameter("signature");
String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
String echostr = request.getParameter("echostr");
System.out.println(signature);
System.out.println(timestamp);
System.out.println(nonce);
System.out.println(echostr);
access(request, response);
} else {
// 进入POST聊天处理
System.out.println("enter post");
try {
// 接收消息并返回消息
acceptMessage(request, response);
} catch (IOException e) {
e.printStackTrace();
}
}
}

/**
* 验证URL真实性
*
* @author morning
* @date 2015年2月17日 上午10:53:07
* @param request
* @param response
* @return String
*/
private String access(HttpServletRequest request, HttpServletResponse response) {
// 验证URL真实性
System.out.println("进入验证access");
String signature = request.getParameter("signature");// 微信加密签名
String timestamp = request.getParameter("timestamp");// 时间戳
String nonce = request.getParameter("nonce");// 随机数
String echostr = request.getParameter("echostr");// 随机字符串
List<String> params = new ArrayList<String>();
params.add(Token);
params.add(timestamp);
params.add(nonce);
// 1. 将token、timestamp、nonce三个参数进行字典序排序
Collections.sort(params, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
// 2. 将三个参数字符串拼接成一个字符串进行sha1加密
String temp = SHA1.encode(params.get(0) + params.get(1) + params.get(2));
if (temp.equals(signature)) {
try {
response.getWriter().write(echostr);
System.out.println("成功返回 echostr:" + echostr);
return echostr;
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("失败 认证");
return null;
}

private void acceptMessage(HttpServletRequest request, HttpServletResponse response) throws IOException {
// 处理接收消息
ServletInputStream in = request.getInputStream();
// 将POST流转换为XStream对象
XStream xs = SerializeXmlUtil.createXstream();
xs.processAnnotations(InputMessage.class);
xs.processAnnotations(OutputMessage.class);
// 将指定节点下的xml节点数据映射为对象
xs.alias("xml", InputMessage.class);
// 将流转换为字符串
StringBuilder xmlMsg = new StringBuilder();
byte[] b = new byte[4096];
for (int n; (n = in.read(b)) != -1;) {
xmlMsg.append(new String(b, 0, n, "UTF-8"));
}
// 将xml内容转换为InputMessage对象
InputMessage inputMsg = (InputMessage) xs.fromXML(xmlMsg.toString());

String servername = inputMsg.getToUserName();// 服务端
String custermname = inputMsg.getFromUserName();// 客户端
long createTime = inputMsg.getCreateTime();// 接收时间
Long returnTime = Calendar.getInstance().getTimeInMillis() / 1000;// 返回时间

// 取得消息类型
String msgType = inputMsg.getMsgType();
// 根据消息类型获取对应的消息内容
if (msgType.equals(MsgType.Text.toString())) {
// 文本消息
System.out.println("开发者*:" + inputMsg.getToUserName());
System.out.println("发送方帐号:" + inputMsg.getFromUserName());
System.out.println("消息创建时间:" + inputMsg.getCreateTime() + new Date(createTime * 1000l));
System.out.println("消息内容:" + inputMsg.getContent());
System.out.println("消息Id:" + inputMsg.getMsgId());

StringBuffer str = new StringBuffer();
str.append("<xml>");
str.append("<ToUserName><![CDATA[" + custermname + "]]></ToUserName>");
str.append("<FromUserName><![CDATA[" + servername + "]]></FromUserName>");
str.append("<CreateTime>" + returnTime + "</CreateTime>");
str.append("<MsgType><![CDATA[" + msgType + "]]></MsgType>");
str.append("<Content><![CDATA[你说的是:" + inputMsg.getContent() + ",吗?]]></Content>");
str.append("</xml>");
System.out.println(str.toString());
response.getWriter().write(str.toString());
}
// 获取并返回多图片消息
if (msgType.equals(MsgType.Image.toString())) {
System.out.println("获取多媒体信息");
System.out.println("多媒体文件id:" + inputMsg.getMediaId());
System.out.println("图片链接:" + inputMsg.getPicUrl());
System.out.println("消息id,64位整型:" + inputMsg.getMsgId());

OutputMessage outputMsg = new OutputMessage();
outputMsg.setFromUserName(servername);
outputMsg.setToUserName(custermname);
outputMsg.setCreateTime(returnTime);
outputMsg.setMsgType(msgType);
ImageMessage images = new ImageMessage();
images.setMediaId(inputMsg.getMediaId());
outputMsg.setImage(images);
System.out.println("xml转换:/n" + xs.toXML(outputMsg));
response.getWriter().write(xs.toXML(outputMsg));

}
}

}

热心网友 时间:2023-10-06 05:17

直接echo xml就可以了。

热心网友 时间:2023-10-06 05:17

msgType.equals(MsgType.Text.toString())

你的这里边的Text怎么获取的
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怎么网页突然自动关闭 网页为什么会突然自动关闭 网页自动关闭什么原因 怎么在微信里面自己组建群聊 门开在东南角,北面中间有窗,办公桌如何摆放 请推荐一款app导航系统,地图信息准确,界面友好,主要用于在境外... 急求一款app导航系统,地图信息准确,界面别太多杂乱的东西,主要用在境外... 欠了闪银3600,逾期125天,今天算了下,差不多要还6000,不还会怎么样?_百 ... 怎么进出口货物老被查验,难道被盯上了?海关是如何查验的,海关查验... 来料加工海关会查什么 外贸知识:海关查验详解 被藤蔓紧紧缠住是一种什么感觉?请详细回答,谢谢 重庆的几所本科学排名 触屏笔记本用什么绘画软件比较好,工具栏比较方便简单直观的,可以直接用电容笔直接在屏幕上画画的那种。 被藤蔓紧紧缠住是一种怎样的感觉? 微信消息回复怎么设置xml格式 有能够利用笔记本触摸板绘画的软件吗? 想知道重庆本科院校的正确排名,谢谢 天舞纪李玄找龙牙草被藤蔓缠住是第一集的多少秒? 有什么能让笔记本触摸板实现绘画的软件 重庆有哪些大学大学的排名 海贼王罗宾第几集被藤蔓缠住然后被海军抓? 梦到被藤蔓妖怪缠绕 重庆医科大学排名 《光遇》被黑暗藤蔓缠住的遥鲲在哪? 重庆有哪些大学?重庆的大学排名? 在野外被藤蔓缠住了脚没有刀怎么弄断? 店铺店面装修设计什么最重要 店面的门头怎样设计好 求一款触屏的绘画软件 应该是win10的 如图 在热带雨林被藤蔓缠住怎么办? 冷冻鸡肉解冻后在水里泡了2天会不会坏掉,在多少温度不会坏掉,在多少温度会坏掉。怎么区别有没有坏掉, 电脑绘画软件,要可以自己在上面画的,就是触屏这样画出来的。需要什么电脑还有软件??? 微信公众平台怎么根据不同的xml去生成不同的请求对象 有没有触屏版的三维制图软件 什么树会被藤缠住 TNT里被藤蔓缠住就不能攻击是吗。我在风神副本中被缠住后怎么打都打到自己 微信,微信的api为什么部分使用了xml部分则用的json 犬夜叉被藤蔓缠住,流血泪的是哪集 微信接口,请问这个xml参数如何接收 《光遇》被黑暗藤蔓困住的遥鲲在哪? 家里藤蔓缠绕好不好? 微信第三方平台xml消息怎么换行符 java 暮土被黑暗藤蔓困住的遥鲲在哪里 java解析微信返回的xml数据流报错 王者荣耀送别人皮肤别人有了怎么办 醒图怎么放大其中一个部分- 问一问 微信公众平台php文件如何放xml文件 赠送的皮肤对方已经有了怎么办 微信支付成功后,asp如何接收回调xml信息 resxml += 微信怎么发送多条 微信公众平台的后台开发中,如何自动发送多条“发送被动响应消息”给用...