微信java开发工具集

微信java开发工具集,本项目主要分为两大块:微信消息路由器、微信 Java API 特性列表: 不基于Servlet、和其他MVC框架,仅作为工具使用,提供更多的灵活性详尽的单元测试代码,可以拿来当exa...

微信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

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
不写代码的码农
聂微东

技术主管

4 篇文章

作家榜 更多

  1. 李得胜 22 文章
  2. 新媒广告价 17 文章
  3. admin 16 文章
  4. 非帅不可 12 文章
  5. 墨尔本情  12 文章
  6. 步非+烟花  12 文章
  7. 唱歌跑调的女生 12 文章
  8. 有头猪在看我 11 文章