微信服务号发送消息-java
一,说明
服务号和公众号站在用户角度讲都是公众号,但是我们微信后台有区分,公众号发消息有条数限制,而服务号发送客服消息没有条数限制,所以这里我们选取服务号发送消息。以下做的是需要用户网页授权且关注服务号(用户角度是公众号)后续才能向用户发送消息。
下面我们在调用微信接口使用的是第三方的sdk调用,也可以自己选择http直接调用
注意:如果你的系统中之前是通过http方式请求获取微信token的,就建议还是用原来的方式调用微信开放平台接口,就不建议再去集成sdk的方式去调用微信开放平台的接口,不然可能会产生token污染的问题,如果你确保不会产生token污染,那么也可以选择使用sdk方式,毕竟方便。
二,发送消息业务流程图
下图分为四部分,前端:H5 。后端:crm服务,微信service(自定义的中台服务)。微信(微信服务商)。其中我们为了后期融合多个项目用到微信服务号发送消息功能,自己定义了微信service中台服务,你们可以不用建中台服务,将微信service和crm服务看成一个服务就行了。
三,代码核心流程图
其中右边钝角矩形方框内写的都是sdk调用微信开放平台接口的工具类,上半部分是针对微信service写的代码流程,微信service最后会返回redis中的用户信息的key给H5,crm服务需要根据H5传过来的key去微信service查询用户信息即可,用户信息包含openid,后面就可以拿着这个openid去向用户发送消息了。
3.1,调用微信开放平台接口的核心工具类:
pom依赖:
yml文件配置:
yml文件配置
wx:
mp:
app-id: 132465789 #你自己服务号的appid
secret: 132465789 #你自己服务号的secret
token: 123
aes-key: 123
config-storage:
type: redistemplate # 配置为 redistemplate 后默认会使用spring的redis配置
key-prefix: wx
business-auth-callback-url-for-wechat: https://sdfsdffsgh/authCallback?redirectUrl=%s
调用微信开放平台接口sdk工具类(核心代码):
//用户网页授权获取code,跳转302重定向接口
return wxMpService.getOAuth2Service().buildAuthorizationUrl(businessRedirectUri, "snsapi_userinfo", IdUtil.fastSimpleUUID());
//根据code获取用户AccessToken
WxOAuth2AccessToken wxOAuth2AccessToken = wxMpService.getOAuth2Service().getAccessToken(code);
//根据accessToken获取用户信息
WxOAuth2UserInfo userInfo = wxMpService.getOAuth2Service().getUserInfo(wxOAuth2AccessToken, null)
//调用微信发送服务号消息接口
String msgId = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMsg);
其中消息体格式需要结合微信官方文档查看发送:开放接口 | 微信开放文档
四,总结
核心代码已贴出,其中的判断是否请求成功,及异常捕获处理,及其他的业务需根据自己的需求添加。