|
10 vuotta sitten | |
---|---|---|
src | 10 vuotta sitten | |
.gitignore | 10 vuotta sitten | |
LICENSE | 10 vuotta sitten | |
README.md | 10 vuotta sitten | |
pom.xml | 10 vuotta sitten |
微信java开发工具集,本项目主要分为两大块:微信消息路由器、微信Java API
特性列表:
你可以使用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);
WxMessageHandler
和WxMessageInterceptor
Rule.next()
Rule.end()
或者Rule.next()
,否则不会生效WxMessageRouterTest
单元测试,或者查看JavadocWxMessageRouter
默认使用异步的方式处理消息,如果要使用同步的方式处理消息,那么可以这样:
router
.rule()
.async(false)
.handler(handler)
.end()
;
WxXmlMessage message = WxXmlMessage.fromXml(xml);
// 获得同步的返回结果
WxXmlMessage res = router.route(message);
String xml = res.toXml();
// ... 将xml写入HttpServletResponse
使用WxService
可以调用微信API。目前已实现除“微信小店”以外的所有功能。
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)) {
// 验证失败
}
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
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