微信java開發工具集

jopen 10年前發布 | 99K 次閱讀 微信 微博工具/系統

微信java開發工具集,本項目主要分為兩大塊:微信消息路由器、微信 Java API

特性列表:

  1. 不基于Servlet、和其他MVC框架,僅作為工具使用,提供更多的靈活性

  2. 詳盡的單元測試代碼,可以拿來當example用

  3. 詳盡的javadoc

  4. access token過期自動刷新的功能

  5. 微信服務端繁忙自動重試的功能

  6. 提供微信錯誤信息的異常處理機制

微信消息路由器

你可以使用WxMessageRouter來對微信推送過來的消息、事件進行路由,交給的WxMessageHandler處理。
使用方法:

WxMessageRouter router = new WxMessageRouter();
router
  .rule()
      .msgType("MSG_TYPE")
      .event("EVENT")
      .eventKey("EVENT_KEY")
      .content("CONTENT")
      .interceptor(interceptor).handler(handler)
  .end()
  .rule()
      .msgType("MSG_TYPE")
      .handler(handler)
  .end()
;
// 將WxXmlMessage交給消息路由器
WxXmlMessage message = WxXmlMessage.fromXml(xml);
router.route(message);

    1.    開發人員需實現自己的WxMessageHandler和WxMessageInterceptor
    2.    配置路由規則時要按照從細到粗的原則,否則可能消息可能會被提前處理
    3.    默認情況下消息只會被處理一次,除非使用 Rule.next()
    4.    規則的結束必須用Rule.end()或者Rule.next(),否則不會生效
    5.    具體使用可以看源代碼中的WxMessageRouterTest單元測試,或者查看Javadoc

微信Java API

使用WxService可以調用微信API。目前已實現除“微信小店”以外的所有功能。

構造WxService

WxService依賴于WxConfigStorage,WxConfigStorage是微信客戶端配置所存儲的地方,本工具提供了默認基于內存的實現:WxInMemoryConfigStorage。您可能在實際使用時需要提供自己的實現,比如在集群環境下存儲到數據庫中。

WxConfigStorage config = new WxInMemoryConfigStorage();
config.setAppId(...);
config.setSecret(...);
config.setToken(...);
WxServiceImpl wxService = new WxServiceImpl();
wxService.setWxConfigStorage(config);

驗證消息

if(!wxService.checkSignature(timestamp, nonce, signature)) {
   // 驗證失敗
}

刷新access_token

wxService.accessTokenRefresh();

刷新后的accessToken存在WxConfigStorage中。

多媒體文件
上傳多媒體文件

InputStream inputStream = ...;
File file = ...;
WxMediaUploadResult res = wxService.mediaUpload(mediaType, fileType, inputStream);
// 或者
res = wxService.mediaUpload(mediaType, file);
res.getType();
res.getCreated_at();
res.getMedia_id();
res.getThumb_media_id();

下載多媒體文件

// 獲得一個在系統臨時目錄的文件
File file = wxService.mediaDownload(media_id);

分組管理
創建分組

WxGroup res = wxService.groupCreate("測試分組1");

獲得分組列表

List<WxGroup> groupList = wxService.groupGet();

更新分組名

WxGroup g = new WxGroup();
g.setId(...);
g.setName(...);
wxService.groupUpdate(group);

用戶管理
更新用戶備注名

wxService.userUpdateRemark(openid, "測試備注名");

獲得用戶信息

String lang = "zh_CN"; //語言
WxUser user = wxService.userInfo(openid, lang);

獲得用戶列表

WxUserList wxUserList = wxService.userList(next_openid);

查詢用戶所在分組

long groupid = wxService.userGetGroup(openid);

將用戶移到分組

wxService.userUpdateGroup(openid, to_groupid);

發送客服消息

WxCustomMessage message = new WxCustomMessage();
// 設置消息的內容等信息
wxService.customMessageSend(message);

群發消息

下面用用戶列表群發(WxMassOpenIdsMessage)做例子,如果要使用分組群發,則使用WxMassGroupMessage即可。
文本消息

WxMassOpenIdsMessage massMessage = new WxMassOpenIdsMessage();
massMessage.setMsgtype(WxConsts.MASS_MSG_TEXT);
massMessage.setContent("消息內容");
massMessage.getTouser().add(openid);
WxMassSendResult massResult = wxService.massOpenIdsMessageSend(massMessage);

