微信开发之消息接收--图片消息(六)
前言:
由于在上篇文章中Servelt的Post方法中处理太多的逻辑,会让代码很难看,所以我们在这里进行补充,修改Servlet中的Post方法。
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
String xmlString=WeixinService.doService(request);
PrintWriter out=response.getWriter();
out.print(xmlString);
out.close();
}
创建WeixinService.java 代码如下:
package com.weixin.Service;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import com.weixin.message.TextMessage;
import com.weixin.util.MessageUtil;
/**
* 消息处理类
*
* @author Code猿猿
*
*/
public class WeixinService {
public static String doService(HttpServletRequest request) {
Map<String, String> message = MessageUtil.parseXml(request);
String messageType = message.get("MsgType");
// 要返回的xml信息
String xml = "";
//文本消息
if (messageType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {
// 接收的是文本消息
// 打印接收所有参数
System.out.println("ToUserName:" + message.get("ToUserName"));
System.out.println("FromUserName:" + message.get("FromUserName"));
System.out.println("CreateTime:" + message.get("CreateTime"));
System.out.println("MsgType:" + message.get("MsgType"));
System.out.println("Content:" + message.get("Content"));
System.out.println("MsgId:" + message.get("MsgId"));
String req_content = message.get("Content");
String res_content = "";
// 组装回复消息
// 我们做个小实验
// 接收内容:你好 回复:你好
// 接收内容:大家好 回复:大家好
// 接收内容:同志们好 回复:为人民服务
if ("你好".equals(req_content)) {
res_content = "你好";
} else if ("大家好".equals(req_content)) {
res_content = "大家好";
} else if ("同志们好".equals(req_content)) {
res_content = "为人民服务";
} else {
// 否则原样输出输入内容
res_content = req_content;
}
TextMessage textMessage = new TextMessage();
textMessage.setToUserName(message.get("FromUserName"));
textMessage.setFromUserName(message.get("ToUserName"));
textMessage.setCreateTime(new Date().getTime());
textMessage.setContent(res_content);
textMessage.setMsgType(messageType);
xml = MessageUtil.textMessageToXml(textMessage);
}
return xml;
}
}
一、消息格式
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[image]]></MsgType> <PicUrl><![CDATA[this is a url]]></PicUrl> <MediaId><![CDATA[media_id]]></MediaId> <MsgId>1234567890123456</MsgId> </xml>
| 参数 | 描述 |
|---|---|
| ToUserName | 开发者微信号 |
| FromUserName | 发送方帐号(一个OpenID) |
| CreateTime | 消息创建时间 (整型) |
| MsgType | image |
| PicUrl | 图片链接(由系统生成) |
| MediaId | 图片消息媒体id,可以调用多媒体文件下载接口拉取数据。 |
| MsgId | 消息id,64位整型 |
二、添加图片消息的实体类 PicMessage.java 代码如下:
package com.weixin.message;
public class PicMessage extends BaseMessage {
public String PicUrl ;
public long MediaId ;
public long MsgId;
public String getPicUrl() {
return PicUrl;
}
public void setPicUrl(String picUrl) {
PicUrl = picUrl;
}
public long getMediaId() {
return MediaId;
}
public void setMediaId(long mediaId) {
MediaId = mediaId;
}
public long getMsgId() {
return MsgId;
}
public void setMsgId(long msgId) {
MsgId = msgId;
}
}
三、接收图片消息,返回"图片消息" 在WeixinService.java中添加 image消息的判断 ,代码如下:
//图片消息
if (messageType.equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)) {
// 打印接收所有参数
System.out.println("ToUserName:" + message.get("ToUserName"));
System.out.println("FromUserName:" + message.get("FromUserName"));
System.out.println("CreateTime:" + message.get("CreateTime"));
System.out.println("MsgType:" + message.get("MsgType"));
System.out.println("PicUrl:" + message.get("PicUrl"));
System.out.println("MediaId:" + message.get("MediaId"));
System.out.println("MsgId:" + message.get("MsgId"));
TextMessage textMessage = new TextMessage();
textMessage.setToUserName(message.get("FromUserName"));
textMessage.setFromUserName(message.get("ToUserName"));
textMessage.setCreateTime(new Date().getTime());
textMessage.setContent("这是图片消息");
textMessage.setMsgType("text"); //文本消息
xml = MessageUtil.textMessageToXml(textMessage);
System.out.println("xml:"+xml);
}
公众号接收到的参数和提交的xml如下:
ToUserName:gh_525b860fccf8 FromUserName:oXWYmsyz4fv17mCihzDFzk_ecLFU CreateTime:1462702256 MsgType:image PicUrl:http://mmbiz.qpic.cn/mmbiz/ShBfPMFvXqibLR34lgoWRojdyTtzMR5LbdL8FuntiaEiawZFSdjJHuibm5RlLpS3nBOq9IblZr8ia19h2UgnlIrn1SQ/0 MediaId:tgC85iSOqZN8kG7hxnHzxRPvWlkIHk8fTTfge-CqrwtuyNKEBJ_uKWaE4f4IrqRo MsgId:6282258353751424316 回复xml信息: <xml> <ToUserName><![CDATA[oXWYmsyz4fv17mCihzDFzk_ecLFU]]></ToUserName> <FromUserName><![CDATA[gh_525b860fccf8]]></FromUserName> <CreateTime>1462702260068</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[这是图片消息]]></Content> <MsgId>0</MsgId> </xml>
测试结果如下图:


所有博文内容,全部是自己一步一步操作出来的,请尊重版权,若转载请说明出处,谢谢。
不为失败找借口,只为成功找方法。欢迎各位和我一起遨游code世界!!!

浙公网安备 33010602011771号