- 1 <dependency>
- 2 <groupId>dom4j</groupId>
- 3 <artifactId>dom4j</artifactId>
- 4 <version>1.6</version>
- 5 </dependency>
- 6 <dependency>
- 7 <groupId>commons-io</groupId>
- 8 <artifactId>commons-io</artifactId>
- 9 <version>2.5</version>
- 10 </dependency>
- 11 <dependency>
- 12 <groupId>com.thoughtworks.xstream</groupId>
- 13 <artifactId>xstream</artifactId>
- 14 <version>1.4.9</version>
- 15 </dependency>
- 16 <dependency>
- 17 <groupId>javax.servlet</groupId>
- 18 <artifactId>javax.servlet-api</artifactId>
- 19 <version>3.1.0</version>
- 20 </dependency>
- <xml>
- <ToUserName><![CDATA[toUser]]></ToUserName>
- <FromUserName><![CDATA[fromUser]]></FromUserName>
- <CreateTime>1348831860</CreateTime>
- <MsgType><![CDATA[text]]></MsgType>
- <Content><![CDATA[this is a test]]></Content>
- <MsgId>1234567890123456</MsgId>
- </xml>
- <!--参数 描述
- ToUserName 开发者微信号
- FromUserName 发送方帐号(一个OpenID)
- CreateTime 消息创建时间 (整型)
- MsgType text
- Content 文本消息内容
- MsgId 消息id,64位整型
- -->
- <xml>
- <ToUserName><![CDATA[toUser]]></ToUserName>
- <FromUserName><![CDATA[fromUser]]></FromUserName>
- <CreateTime>12345678</CreateTime>
- <MsgType><![CDATA[text]]></MsgType>
- <Content><![CDATA[你好]]></Content>
- </xml>
- <!--参数 是否必须 描述
- ToUserName 是 接收方帐号(收到的OpenID)
- FromUserName 是 开发者微信号
- CreateTime 是 消息创建时间 (整型)
- MsgType 是 text
- Content 是 回复的消息内容(换行:在content中能够换行,微信客户端就支持换行显示)
- -->
- import com.replymessage.*;
- import com.requestmessage.RequestTextMessage;
- import com.thoughtworks.xstream.XStream;
- import com.thoughtworks.xstream.io.xml.DomDriver;
- import com.util.Articles;
- import com.util.Item;
- import com.util.Music;
- import org.apache.commons.io.IOUtils;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- /**
- * 微信回复消息
- */
- public class WbChat extends HttpServlet {
- private static final long serialVersionUID = 1L;
- public WbChat() {
- super();
- }
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
- //这里没有对发送信息者进行验证,直接返回了,要加验证的话自己去百度吧
- response.setContentType("text/html;charset=UTF-8");
- PrintWriter writer = response.getWriter();
- String echostr = request.getParameter("echostr");
- echostr = new String(echostr.getBytes("ISO-8859-1"),"UTF-8");
- writer.println(echostr);
- //当你提交成为开发者的URL和Token时,微信服务器将发送GET请求到填写的URL上,
- //只有你返回参数echostr时,他才会认为你这个接口是通的,才会提交成功
- }
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
- //当你用微信给平台发送信息时就会到这里
- //回复音乐和图文消息,都写死了,自己可以根据自己的需要加相应的处理
- response.setContentType("text/html;charset=UTF-8");
- PrintWriter pw = response.getWriter();
- String wxMsgXml = IOUtils.toString(request.getInputStream(),"utf-8");
- RequestTextMessage textMsg = null;
- try {
- textMsg = getRequestTextMessage(wxMsgXml);
- } catch (Exception e) {
- e.printStackTrace();
- }
- StringBuffer replyMsg = new StringBuffer();
- String receive = textMsg.getContent().trim();
- String returnXml = null;
- if (textMsg != null&&!receive.equals("")) {
- if (receive.equals("?")||receive.equals("?")) {
- replyMsg.append("欢迎使用微信平台!");
- replyMsg.append("\r\n1、当前时间");
- replyMsg.append("\r\n2、听音乐");
- replyMsg.append("\r\n3、看图文");
- replyMsg.append("\r\n其他、请直接输入文字信息等待管理员回复");
- returnXml = getReplyTextMessage(replyMsg.toString(), textMsg.getFromUserName(),textMsg.getToUserName());
- } else if (receive.equals("2")) {
- //回复音乐信息
- returnXml = getReplyMusicMessage(textMsg.getFromUserName(),textMsg.getToUserName());
- } else if (receive.equals("3")) {
- //回复图文
- returnXml = getReplyTuwenMessage(textMsg.getFromUserName(),textMsg.getToUserName());
- } else if (receive.equals("1")) {
- //回复时间
- SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- replyMsg.append("当前时间\r\n"+df.format(new Date()));
- returnXml = getReplyTextMessage(replyMsg.toString(), textMsg.getFromUserName(),textMsg.getToUserName());
- } else {
- replyMsg.append("收到: " + textMsg.getContent());
- returnXml = getReplyTextMessage(replyMsg.toString(), textMsg.getFromUserName(),textMsg.getToUserName());
- }
- } else {
- replyMsg.append("别闹了,这谁看得懂啊!");
- returnXml = getReplyTextMessage(replyMsg.toString(), textMsg.getFromUserName(),textMsg.getToUserName());
- }
- pw.println(returnXml);
- }
- //获取推送文本消息
- private RequestTextMessage getRequestTextMessage(String xml){
- XStream xstream = new XStream(new DomDriver());
- xstream.alias("xml", RequestTextMessage.class);
- xstream.aliasField("ToUserName", RequestTextMessage.class, "toUserName");
- xstream.aliasField("FromUserName", RequestTextMessage.class, "fromUserName");
- xstream.aliasField("CreateTime", RequestTextMessage.class, "createTime");
- xstream.aliasField("MsgType", RequestTextMessage.class, "messageType");
- xstream.aliasField("Content", RequestTextMessage.class, "content");
- xstream.aliasField("MsgId", RequestTextMessage.class, "msgId");
- RequestTextMessage requestTextMessage = (RequestTextMessage)xstream.fromXML(xml);
- return requestTextMessage;
- }
- //回复文本消息
- private String getReplyTextMessage(String content, String fromUserName,String toUserName){
- ReplyTextMessage we = new ReplyTextMessage();
- we.setMessageType("text");
- we.setFuncFlag("0");
- we.setCreateTime(new Long(new Date().getTime()).toString());
- we.setContent(content);
- we.setToUserName(fromUserName);
- we.setFromUserName(toUserName);
- XStream xstream = new XStream(new DomDriver());
- xstream.alias("xml", ReplyTextMessage.class);
- xstream.aliasField("ToUserName", ReplyTextMessage.class, "toUserName");
- xstream.aliasField("FromUserName", ReplyTextMessage.class, "fromUserName");
- xstream.aliasField("CreateTime", ReplyTextMessage.class, "createTime");
- xstream.aliasField("MsgType", ReplyTextMessage.class, "messageType");
- xstream.aliasField("Content", ReplyTextMessage.class, "content");
- xstream.aliasField("FuncFlag", ReplyTextMessage.class, "funcFlag");
- String xml =xstream.toXML(we);
- return xml;
- }
- //回复音乐消息
- private String getReplyMusicMessage(String fromUserName,String toUserName){
- ReplyMusicMessage we = new ReplyMusicMessage();
- Music music = new Music();
- we.setMessageType("music");
- we.setCreateTime(new Long(new Date().getTime()).toString());
- we.setToUserName(fromUserName);
- we.setFromUserName(toUserName);
- we.setFuncFlag("0");
- music.setTitle("home");
- music.setDescription(" family 想家了吗");
- String url = "http://bcs.duapp.com/yishi-music/%E5%9B%9E%E5%AE%B6.mp3?sign=MBO:97068c69ccb2ab230a497c59d528dcce:LdYZ%2FLXohKa6YCy9gbxL%2B1mZ4Co%3D";
- String url2 = "http://bcs.duapp.com/yishi-music/X-man.mp3?sign=MBO:97068c69ccb2ab230a497c59d528dcce:cYV%2B%2Fq2Tlv2de6gqecZynCyIm3k%3D";
- music.setMusicUrl(url);
- music.setHqMusicUrl(url2);
- we.setMusic(music);
- XStream xstream = new XStream(new DomDriver());
- xstream.alias("xml", ReplyMusicMessage.class);
- xstream.aliasField("ToUserName", ReplyMusicMessage.class, "toUserName");
- xstream.aliasField("FromUserName", ReplyMusicMessage.class, "fromUserName");
- xstream.aliasField("CreateTime", ReplyMusicMessage.class, "createTime");
- xstream.aliasField("MsgType", ReplyMusicMessage.class, "messageType");
- xstream.aliasField("FuncFlag", ReplyMusicMessage.class, "funcFlag");
- xstream.aliasField("Music", ReplyMusicMessage.class, "Music");
- xstream.aliasField("Title", Music.class, "title");
- xstream.aliasField("Description", Music.class, "description");
- xstream.aliasField("MusicUrl", Music.class, "musicUrl");
- xstream.aliasField("HQMusicUrl", Music.class, "hqMusicUrl");
- String xml =xstream.toXML(we);
- return xml;
- }
- //回复图文消息
- private String getReplyTuwenMessage(String fromUserName,String toUserName){
- ReplyTuwenMessage we = new ReplyTuwenMessage();
- Articles articles = new Articles();
- Item item = new Item();
- we.setMessageType("news");
- we.setCreateTime(new Long(new Date().getTime()).toString());
- we.setToUserName(fromUserName);
- we.setFromUserName(toUserName);
- we.setFuncFlag("0");
- we.setArticleCount(1);
- item.setTitle("二哈");
- item.setDescription("二哈(SHUNSUKE)是Twitter上现在最流行的偶像犬,是一条傻狗,因为在网上装疯扮傻而走红网络。");
- item.setPicUrl("http://bcs.duapp.com/yishi-music/111.jpg?sign=MBO:97068c69ccb2ab230a497c59d528dcce:hmzcBYxgI4yUaTd9GvahO1GvE%2BA%3D");
- item.setUrl("http://baike.baidu.com/view/6300265.htm");
- articles.setItem(item);
- we.setArticles(articles);
- XStream xstream = new XStream(new DomDriver());
- xstream.alias("xml", ReplyTuwenMessage.class);
- xstream.aliasField("ToUserName", ReplyTuwenMessage.class, "toUserName");
- xstream.aliasField("FromUserName", ReplyTuwenMessage.class, "fromUserName");
- xstream.aliasField("CreateTime", ReplyTuwenMessage.class, "createTime");
- xstream.aliasField("MsgType", ReplyTuwenMessage.class, "messageType");
- xstream.aliasField("Articles", ReplyTuwenMessage.class, "Articles");
- xstream.aliasField("ArticleCount", ReplyTuwenMessage.class, "articleCount");
- xstream.aliasField("FuncFlag", ReplyTuwenMessage.class, "funcFlag");
- xstream.aliasField("item", Articles.class, "item");
- xstream.aliasField("Title", Item.class, "title");
- xstream.aliasField("Description", Item.class, "description");
- xstream.aliasField("PicUrl", Item.class, "picUrl");
- xstream.aliasField("Url", Item.class, "url");
- String xml =xstream.toXML(we);
- return xml;
- }
- }
- import com.util.Music;
- /**
- * 音乐消息实体类
- */
- public class ReplyMusicMessage {
- private String toUserName;
- private String fromUserName;
- private String createTime;
- private String messageType;
- private com.util.Music Music;
- private String funcFlag;
- //这里的funcFlag,微信平台接口文档里没有,但是必须写上,不然会收不到返回的信息
-
- public String getToUserName() {
- return toUserName;
- }
- public void setToUserName(String toUserName) {
- this.toUserName = toUserName;
- }
- public String getFromUserName() {
- return fromUserName;
- }
- public void setFromUserName(String fromUserName) {
- this.fromUserName = fromUserName;
- }
- public String getCreateTime() {
- return createTime;
- }
- public void setCreateTime(String createTime) {
- this.createTime = createTime;
- }
- public String getMessageType() {
- return messageType;
- }
- public void setMessageType(String messageType) {
- this.messageType = messageType;
- }
- public Music getMusic() {
- return Music;
- }
- public void setMusic(Music music) {
- Music = music;
- }
- public String getFuncFlag() {
- return funcFlag;
- }
- public void setFuncFlag(String funcFlag) {
- this.funcFlag = funcFlag;
- }
- }
- /**
- * 文本消息实体类
- */
- public class ReplyTextMessage {
- private String toUserName;
- private String fromUserName;
- private String createTime;
- private String messageType;
- private String content;
- private String funcFlag;
- public String getToUserName() {
- return toUserName;
- }
- public void setToUserName(String toUserName) {
- this.toUserName = toUserName;
- }
- public String getFromUserName() {
- return fromUserName;
- }
- public void setFromUserName(String fromUserName) {
- this.fromUserName = fromUserName;
- }
- public String getCreateTime() {
- return createTime;
- }
- public void setCreateTime(String createTime) {
- this.createTime = createTime;
- }
- public String getMessageType() {
- return messageType;
- }
- public void setMessageType(String messageType) {
- this.messageType = messageType;
- }
- public String getContent() {
- return content;
- }
- public void setContent(String content) {
- this.content = content;
- }
- public String getFuncFlag() {
- return funcFlag;
- }
- public void setFuncFlag(String funcFlag) {
- this.funcFlag = funcFlag;
- }
- }
- import com.util.Articles;
- /**
- * 图文消息实体类
- */
- public class ReplyTuwenMessage {
- private String toUserName;
- private String fromUserName;
- private String createTime;
- private String messageType;
- private int articleCount;
- private Articles articles;
- private String funcFlag;
- public String getToUserName() {
- return toUserName;
- }
- public void setToUserName(String toUserName) {
- this.toUserName = toUserName;
- }
- public String getFromUserName() {
- return fromUserName;
- }
- public void setFromUserName(String fromUserName) {
- this.fromUserName = fromUserName;
- }
- public String getCreateTime() {
- return createTime;
- }
- public void setCreateTime(String createTime) {
- this.createTime = createTime;
- }
- public String getMessageType() {
- return messageType;
- }
- public void setMessageType(String messageType) {
- this.messageType = messageType;
- }
- public int getArticleCount() {
- return articleCount;
- }
- public void setArticleCount(int articleCount) {
- this.articleCount = articleCount;
- }
- public Articles getArticles() {
- return articles;
- }
- public void setArticles(Articles articles) {
- this.articles = articles;
- }
- public String getFuncFlag() {
- return funcFlag;
- }
- public void setFuncFlag(String funcFlag) {
- this.funcFlag = funcFlag;
- }
- }
- /**
- * 请求消息实体类
- */
- public class RequestTextMessage {
- private String toUserName;
- private String fromUserName;
- private String createTime;
- private String messageType;
- private String content;
- private String msgId;
- //getters,setters
-
- public String getToUserName() {
- return toUserName;
- }
- public void setToUserName(String toUserName) {
- this.toUserName = toUserName;
- }
- public String getFromUserName() {
- return fromUserName;
- }
- public void setFromUserName(String fromUserName) {
- this.fromUserName = fromUserName;
- }
- public String getCreateTime() {
- return createTime;
- }
- public void setCreateTime(String createTime) {
- this.createTime = createTime;
- }
- public String getMessageType() {
- return messageType;
- }
- public void setMessageType(String messageType) {
- this.messageType = messageType;
- }
- public String getContent() {
- return content;
- }
- public void setContent(String content) {
- this.content = content;
- }
- public String getMsgId() {
- return msgId;
- }
- public void setMsgId(String msgId) {
- this.msgId = msgId;
- }
- }
- /**
- * 音乐消息实体类
- */
- public class Music {
- private String title;
- private String description;
- private String musicUrl;
- private String hqMusicUrl;
- //getters,setters
-
- public String getTitle() {
- return title;
- }
- public void setTitle(String title) {
- this.title = title;
- }
- public String getDescription() {
- return description;
- }
- public void setDescription(String description) {
- this.description = description;
- }
- public String getMusicUrl() {
- return musicUrl;
- }
- public void setMusicUrl(String musicUrl) {
- this.musicUrl = musicUrl;
- }
- public String getHqMusicUrl() {
- return hqMusicUrl;
- }
- public void setHqMusicUrl(String hqMusicUrl) {
- this.hqMusicUrl = hqMusicUrl;
- }
- }
- /**
- * xml嵌套标签实体类
- */
- public class Articles {
- private Item item;
- public Item getItem() {
- return item;
- }
- public void setItem(Item item) {
- this.item = item;
- }
-
- }
- /**
- * xml嵌套标签实体类
- */
- public class Item {
- private String title;
- private String description;
- private String picUrl;
- private String url;
- public String getTitle() {
- return title;
- }
- public void setTitle(String title) {
- this.title = title;
- }
- public String getDescription() {
- return description;
- }
- public void setDescription(String description) {
- this.description = description;
- }
- public String getPicUrl() {
- return picUrl;
- }
- public void setPicUrl(String picUrl) {
- this.picUrl = picUrl;
- }
- public String getUrl() {
- return url;
- }
- public void setUrl(String url) {
- this.url = url;
- }
- }
后续还会有 在公众号基础上进行小活动开发 后续更新...