微信服务号发送消息-java

世界杯波兰排名 2025-05-18 05:29:35

一,说明

服务号和公众号站在用户角度讲都是公众号,但是我们微信后台有区分,公众号发消息有条数限制,而服务号发送客服消息没有条数限制,所以这里我们选取服务号发送消息。以下做的是需要用户网页授权且关注服务号(用户角度是公众号)后续才能向用户发送消息。

下面我们在调用微信接口使用的是第三方的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依赖:

com.github.binarywang

wx-java-mp-spring-boot-starter

4.6.0

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);

其中消息体格式需要结合微信官方文档查看发送:开放接口 | 微信开放文档

四,总结

核心代码已贴出,其中的判断是否请求成功,及异常捕获处理,及其他的业务需根据自己的需求添加。