<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qiyadeng

    專注于Java示例及教程
    posts - 84, comments - 152, trackbacks - 0, articles - 34
    1.設置成為開發(fā)者模式

    登錄微信工作平臺,選擇高級功能-進入開發(fā)模式,成為開發(fā)者。需要做如下圖配置。URL配置的信息是指,微信的后臺服務器把您的用戶消息發(fā)送到該URL處理。Token是你和微信之間的一個密碼,用來驗證消息是否是從微信的服務發(fā)送而來,而不是其他來攻擊你的系統(tǒng)。


    現(xiàn)在你還不能設置,在設置時微信會GET請求你設置的URL,已檢測接口是否可以使用。只有等你準備好GET方法之后才可以進行設置。


    2.實現(xiàn)GET方法

    從文檔中知道,我們需要實現(xiàn)POST和GET方法,GET方法用于驗證微信和你的通訊驗證,POST用于消息處理。

    新建Servlet HelloWeChat,先實現(xiàn)其中的GET方法


        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
    // TODO 為了簡單起見,先不對消息來源進行校驗
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter pw 
    = response.getWriter();
            String echo 
    = request.getParameter("echostr");
            echo 
    = new String(echo.getBytes("ISO-8859-1"),"UTF-8");
            pw.println(echo);
        }
    可以在本地使用http://localhost:8080/QiyadengWeb/HelloWeChat?echostr=hello中文,先進行測試,如果沒有問題,可以部署到服務器上,然后在微信公眾平臺進行設置了。

    3.實現(xiàn)POST方法

    POST方法首先接收到微信公眾平臺傳送過來的XML,從中提取消息發(fā)送人和消息內(nèi)容。更加消息發(fā)送內(nèi)容,你可以增加自己的處理邏輯,最后拼裝成回復消息XML,返回給微信公眾平臺。


        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");
            WeChatTextMessage textMsg 
    = null;
            
    try {
                textMsg 
    = getWeChatTextMessage(wxMsgXml);
            } 
    catch (Exception e) {
                e.printStackTrace();
            }
            StringBuffer replyMsg 
    = new StringBuffer();
            
    if(textMsg != null){
                
    //增加你所需要的處理邏輯,這里只是簡單重復消息
                replyMsg.append("您給我的消息是:");
                replyMsg.append(textMsg.getContent());
            }
            
    else{
                replyMsg.append(
    ":)不是文本的消息,我暫時看不懂");
            }
            String returnXml 
    = getReplyTextMessage(replyMsg.toString(), textMsg.getFromUserName());
            pw.println(returnXml);
        }

    關于調(diào)試,這里推薦一個工具Fiddler,你可以模擬微信的POST消息到你的本地,而不必每次部署到服務器上進行調(diào)試。關于Fiddler的POST數(shù)據(jù)使用方法,可以參考下圖標注內(nèi)容。

    4.部署并測試

    完成第一步,并和你的公眾帳號好進行對話,回復消息沒有問題的話,那就恭喜你了

    5.依賴庫

    使用maven的同學,添加以下依賴即可。非maven用戶,找到這些庫添加到buider path中即可。


          <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>
    6.完整的代碼
    package com.qiyadeng.wechat;

    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 org.apache.commons.io.IOUtils;

    import com.thoughtworks.xstream.XStream;
    import com.thoughtworks.xstream.io.xml.DomDriver;

    /**
     * Servlet implementation class HelloWeChat
     
    */
    public class HelloWeChat extends HttpServlet {
        
    private static final long serialVersionUID = 1L;
           
        
    /**
         * 
    @see HttpServlet#HttpServlet()
         
    */
        
    public HelloWeChat() {
            
    super();
        }

        
    /**
         * 
    @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         
    */
        
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
    // TODO 為了簡單起見,先不對消息來源進行校驗
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter pw 
    = response.getWriter();
            String echo 
    = request.getParameter("echostr");
            echo 
    = new String(echo.getBytes("ISO-8859-1"),"UTF-8");
            pw.println(echo);
        }

        
    /**
         * 
    @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         
    */
        
    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");
            WeChatTextMessage textMsg 
    = null;
            
    try {
                textMsg 
    = getWeChatTextMessage(wxMsgXml);
            } 
    catch (Exception e) {
                e.printStackTrace();
            }
            StringBuffer replyMsg 
    = new StringBuffer();
            
    if(textMsg != null){
                
    //增加你所需要的處理邏輯,這里只是簡單重復消息
                replyMsg.append("您給我的消息是:");
                replyMsg.append(textMsg.getContent());
            }
            
    else{
                replyMsg.append(
    ":)不是文本的消息,我暫時看不懂");
            }
            String returnXml 
    = getReplyTextMessage(replyMsg.toString(), textMsg.getFromUserName());
            pw.println(returnXml);
        }
        
        
    private WeChatTextMessage getWeChatTextMessage(String xml){
            XStream xstream 
    = new XStream(new DomDriver());
            xstream.alias(
    "xml", WeChatTextMessage.class);
            xstream.aliasField(
    "ToUserName", WeChatTextMessage.class"toUserName");
            xstream.aliasField(
    "FromUserName", WeChatTextMessage.class"fromUserName");
            xstream.aliasField(
    "CreateTime", WeChatTextMessage.class"createTime");
            xstream.aliasField(
    "MsgType", WeChatTextMessage.class"messageType");
            xstream.aliasField(
    "Content", WeChatTextMessage.class"content");
            xstream.aliasField(
    "MsgId", WeChatTextMessage.class"msgId");
            WeChatTextMessage wechatTextMessage 
    = (WeChatTextMessage)xstream.fromXML(xml); 
            
    return wechatTextMessage;
        }
        
        
    private String getReplyTextMessage(String content, String weChatUser){
            WeChatReplyTextMessage we 
    = new WeChatReplyTextMessage();
            we.setMessageType(
    "text");
            we.setFuncFlag(
    "0");
            we.setCreateTime(
    new Long(new Date().getTime()).toString());
            we.setContent(content);
            we.setToUserName(weChatUser);
            we.setFromUserName(
    "shanghaiweather");//TODO 你的公眾帳號微信號
            XStream xstream = new XStream(new DomDriver()); 
            xstream.alias(
    "xml", WeChatReplyTextMessage.class);
            xstream.aliasField(
    "ToUserName", WeChatReplyTextMessage.class"toUserName");
            xstream.aliasField(
    "FromUserName", WeChatReplyTextMessage.class"fromUserName");
            xstream.aliasField(
    "CreateTime", WeChatReplyTextMessage.class"createTime");
            xstream.aliasField(
    "MsgType", WeChatReplyTextMessage.class"messageType");
            xstream.aliasField(
    "Content", WeChatReplyTextMessage.class"content");
            xstream.aliasField(
    "FuncFlag", WeChatReplyTextMessage.class"funcFlag");
            String xml 
    =xstream.toXML(we);
            
    return xml;
        }

    }

    原創(chuàng)文章,轉載請注明: 轉載自http://www.qiyadeng.com/

    本文鏈接地址: 微信公眾平臺開發(fā)(二)–簡單的聊天機器人

    Feedback

    # re: 微信公眾平臺開發(fā)(二)--簡單的聊天機器人[未登錄]  回復  更多評論   

    2013-03-19 12:49 by 大海
    正在學習javaweb的內(nèi)容,感覺作者寫的這個不錯.既有趣還可以練習所學內(nèi)容.不知道作者還會不會繼續(xù)去寫微信開放平臺的代碼.我好繼續(xù)向博主學習

    # re: 微信公眾平臺開發(fā)(二)--簡單的聊天機器人  回復  更多評論   

    2013-04-27 09:16 by 微信公眾平臺開發(fā)者
    微信公眾平臺開發(fā)者 qq群127860053

    # re: 微信公眾平臺開發(fā)(二)--簡單的聊天機器人  回復  更多評論   

    2013-06-19 18:13 by 河南銳騎
    微信借助LBS可以開發(fā)出公眾平臺的一些本地化便民服務。如:利用LBS,我可以讓用戶發(fā)送一個位置,然后查詢附近的酒店,然后通過微信預定酒店。也可以通過LBS顯示附近的店鋪,娛樂優(yōu)惠信息,用戶憑借綁定微信號后,可以到這些店里面享受購物娛樂優(yōu)惠活動。這些功能不僅為用戶提供了極大的便利,還可以讓用戶感受到良好的體驗。這樣,用戶就會對您們的店鋪產(chǎn)生更好的印象,無形之中,就做到了宣傳的作用。

    http://www.weixindev.com

    # re: 微信公眾平臺開發(fā)(二)--簡單的聊天機器人  回復  更多評論   

    2013-07-25 15:05 by bokix
    post請求里面不用做校驗了?如果是其他網(wǎng)站post過來的虛假消息呢?

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 四虎影永久在线高清免费| 国产精品网站在线观看免费传媒 | 最新69国产成人精品免费视频动漫 | 噜噜噜亚洲色成人网站| 日韩一区二区免费视频| 国产精品久久久久久亚洲影视 | 久久久久久99av无码免费网站| 亚洲午夜电影在线观看高清 | 成人av片无码免费天天看| 亚洲性日韩精品一区二区三区| 日韩在线观看视频免费| 亚洲自偷自偷在线制服| 最近2019中文免费字幕在线观看 | 国产亚洲福利在线视频| 久久精品a一国产成人免费网站| 国产成人精品日本亚洲专区6| 女人张开腿等男人桶免费视频| 亚洲色欲啪啪久久WWW综合网| 成人无遮挡裸免费视频在线观看 | 亚洲?V无码成人精品区日韩| 成人在线免费视频| 亚洲国产精品无码久久久秋霞2| 国产成人AV片无码免费| 在线亚洲高清揄拍自拍一品区 | 亚洲综合伊人久久大杳蕉| 精品免费视在线观看| 亚洲嫩草影院在线观看| 午夜老司机免费视频| 国产黄色免费观看| 久久久亚洲欧洲日产国码aⅴ| 在线a级毛片免费视频| 免费一级毛片在线播放放视频| 亚洲va中文字幕无码久久不卡| 免费阿v网站在线观看g| 黄网站色成年片大免费高清| 久久亚洲精品国产精品黑人| 免费黄色小视频网站| 久久久久久免费一区二区三区| 亚洲熟妇AV一区二区三区浪潮 | 久久精品国产这里是免费| 波多野结衣亚洲一级|