微信開發(fā)-基礎(chǔ)篇

之前寫了微信開發(fā)的配置篇,很多朋友說還是不了解微信怎么與后臺交互的审胸,但是想想寫的太深還不如去看微信開發(fā)文檔梭纹,所以寫一個基礎(chǔ)變介紹下微信與后臺的交互

一羹膳、怎么勾搭上微信

其實很多人很好奇向瓷,我們是怎么實現(xiàn)與微信建立聯(lián)系的肠套,如果看過前一篇的朋友都了解,需要一個配置猖任,但是這個配置的后臺怎么寫呢?其實就是一個相同路徑的post和get請求代碼如下


@RequestMapping(value = "/service", method = RequestMethod.GET)//value可以自定義


@ResponseBody


public void? doGetMethod(HttpServletRequest request, HttpServletResponse response) throws Exception{?


/*String signature = request.getParameter("signature");?


? ? ? // 時間戳?


? ? ? String timestamp = request.getParameter("timestamp");?


? ? ? // 隨機(jī)數(shù)?


? ? ? String nonce = request.getParameter("nonce");? */


? ? ? // 隨機(jī)字符串?


? ? ? String echostr = request.getParameter("echostr"); //沒有加密直接返回,加密了詳見開發(fā)者文檔


? ? ? PrintWriter out = response.getWriter();?


? ? ? out.print(echostr);


? ? ? out.flush();


? ? ? out.close();


? }?


首先吐槽下自己的代碼瓷耙,我不知道這個的里面怎么調(diào)行間距朱躺,直接從IDEA 復(fù)制過來的

這樣微信在第一次發(fā)動過來GET信息就得到了想要的驗證,等于告訴微信搁痛,親~长搀,開業(yè)了,你可以來消費了

二鸡典、怎么跟微信互通有無

到這了就有人疑問了源请,微信那后面微信過來的消息呢?別急,就像門店一樣開業(yè)只有一次谁尸,后面的不會每次來都是開業(yè)流程了舅踪,所以下面用到了PSOT請求的接口


@RequestMapping(value= "/service", method= RequestMethod.POST)


@ResponseBody


? public final void doPostMethod(HttpServletRequest request, HttpServletResponse response){


? // 響應(yīng)消息? 調(diào)用核心業(yè)務(wù)類接收消息、處理消息


? ? ? PrintWriter out = null;


? try {


? ? ? // 將請求良蛮、響應(yīng)的編碼均設(shè)置為UTF-8(防止中文亂碼)


? request.setCharacterEncoding("UTF-8");


? response.setCharacterEncoding("UTF-8");


? String respMessage =coreService.processWchatMessage(request);


? out = response.getWriter();


? out.print(respMessage);


? out.flush();


? } catch (Exception e) {


? ? ? logger.error("'wechat index' has an exception :"+Thread.currentThread().getId()+"|"+e);


? ? ? e.printStackTrace();


? } finally{


? ? ? if(out!=null){


? ? ? ? out.close();


}


}


? }?


同樣請忽略掉代碼樣式抽碌,在IDEA上代碼樣式很規(guī)范的,╮( ̄▽ ̄")╭?

跟get接口一樣决瞳,幾乎是一模一樣货徙,但是注意下面這個代碼,這就是微信的核心處理類皮胡,同樣你可以隨意命名痴颊,返回一個微信明白的XML字符串就行了

String respMessage =coreService.processWchatMessage(request);

三、怎么知道用戶要什么屡贺,我們該給什么

下面看看?processWchatMessage里面都干了些什么


public final String processWchatMessage(HttpServletRequest request) {


? ? ? String respMessage = "success";


? ? ? Map requestMap = MessageUtil.parseXml(request);// xml請求解析


? ? ? String toUserName? ? ? ? = requestMap.get("ToUserName");


? ? ? String fromUserName? ? ? = requestMap.get("FromUserName");


? ? ? String msgType? ? ? ? ? = requestMap.get("MsgType");// 消息類型


? ? ? if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) {


? ? ? ? ? ? String eventType = requestMap.get("Event");


? ? ? ? ? if (eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)) {


? ? ? ? ? ? ? redisClient.del(fromUserName);


}


}


? ? ? TextMessage textMessage =? new TextMessage(fromUserName,toUserName);


