java版微信機器人代碼

efbb 9年前發布 | 3K 次閱讀 Java
 

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();
}

/**
 * 驗證
 * @param request
 * @param response
 * @throws ServletException
 * @throws IOException
 */
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;

/**

  • Created with IntelliJ IDEA.
  • User: sb
  • Date: 8/1/13
  • Time: 10:37 PM
  • To change this template use File | Settings | File Templates. */ 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;

/**

  • Created with IntelliJ IDEA.
  • User: sb
  • Date: 8/1/13
  • Time: 10:37 PM
  • To change this template use File | Settings | File Templates. */ 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> </dependencies>

</pre>

 本文由用戶 efbb 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!