視頻消息

WxMediaUploadResult uploadMediaRes = wxService.mediaUpload(WxConsts.MEDIA_VIDEO, WxConsts.FILE_MP4, inputStream);
// 把視頻變成可被群發的媒體
WxMassVideo video = new WxMassVideo();
video.setTitle("測試標題");
video.setDescription("測試描述");
video.setMedia_id(uploadMediaRes.getMedia_id());
WxMassUploadResult uploadResult = wxService.massVideoUpload(video);
WxMassOpenIdsMessage massMessage = new WxMassOpenIdsMessage();
massMessage.setMsgtype(WxConsts.MASS_MSG_VIDEO);
massMessage.setMedia_id(uploadResult.getMedia_id());
massMessage.getTouser().add(openid);
WxMassSendResult massResult = wxService.massOpenIdsMessageSend(massMessage);

圖片消息

WxMediaUploadResult uploadMediaRes = wxService.mediaUpload(WxConsts.MEDIA_IMAGE, WxConsts.FILE_JPG, inputStream);
WxMassOpenIdsMessage massMessage = new WxMassOpenIdsMessage();
massMessage.setMsgtype(WxConsts.MASS_MSG_IMAGE);
massMessage.setMedia_id(uploadMediaRes.getMedia_id());
massMessage.getTouser().add(openid);
WxMassSendResult massResult = wxService.massOpenIdsMessageSend(massMessage);

語音消息

WxMediaUploadResult uploadMediaRes = wxService.mediaUpload(WxConsts.MEDIA_VOICE, WxConsts.FILE_MP3, inputStream);
WxMassOpenIdsMessage massMessage = new WxMassOpenIdsMessage();
massMessage.setMsgtype(WxConsts.MASS_MSG_VOICE);
massMessage.setMedia_id(uploadMediaRes.getMedia_id());
massMessage.getTouser().add(openid);
WxMassSendResult massResult = wxService.massOpenIdsMessageSend(massMessage);

圖文消息

// 先上傳圖文消息里需要的圖片
WxMediaUploadResult uploadMediaRes = wxService.mediaUpload(WxConsts.MEDIA_IMAGE, WxConsts.FILE_JPG, inputStream);
WxMassNews news = new WxMassNews();
WxMassNewsArticle article1 = new WxMassNewsArticle();
article1.setTitle("標題1");
article1.setContent("內容1");
article1.setThumb_media_id(uploadMediaRes.getMedia_id());
news.addArticle(article1);
WxMassNewsArticle article2 = new WxMassNewsArticle();
article2.setTitle("標題2");
article2.setContent("內容2");
article2.setThumb_media_id(uploadMediaRes.getMedia_id());
article2.setShow_cover_pic(true);
article2.setAuthor("作者2");
article2.setContent_source_url("www.baidu.com");
article2.setDigest("摘要2");
news.addArticle(article2);
WxMassUploadResult massUploadResult = wxService.massNewsUpload(news);
WxMassOpenIdsMessage massMessage = new WxMassOpenIdsMessage();
massMessage.setMsgtype(WxConsts.MASS_MSG_NEWS);
massMessage.setMedia_id(uploadResult.getMedia_id());
massMessage.getTouser().add(openid);
WxMassSendResult massResult = wxService.massOpenIdsMessageSend(massMessage);

自定義菜單
創建自定義菜單

WxMenu wxMenu = new WxMenu();
// 設置菜單
wxService.menuCreate(wxMenu);

刪除自定義菜單

wxService.menuDelete();

獲得自定義菜單

WxMenu wxMenu = wxService.menuGet()

二維碼
獲得二維碼ticket

// 臨時ticket
WxQrCodeTicket ticket = wxService.qrCodeCreateTmpTicket(scene, expire_seconds);
// 永久ticket
WxQrCodeTicket ticket = wxService.qrCodeCreateLastTicket(scene);

換取二維碼圖片

WxQrCodeTicket ticket = ...;
// 獲得一個在系統臨時目錄下的文件,是jpg格式的
File file = wxService.qrCodePicture(ticket);

短鏈接

String shortUrl = wxService.shortUrl("www.baidu.com");

如何執行單元測試
將 src/test/resources/test-config.sample.xml 改成 test-config.xml 設置appId, secret, accessToken(可選), openId

mvn clean test

項目主頁:http://www.baiduhome.net/lib/view/home/1409102769010

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!