import java.io.IOException;
import java.io.PrintWriter;
import java.util.
Date
;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.eiyoung.wechat.web.utils.Message;
import com.eiyoung.wechat.web.utils.ReplyMessage;
import org.apache.commons.io.IOUtils;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
public
class
WeChat
extends
HttpServlet {
private
static
final
long serialVersionUID = 1L;
public
WeChat() {
super();
}
protected
void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter pw = response.getWriter();
String
echo
= request.getParameter("echostr");
System.out.
print
(
echo
);
echo
=
new
String(
echo
.getBytes("ISO-8859-1"),"UTF-8");
pw.println(
echo
);
}
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");
Message textMsg = null;
try
{
textMsg = getMessage(wxMsgXml);
}
catch
(Exception e) {
e.printStackTrace();
}
StringBuffer replyMsg =
new
StringBuffer();
if
(textMsg != null){
replyMsg.append("您给我的消息是:");
replyMsg.append(textMsg.getContent());
}
else
{
replyMsg.append(":)不是文本的消息,我暂时看不懂");
}
String returnXml = getReplyMessage(replyMsg.toString(), textMsg.getFromUserName(),textMsg.getToUserName());
System.out.
print
(textMsg.toString());
System.out.
print
(returnXml.toString());
pw.println(returnXml);
}
private
Message getMessage(String xml){
XStream xstream =
new
XStream(
new
DomDriver());
xstream.alias("xml", Message.
class
);
xstream.aliasField("ToUserName", Message.
class
, "toUserName");
xstream.aliasField("FromUserName", Message.
class
, "fromUserName");
xstream.aliasField("CreateTime", Message.
class
, "createTime");
xstream.aliasField("MsgType", Message.
class
, "messageType");
xstream.aliasField("Content", Message.
class
, "content");
xstream.aliasField("MsgId", Message.
class
, "msgId");
Message Message = (Message)xstream.fromXML(xml);
return
Message;
}
private
String getReplyMessage(String replyMsg,String toUserName,String fromUserName){
ReplyMessage we =
new
ReplyMessage();
we.setMessageType("text");
we.setFuncFlag("0");
we.setCreateTime(
new
Long(
new
Date
().getTime()).toString());
we.setContent(replyMsg);
we.setToUserName(toUserName);
we.setFromUserName(fromUserName);
XStream xstream =
new
XStream(
new
DomDriver());
xstream.alias("xml", ReplyMessage.
class
);
xstream.aliasField("ToUserName", ReplyMessage.
class
, "toUserName");
xstream.aliasField("FromUserName", ReplyMessage.
class
, "fromUserName");
xstream.aliasField("CreateTime", ReplyMessage.
class
, "createTime");
xstream.aliasField("MsgType", ReplyMessage.
class
, "messageType");
xstream.aliasField("Content", ReplyMessage.
class
, "content");
xstream.aliasField("FuncFlag", ReplyMessage.
class
, "funcFlag");
String xml =xstream.toXML(we);
return
xml;
}
}
===========================================================================
package com.eiyoung.wechat.web.utils;
public
class
ReplyMessage {
private
String FuncFlag;
private
String fromUserName;
private
String toUserName;
private
String content;
private
String messageType;
private
String createTime;
public
String getContent() {
return
content;
}
public
void setContent(String content) {
this.content = content;
}
public
String getMessageType() {
return
messageType;
}
public
void setMessageType(String messageType) {
this.messageType = messageType;
}
public
String getFromUserName() {
return
fromUserName;
}
public
void setFromUserName(String fromUserName) {
this.fromUserName = fromUserName;
}
public
String getToUserName() {
return
toUserName;
}
public
void setToUserName(String toUserName) {
this.toUserName = toUserName;
}
public
String getCreateTime() {
return
createTime;
}
public
void setCreateTime(String createTime) {
this.createTime = createTime;
}
public
String getFuncFlag() {
return
FuncFlag;
}
public
void setFuncFlag(String funcFlag) {
FuncFlag = funcFlag;
}
public
String toString(){
return
"createTime:"+getCreateTime()+"\\ntoUserName:"+getToUserName()+"\\n FromUserName:"+getFromUserName()+"\\nmessageType:"+getMessageType()+"\\ncontent:"+getContent();
}
}
===============================================================================
package com.eiyoung.wechat.web.utils;
import java.util.
Date
;
public
class
Message {
private
String msgId;
private
String fromUserName;
private
String toUserName;
private
String content;
private
String messageType;
private
String createTime;
public
String getContent() {
return
content;
}
public
void setContent(String content) {
this.content = content;
}
public
String getMessageType() {
return
messageType;
}
public
void setMessageType(String messageType) {
this.messageType = messageType;
}
public
String getFromUserName() {
return
fromUserName;
}
public
void setFromUserName(String fromUserName) {
this.fromUserName = fromUserName;
}
public
String getToUserName() {
return
toUserName;
}
public
void setToUserName(String toUserName) {
this.toUserName = toUserName;
}
public
String getCreateTime() {
return
createTime;
}
public
void setCreateTime(String createTime) {
this.createTime = createTime;
}
public
String getMsgId() {
return
msgId;
}
public
void setMsgId(String msgId) {
this.msgId = msgId;
}
public
String toString(){
return
"msgId:"+getMsgId()+"\\ncreateTime:"+getCreateTime()+"\\ntoUserName:"+getToUserName()+"\\n FromUserName:"+getFromUserName()+"\\nmessageType:"+getMessageType()+"\\ncontent:"+getContent();
}
}
==============================================================================
maven
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>3.0-alpha-1</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.3</version>
</dependency>