<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.設(shè)置成為開發(fā)者模式

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


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


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

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

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


        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
    // TODO 為了簡單起見,先不對(duì)消息來源進(jìn)行校驗(yàn)
            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中文,先進(jìn)行測試,如果沒有問題,可以部署到服務(wù)器上,然后在微信公眾平臺(tái)進(jìn)行設(shè)置了。

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

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


        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){
                
    //增加你所需要的處理邏輯,這里只是簡單重復(fù)消息
                replyMsg.append("您給我的消息是:");
                replyMsg.append(textMsg.getContent());
            }
            
    else{
                replyMsg.append(
    ":)不是文本的消息,我暫時(shí)看不懂");
            }
            String returnXml 
    = getReplyTextMessage(replyMsg.toString(), textMsg.getFromUserName());
            pw.println(returnXml);
        }

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

    4.部署并測試

    完成第一步,并和你的公眾帳號(hào)好進(jìn)行對(duì)話,回復(fù)消息沒有問題的話,那就恭喜你了

    5.依賴庫

    使用maven的同學(xué),添加以下依賴即可。非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 為了簡單起見,先不對(duì)消息來源進(jìn)行校驗(yàn)
            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){
                
    //增加你所需要的處理邏輯,這里只是簡單重復(fù)消息
                replyMsg.append("您給我的消息是:");
                replyMsg.append(textMsg.getContent());
            }
            
    else{
                replyMsg.append(
    ":)不是文本的消息,我暫時(shí)看不懂");
            }
            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 你的公眾帳號(hào)微信號(hào)
            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)文章,轉(zhuǎn)載請注明: 轉(zhuǎn)載自http://www.qiyadeng.com/

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

    Feedback

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

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

    # re: 微信公眾平臺(tái)開發(fā)(二)--簡單的聊天機(jī)器人  回復(fù)  更多評(píng)論   

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

    # re: 微信公眾平臺(tái)開發(fā)(二)--簡單的聊天機(jī)器人  回復(fù)  更多評(píng)論   

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

    http://www.weixindev.com

    # re: 微信公眾平臺(tái)開發(fā)(二)--簡單的聊天機(jī)器人  回復(fù)  更多評(píng)論   

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

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产精品无码亚洲一区二区三区| 亚洲一区二区三区偷拍女厕| 男人的好看免费观看在线视频 | 亚洲成在人线av| 中文字幕人成人乱码亚洲电影| 亚洲国产日韩在线观频| 久久精品国产精品亚洲人人| 亚洲一区二区三区无码影院| 中文字幕第一页亚洲| 国产亚洲精品影视在线产品 | 在线永久免费的视频草莓| 免费观看激色视频网站(性色)| 免费福利在线播放| 黄瓜视频高清在线看免费下载| 四虎影院免费在线播放| 免费人妻av无码专区| 久久青青草原亚洲av无码| 亚洲精品自产拍在线观看| 亚洲2022国产成人精品无码区| 亚洲视频一区网站| 国产成人亚洲综合一区| 久久久久久久久无码精品亚洲日韩| 看免费毛片天天看| 两个人www免费高清视频| 免费国产黄网站在线观看视频| 久久久久久精品成人免费图片| 丁香花在线观看免费观看| 日韩在线免费播放| 亚洲伊人久久综合影院| 亚洲v高清理论电影| 久久精品国产亚洲av麻豆蜜芽| 国产AV无码专区亚洲AV麻豆丫| caoporm超免费公开视频| 最近免费中文字幕高清大全| 性感美女视频免费网站午夜| 亚洲精品天堂成人片?V在线播放| 亚洲Av永久无码精品三区在线 | 亚洲AV无码成人精品区天堂| 亚洲性无码av在线| 色吊丝免费观看网站| 免费成人高清在线视频|