-接收文本、視頻、圖片、語音等全部消息推送;html
-接收關注、取消關注、掃碼、菜單點擊等全部事件推送;java
-響應文本、視頻、圖片、語音、圖文內容;git
-新增video、image、voice、thumbs、news永久素材;github
-新增video、image、voice、thumb臨時素材web
-刪除永久素材tomcat
-支持明文和安全安全兩種模式安全
-任意地方獲取AccessToken服務器
-建立菜單、刪除菜單、獲取菜單、增長個性菜單、刪除個性菜單、測試匹配個性菜單、獲取當前菜單配置微信
-新增客服、刪除客服、更新客服信息、上傳客服頭像、獲取客服列表app
-羣發圖文、視頻、圖片、文本
一、準備java web開發環境,jdk版本1.6+,tomcat6.0+
二、建立一個java web項目,並引入wx4j1.0.jar包,下載地址:
github: https://github.com/zhourui123/wx4j
(jar包在dist中)
dependency:
三、新建一個類WxAdapterImpl繼承AbstractWxAdapter,並實現其抽象方法。initMenu()方法須要返回一個Menu對象,你能夠先使用MenuUtils.getSampleMenu()來獲取一個實例菜單對象。
public class WxAdapterImpl extends AbstractWxAdapter { @Override public Menu initMenu() { System.out.println("on create menu"); return MenuUtils.getSampleMenu(); } @Override public void onReceiveText(ReceiveTextMessage message) { System.out.println("onReceiveTextMessage"); } @Override public void onReceiveVoice(ReceiveVoiceMessage message) { System.out.println("onReceiveVoice"); } @Override public void onReceiveImage(ReceiveImageMessage message) { System.out.println("onReceiveImage"); } //還有不少方法暫不列出 }
四、在web.xml中配置WxServlet,並將該servlet的load-on-startup設置爲1,保證其可以在web服務器啓動時初始化
<servlet> <servlet-name>WxServlet</servlet-name> <servlet-class>cn.zr.wx4j.servlet.WxServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>WxServlet</servlet-name> <url-pattern>/WxServlet</url-pattern> </servlet-mapping>
五、將sys.properties放在src根下並配置它
app_id、app_secret、token能夠直接在公衆號基本配置中找到;
adapterPath地址填寫步驟3中你建立的WxAdapterImpl的全路徑;
若是是安全模式,is_safe設置爲true,並配置encodingAesKey,encodingAesKey一樣能夠在公衆號基本配置頁面找到,非安全模式,設置爲false,encodingAesKey能夠不用配置。
app_id=wx7cd11cb5c49exxxx app_secret=ba787a886fe3158492e8a0056361xxxx token=abc adapterPath=cn.zr.wx4j.test.WxAdapterImpl is_safe_mode=true
encodingAesKey=1k5oHRxklEy6YNueIOIyn7qE6XpKJSVl8uuUwcPxxxx
六、以上配置完畢後,啓動tomcat服務,觀察控制檯信息。
一、在WxAdapterImpl中,你實現的每一個方法中均可以得到微信服務器發送過來的消息對象,下面是一個實例,用戶給你發送了一條message,你獲得了一個ReceiveTextMessage對象message,message主要包含如下信息:
message.getFromUser();//得到消息來源
message.getToUser();//得到消息去向
message.getTimeStamp();//得到發送時間戳
message.getContent();//得到消息內容
如今,你能夠建立一個TextMessage對象,直接調用AbstractWxAdapter繼承下來的sendTextMessage方法,完成一條text消息的發送。
@Override
public void onReceiveText(ReceiveTextMessage message) { System.out.println("onReceiveTextMessage"); TextMessage text = new TextMessage(); text.setContent("哈咯,這是一條文本消息"); text.setCreateTime(System.currentTimeMillis()); text.setFromUserName(message.getToUserName()); text.setToUserName(message.getFromUserName()); text.setMsgType(MessageType.TEXT); sendTextMessage(text); }
固然,你也能夠響應video、image等消息,可供調用的方法以下:
public void sendTextMessage(TextMessage msg); public void sendNews(NewsMessage msg); public void sendImage(ImageMessage msg); public void sendVoice(VoiceMessage msg); public void sendVideo(VideoMessage msg); public void sendMusic(MusicMessage msg);
一、你只須要在WxAdapterImpl中的initMenu()方法中返回你須要的建立的Menu對象,框架會幫助你自動將它建立在公衆號上,若是你不知道如何構建一Menu,能夠調用MenuUtils.getSampleMenu()得到一個示例Menu,代碼以下:
public static Menu getSampleMenu() { Menu m = new Menu(); Button b1 = new Button(); b1.setName("客戶服務"); ViewButton b11 = new ViewButton(); b11.setName("測試1"); b11.setType(ButtonType.VIEW); b11.setUrl("http://www.zhour.net"); ViewButton b12 = new ViewButton(); b12.setName("測試2"); b12.setType(ButtonType.VIEW); b12.setUrl("http://www.zhour.net"); ViewButton b13 = new ViewButton(); b13.setName("test1"); b13.setType(ButtonType.VIEW); b13.setUrl("http://www.zhour.net"); ViewButton b14 = new ViewButton(); b14.setName("test2"); b14.setType(ButtonType.VIEW); b14.setUrl("http://www.zhour.net"); b1.setSub_button(new Button[] { b11, b12, b13, b14 }); Button b2 = new Button(); b2.setName("infomation"); ViewButton b21 = new ViewButton(); b21.setName("官網"); b21.setType(ButtonType.VIEW); b21.setUrl("http://www.huapengfei.com"); ViewButton b22 = new ViewButton(); b22.setName("APP"); b22.setType(ButtonType.VIEW); b22.setUrl("http://www.zhour.net"); b2.setSub_button(new Button[] { b21, b22 }); ViewButton b3 = new ViewButton(); b3.setName("聯繫咱們"); b3.setType(ButtonType.VIEW); b3.setUrl("http://www.zhour.net"); m.setButton(new Button[] { b1, b2, b3 }); return m; }