1 公眾號與微信的區別
| 微信 | 公眾號 | |
| 社交圈 | 大多都是認識的人 可進行一對一、多對多交流 |
包括個人在內的更大的社交圈 關注用戶大多都不認識 |
| 定位 | 主要用於聊天、朋友圈等個人娛樂 | 更加傾向於商業用途 達到個人品牌的推廣、企業品牌宣傳等 |
| 使用方式 | 主要在手機端使用 | 主要在PC端使用 |
| 關注方式 | 可以相互關注 | 只能被用戶關注 |
2 公眾號類型
公眾號類型一般分為:
- 訂閱號
- 服務號
- 企業號
注:個人只能注冊訂閱號,更詳細的信息請登錄微信公眾平台查看。

3 微信公眾平台
微信公眾品台是騰訊為了讓用戶申請和管理微信公眾賬號而推出的一個WEB平台。

4 功能介紹
本節所有內容都是基於編輯模式(微信公眾號開發的兩種模式之一)進行的。
4.1 自動回復
自動回復分為以下三種:
- 被添加自動回復:用戶剛關注該公眾號時回復此文本
- 消息自動回復:任意消息回復此文本(在關鍵詞回復之后執行)
- 關鍵詞自動回復:消息是關鍵詞或包含關鍵詞回復此文本

該操作較為簡單,只需注意關鍵詞自動回復中,關鍵詞的“未全匹配”和“已全匹配”區別。
-
若選擇了全匹配,在編輯頁面則會顯示“已全匹配”(如圖):
對方發送的內容與設置的關鍵詞須完全一樣,才會觸發關鍵字回復,不能多一個字符也不能少一個字符。比如設置“123”,僅回復“123”才會觸發關鍵詞回復。

-
若沒有選擇全匹配的情況下,編輯頁面則會顯示“未全匹配”(如圖):
只要對方發送內容包含設置的完整關鍵詞,就會觸發關鍵詞回復給對方。比如設置“123”,回復“1234”會觸發,但回復不完整的關鍵詞“12”則不會觸發關鍵詞回復。

4.2 素材管理
素材管理主要對圖文消息、圖片、語音、視頻等四種類型的消息進行管理。
現微信公眾平台已改版,群發消息需從該管理下才能發送給用戶。

圖文消息編輯界面如下:

用起來挺簡單,左方圖文列表可設置單圖文和多圖文模式,另需注意:圖文消息編輯需將圖片等資源先上傳至圖片。
注:單圖文就是只有一篇消息(可展示摘要),多圖文就是多篇消息(不展示摘要,只有標題)。
但其實微信公眾平台的編輯(排版)並不完善,可優先考慮使用第三方編輯器,如秀米、135編輯器、i排版等工具。
4.3 自定義菜單
自定義菜單,即設置公眾號最下方的以下菜單效果,可使菜單連接至網頁、圖文消息或小程序。
自定義菜單有兩種類型:click類型和view類型。
- click類型:返回消息(發送消息,可選擇四種類型的消息)
- view類型:類似於超鏈接,跳轉至一個頁面(跳轉網頁)

此編輯部分也較為簡單,不做過多說明。
5 開發模式環境搭建
需要的工具:
- 微信公眾號
- 外網映射工具(開發調試)
與微信對接的URL要具備以下條件:
- 在公網上能夠訪問
- 端口只支持80端口
5.1 映射工具
Ngork可以將內網映射到公網上面,這樣就可以在公網訪問您的本地網絡服務。
用法:
- 方法一:ngrok 8080(不穩定)
- 方法二:ngrok -config ngrok.cfg -subdomain example 8080(目前已改)
幫助文檔:http://www.tunnel.mobi/
【重要】
目前Ngrok已被微信屏蔽了(網址:http://ngrok.2bdata.com/),需要加群(費用:5元)才能下載客戶端,客戶端已下載至在G盤,將其復制到D盤,修改“star.bat”文件:

然后雙擊執行即可映射成功。

【使用】
映射完畢后,實際上,下面兩條語句是等效的:
http://localhost:8080==http://qijunhui1773.tunnel.echomod.cn
即開啟Tomcat后,輸入“http://qijunhui1773.tunnel.echomod.cn” 即可訪問Tomcat首頁(tomcat服務器和Ngrok映射工具都要開啟)。
同時可以在別人電腦打開該鏈接一樣可以展示項目Dome。

6 開發者模式
開發模式與編輯模式是互斥的,只能使用其一:

6.1 數據交互原理

6.2 開發模式接入(Get方式)
6.2.1 接入操作





6.2.2 代碼實現(Java)
見附件或Eclipse源碼。
代碼編寫完成后,生成域名為:“http://qijunhui1773.tunnel.echomod.cn/Weixin/wx.do”
配置微信后台服務器:

提交后,配置成功,出現以下頁面:

注:啟用后,編輯模式將失效。

6.3 消息的接收與響應(POST方式)
6.3.1 消息操作


6.3.2 代碼實現(Java)
見Eclipse中的源碼。
1 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 2 3 req.setCharacterEncoding("UTF-8");//轉換編碼方式 4 resp.setCharacterEncoding("UTF-8"); 5 PrintWriter out = resp.getWriter();//通過PrintWriter返回消息至微信后台 6 7 //接收消息 8 try { 9 Map<String,String> map = MessageUtil.xmlToMap(req); 10 String fromUserName = map.get("FromUserName");//發送方帳號(一個OpenID) 11 String toUserName = map.get("ToUserName");//開發者微信號 12 String msgType = map.get("MsgType");//text//如果是文本消息的話,MsgType="text" 13 String content = map.get("Content");//文本消息內容 14 15 String message = null; 16 //判斷是否為文本消息 17 if("text".equals(msgType)) { 18 com.po.TextMessage text = new com.po.TextMessage(); 19 text.setFromUserName(toUserName);//注意,這里發送者與接收者調換了 20 text.setToUserName(fromUserName); 21 text.setMsgType("text");//文本類型 22 text.setCreateTime("" + new Date().getTime());//當前時間 23 text.setContent("您發送的消息是:" + content);//返回消息 24 //將文本消息轉換為xml 25 26 message = MessageUtil.textMessageToXml(text); 27 28 System.out.println(message); 29 } 30 31 out.print(message);//返回消息 32 } catch (DocumentException e) { 33 e.printStackTrace(); 34 } finally { 35 out.close(); 36 } 37 }
主要在這部分進行文本的接收與發生。其他類都是輔助類,代碼較為固定。
需要注意:微信后台都是以XML格式發送或接受數據的,所以在程序中需要以下兩種方法:
- XML轉文本對象(集合)->需使用dom4j.jar
- 文本對象轉XML->需使用xstream.jar和xmlpull.jar
注:只要將jar包放置在WebContent->WEB-INF->lib文件夾下,Tomcat發布后會自動將其部署,不必再將其包復制到Tomcat文件夾下。
6.3.3 實現結果


