这个是在我之前一篇博客基础之上的内容,如果需要请跳转:
http://blog.csdn.net/zxxz5201314/article/details/76585881
微信api地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140453
当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。
这是微信api上写的,就是我们直接写的后台与用户之间数据交互是xml格式的文本。
首先看一下,最简单的文本消息,格式如下:
<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位整型
代码:
post请求:
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
PrintWriter writer = resp.getWriter();
try {
Map<String, String> map = MessageUtil.xmlToMap(req);
String toUserName = map.get("ToUserName");
String fromUserName = map.get("FromUserName");
String msgType = map.get("MsgType");
String content = map.get("Content");
System.out.println(toUserName + fromUserName + msgType + content);
String text = null;
if ("text".equals(msgType)) {
switch (content) {
case "1":
text = MessageUtil.replyByKeyWord(toUserName, fromUserName, MessageUtil.Message_Text, "信曾哥,得永生!");
break;
case "2":
text = MessageUtil.replyByKeyWord(toUserName, fromUserName, MessageUtil.Message_Text,"辉哥在休息,有事找曾哥!");
break;
default:
text = MessageUtil.replyByKeyWord(toUserName, fromUserName, MessageUtil.Message_Text,MessageUtil.mainMenu());
break;
}
} else if (MessageUtil.Message_Event.equals(msgType)) {
if ("subscribe".equals(map.get("Event"))) {
text = MessageUtil.replyByKeyWord(toUserName, fromUserName, MessageUtil.Message_Text,MessageUtil.mainMenu());
}
}
System.out.println(text);
writer.print(text);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
writer.close();
}
}
MessageUtil类(xml解析和封装类):
public static String Message_Text = "text";
public static String Message_News = "news";
public static String Message_Image = "image";
public static String Message_Voice = "voice";
public static String Message_Video = "video";
public static String Message_ShortVideo = "shortvideo";
public static String Message_Location = "location";
public static String Message_Link = "link";
public static String Message_Event= "event";
public static String Message_Event_Sub= "subscribe";
/**
* xml转map集合
* @param request
* @return
* @throws IOException
* @throws DocumentException
*/
public static Map<String, String> xmlToMap(HttpServletRequest request) throws IOException, DocumentException{
Map<String, String> map = new HashMap<String,String>();
SAXReader reader = new SAXReader();
InputStream is = request.getInputStream();
Document document = reader.read(is);
Element root = document.getRootElement();
List<Element> list = root.elements();
for (Element e:list) {
map.put(e.getName(), e.getText());
}
is.close();
return map;
}
/**
* 将文本消息转换成xml
* @param textMessage
* @return
*/
public static String textMessageToXml(TextMessage textMessage){
XStream xStream = new XStream();
xStream.alias("xml", textMessage.getClass());
return xStream.toXML(textMessage);
}
/**
* 文本回复
* @param toUserName
* @param fromUserName
* @param msgType
* @param content
* @return
*/
public static String replyByKeyWord(String toUserName,String fromUserName,String msgType,String content){
TextMessage message = new TextMessage();
message.setFromUserName(toUserName);
message.setToUserName(fromUserName);
message.setMsgType(msgType);
message.setCreateTime(new Date().getTime());
message.setContent(content);
return MessageUtil.textMessageToXml(message);
}
/**
* 主菜单
* @return
*/
public static String mainMenu(){
StringBuffer sb = new StringBuffer();
sb.append("欢迎来到zx小调\n\n");
sb.append("回复1曾哥为你服务!\n");
sb.append("回复2辉哥为你服务!\n");
return sb.toString();
}
}
这里需要一个jar包, xstream-1.3.1.jar,我不知道怎么把资源弄成0积分下载,这是我上传的资源,如果需要就去下载吧,好像要一个积分,网上搜搜就有:
http://download.csdn.net/detail/zxxz5201314/9925080