赞
踩
目录
公众号消息模板推送有很多便利,尤其是针对小程序的消息提醒,具有及时性,准确性等有优势,还可以点击进入小程序当然更加适配小程序的有专门的小程序订阅消息,这个之后再列举。
这里注意申请的公众号必须是服务号才能开通模板消息功能,另外申请模板消息的时候要选择正确适用的行业,因为选择完行业之后的模板都是关于这个行业的。
关于使用规则,请注意:
1.申请服务号并进行微信认证。
2.再新增功能里开通模板消息,选择适用的行业。
3.配置基本信息 开发者ID,密钥,ip白名单 这里注意要填写ip白名单,测试的时候,如果使用本地测试需要把本地的ip放到微信公众平台的白名单中才可以测试成功。
服务器地址:支持http 80 https 443 用于获取code的授权页面的访问地址
微信公众号maven
- <!-- 微信公众号 -->
- <dependency>
- <groupId>com.github.binarywang</groupId>
- <artifactId>weixin-java-mp</artifactId>
- <version>4.4.0</version>
- </dependency>
- //配置类
- import lombok.Data;
- import org.springframework.boot.context.properties.ConfigurationProperties;
- import org.springframework.stereotype.Component;
-
- @Data
- @Component
- @ConfigurationProperties(prefix = "gzh")
- public class WxMpProperties {
-
- /**
- * 公众号appId
- */
- private String appId;
-
- /**
- * 公众号appSecret
- */
- private String secret;
-
- }
- //配置类
-
- import com.alibaba.fastjson.JSON;
- import com.ruoyi.common.utils.http.HttpUtils;
- import com.ruoyi.utils.StringUtil;
- import me.chanjar.weixin.mp.api.WxMpService;
- import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
- import me.chanjar.weixin.mp.config.WxMpConfigStorage;
- import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.data.redis.core.RedisTemplate;
- import java.util.Map;
- import java.util.concurrent.TimeUnit;
-
- @Configuration
- public class WxConfig {
- private final WxMpProperties wxMpProperties;
- @Autowired
- private RedisTemplate redisTemplate;
-
- /**
- * 构造注入
- *
- * @param wxMpProperties
- */
- WxConfig(WxMpProperties wxMpProperties) {
- this.wxMpProperties = wxMpProperties;
- }
-
- /**
- * 微信客户端配置存储
- *
- * @return
- */
- @Bean
- public WxMpConfigStorage wxMpConfigStorage() {
- WxMpDefaultConfigImpl configStorage = new WxMpDefaultConfigImpl();
- // 公众号appId
- configStorage.setAppId(wxMpProperties.getAppId());
- // 公众号appSecret
- configStorage.setSecret(wxMpProperties.getSecret());
- // 公众号Token
- configStorage.setToken(getToken());
- return configStorage;
- }
-
- /**
- * 声明实例
- *
- * @return
- */
- @Bean
- public WxMpService wxMpService() {
- WxMpService wxMpService = new WxMpServiceImpl();
- wxMpService.setWxMpConfigStorage(wxMpConfigStorage());
- return wxMpService;
- }
-
-
- public String getToken() {
- Object accessToken1 = redisTemplate.opsForValue().get("AccessToken");
- if (null != accessToken1) {
- String accessToken = (String) redisTemplate.opsForValue().get("AccessToken");
- if (accessToken != null) {
- return accessToken;
- }
- }
- String s = HttpUtils.sendGet(" https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + wxMpProperties.getAppId() + "&secret=" + wxMpProperties.getSecret(), null);
- System.out.println(s);
- Map<String, Object> map = JSON.parseObject(s);
- System.out.println(map);
- if (StringUtil.isNullOrEmpty(map.get("access_token"))) {
- return null;
- }
- String access_token = map.get("access_token").toString();
- //官方返回的access_token有效时间为2小时=7200秒 这里存到redis 7000秒
- redisTemplate.opsForValue().set("AccessToken", access_token, 7000, TimeUnit.SECONDS);
- return access_token;
- }
-
- public static void main(String[] args) {
- String s = HttpUtils.sendGet(" https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wxa19e546e72ba4e71&secret=8efa42dfd859601d5800d75f725a739e", null);
- System.out.println(s);
- Map<String, Object> map = JSON.parseObject(s);
- System.out.println(map);
- }
- }
- //发送通知
-
- import com.ruoyi.common.core.domain.AjaxResult;
- import com.ruoyi.utils.DateTool;
- import me.chanjar.weixin.common.error.WxErrorException;
- import me.chanjar.weixin.mp.api.WxMpService;
- import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
- import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
- import org.springframework.web.bind.annotation.PostMapping;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- import java.util.Date;
-
- @RestController
- @RequestMapping("app/MessagePushController")
- public class MessagePushController {
-
-
- /**
- * 微信公众号API的Service
- */
- private final WxMpService wxMpService;
-
- /**
- * 构造注入
- */
- MessagePushController(WxMpService wxMpService) {
- this.wxMpService = wxMpService;
- }
- @RequestMapping("toWxMessage")
- public AjaxResult toWxMessage(){
- String openId = null;
- openId="oZN0p6z6Ad7D2jBYWjoTqsdj5Q8c";//用户openid
- // 发送模板消息接口
- WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
- // 接收者openid
- .toUser(openId)
- // 模板id
- .templateId("DP_W_VaO6hHvnS02HquweCj3K4765f42SygSJP_ke9w")
- // 模板跳转链接
- // .url("http://www.baidu.com")
- .build();
- // 添加模板数据
- templateMessage.addData(new WxMpTemplateData("first","标题"))
- .addData(new WxMpTemplateData("keyword1", "1"))
- .addData(new WxMpTemplateData("keyword2", "2"))
- .addData(new WxMpTemplateData("keyword3", "3"))
- .addData(new WxMpTemplateData("remark",""));
- String msgId = null;
- try {
- // 发送模板消息
- msgId = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
- } catch (WxErrorException e) {
- e.printStackTrace();
- }finally {
- }
- return null;
- }
注意:上述配置类中获取的token是有时效的所以可以把他放到redis缓存里,这样需要的时候从redis里拿,空的时候再获取放入redis。里面用到的openid为公众号授权获取到的用户id,获取公众号openid方式如下:前端提供code
- String url = String.format("https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code", "wx3453a1546e72ba4e71", "3455435dfhdfhd", code);
- // String url = String.format(拼接的路径, appId, secret, code);
- // 远程调用微信获取openId
- String str = HttpUtils.sendGet(url, null);
- JSONObject json = JSON.parseObject(str);
- String errcode = json.getString("errcode");
- if (errcode != null)
- return AjaxResult.error("调用错误:" + errcode);
- String openid = json.getString("openid");
- if (StringUtil.isEmpty(openid))
- return AjaxResult.error("获取openid错误:" + errcode);
- System.out.println("openid:" + openid);
官方开发文档附上:模板消息 | 微信开放文档 (qq.com)
附:人们常说拼尽全力才活成一个普通人,你又拼出几分。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。