? ? ? textMessage.setContent("歡迎關(guān)注車值銷公眾號祷舀!");


? ? ? respMessage = MessageUtil.wxMessageToXml(textMessage);


? ? ? return respMessage;


? }




首先是解析微信發(fā)來的信息,我是把一個XML解析成一個map烹笔,當(dāng)然有很多種解析方法裳扯,你也可以解析成OBJ,但是公司有一個既有的XML 解析谤职,就不要再去做過多的沒必要的事情了饰豺,下面是XML解析方法以供參考,技術(shù)達(dá)人可以忽略


public final static Map parseXml(final HttpServletRequest request){


? ? ? // 將解析結(jié)果存儲在HashMap中


? ? ? Map map = new HashMap();


? ? ? InputStream inputStream = null;


? ? ? try {


? // 從request中取得輸入流


? inputStream = request.getInputStream();


? // 讀取輸入流


? SAXReader reader = new SAXReader();


? Document document = reader.read(inputStream);


? reader=null;


? // 得到xml根元素


? Element root = document.getRootElement();


? // 得到根元素的所有子節(jié)點


? List elementList = root.elements();


? root=null;


? // 遍歷所有子節(jié)點


? for (Element e : elementList)


? ? ? map.put(e.getName(), e.getText());


} catch (Exception e) {


? ? ? logger.error("wx:ex|parsexml|"+e);


? ? ? e.printStackTrace();


} finally{


? try {


? ? ? if(inputStream!=null){


? ? ? ? inputStream.close();


? ? ? ? inputStream = null;


}


? } catch (IOException e) {


? ? ? logger.error("wx:ex|parsexml|"+e);


? ? ? e.printStackTrace();


}


}


? ? ? return map;


? }?


轉(zhuǎn)換成自己定義的格式允蜈,這里微信根據(jù)在公眾號中的不同操作返回不同的消息類型冤吨,而XML參數(shù)也有所不同,但是饶套,有幾個必定會有的且我們肯定要用到的參數(shù):ToUserName漩蟆、FromUserName、MsgType

MsgType   〖寺: 消息類型

ToUserName   : 開發(fā)者微信號

FromUserName〉±睢: 發(fā)送方帳號(一個OpenID)

知道這些參數(shù),那么下步你就可以判斷誰在公眾號做了什么類型的操作蛤克,這個類型操作的信息是什么捺癞,然后你這個類型的這個消息要給返回什么東西,把你的消息封裝成一個微信知道的XML 字符串然后返給微信构挤,微信就會根據(jù)你定義的返回消息的類型髓介,然后展示給用戶,這樣就完成了用戶在微信操作筋现,然后我們返回特定的內(nèi)容唐础,我上面的processWchatMessage就是一個簡單的關(guān)注發(fā)送文本消息箱歧,取消關(guān)注刪除用戶信息。

歡迎各路大神留言批評指正與討論一膨,小程序基礎(chǔ)篇醞釀中

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呀邢,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子汞幢,更是在濱河造成了極大的恐慌驼鹅,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件森篷,死亡現(xiàn)場離奇詭異输钩,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)仲智,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門买乃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人钓辆,你說我怎么就攤上這事剪验。” “怎么了前联?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵功戚,是天一觀的道長。 經(jīng)常有香客問我似嗤,道長啸臀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任烁落,我火速辦了婚禮乘粒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘伤塌。我一直安慰自己灯萍,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布每聪。 她就那樣靜靜地躺著旦棉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪熊痴。 梳的紋絲不亂的頭發(fā)上他爸,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機(jī)與錄音果善,去河邊找鬼。 笑死系谐,一個胖子當(dāng)著我的面吹牛巾陕,可吹牛的內(nèi)容都是我干的讨跟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鄙煤,長吁一口氣:“原來是場噩夢啊……” “哼晾匠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起梯刚,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤凉馆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后亡资,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體澜共,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年锥腻,在試婚紗的時候發(fā)現(xiàn)自己被綠了嗦董。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡瘦黑,死狀恐怖京革,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情幸斥,我是刑警寧澤匹摇,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站甲葬,受9級特大地震影響廊勃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜演顾,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一供搀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧钠至,春花似錦葛虐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至宪卿,卻和暖如春的诵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背佑钾。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工西疤, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人休溶。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓代赁,卻偏偏與公主長得像扰她,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子芭碍,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容