登录微信公众平台

地址 : https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index

申请 appid ,appsecret

设置模板

通过微信公众平台接口调试工具获取token


获取关注公众号用户的openId


![在这里插入图片描述](https://img-blog.csdnimg.cn/a6054c5ce014443cbbb3e1f850f61c34.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAcXFfMzQxMzU2MTU=,size_20,color_FFFFFF,t_70,g_se,x_1

根据接口文档编写代码

接口文档地址: https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Interface.html

/**** 微信公众号配置*/
@Component
@ConfigurationProperties(prefix = "weixin")
@Data
public class WeiXinBase {/**** 公众号appId*/private String  appId;private String appsecret;/**** 消息模板id*/private String templateId;}
/**** 微信请求参数对象*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class WeiXinRequestDTO {private String touser;private String template_id;private String url;private Min miniprogram;private Map<String,Word> data;@Dataclass Min{private String appid;private String pagepath;}@Data@Builder(toBuilder = true)public static class Word{private String value;private String color;}}
/**** 获取微信请求token*/
public class AccessTokenUtil {//token请求地址private static final String TOKEN_URL="https://api.weixin.qq.com/cgi-bin/token";/**** 获取Token* @param appId* @param secret* @return*/public static String getAccessToken(String appId,String secret){Map<String,Object> params = Maps.newHashMap();params.put("grant_type","client_credential");params.put("appid",appId);params.put("secret",secret);return HttpUtil.get(TOKEN_URL,params);}
}
/**** http请求类*/
public class HttpRequestUtil {//请求地址private static String TEMPLATE_URL="https://api.weixin.qq.com/cgi-bin/message/template/send";/**** http post请求* @param t* @param token* @param <T>* @return*/public static  <T> String postJSON(T t,String token){try {HttpResponse execute = HttpUtil.createPost(TEMPLATE_URL + "?access_token=" + token).contentType("application/json").bearerAuth(token).body(new ObjectMapper().writeValueAsString(t)).execute();if(execute.isOk()){return   execute.body();}else {return null;}}catch (Exception e){e.printStackTrace();}return null;}
}
/**** 发送微信模板消息*/
@Service
@Slf4j
public class WeiXinTemplateService {@Resourceprivate RedisTemplate redisTemplate;@Resourceprivate WeiXinBase weiXinBase;private static final String WEIXIN_TOKEN = "wei:xin:token";public String send(String content, String openId) {WeiXinRequestDTO weiXinRequestDTO = WeiXinRequestDTO.builder().template_id(weiXinBase.getTemplateId()).touser(openId).build();Map<String, WeiXinRequestDTO.Word> map = Maps.newHashMap();map.put("head", WeiXinRequestDTO.Word.builder().color("#173177").value("购票信息").build());map.put("passenger", WeiXinRequestDTO.Word.builder().color("#173177").value(content).build());map.put("salseTime", WeiXinRequestDTO.Word.builder().value(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))).color("#173177").build());map.put("departTime", WeiXinRequestDTO.Word.builder().color("#173177").value("2021-09-17 18:30:00").build());map.put("carNo", WeiXinRequestDTO.Word.builder().color("#173177").value("渝A6666").build());map.put("seatNo", WeiXinRequestDTO.Word.builder().color("#173177").value(redisTemplate.opsForValue().increment("seatNo").toString()).build());weiXinRequestDTO.setData(map);String accessToken = null;String json = null;try {if (redisTemplate.hasKey(WEIXIN_TOKEN)) {accessToken = redisTemplate.opsForValue().get(WEIXIN_TOKEN).toString();log.info("从缓存获取token:{}", accessToken);} else {String token = AccessTokenUtil.getAccessToken(weiXinBase.getAppId(), weiXinBase.getAppsecret());JsonNode access_token = new ObjectMapper().readTree(token).get("access_token");accessToken = access_token.asText();redisTemplate.opsForValue().set(WEIXIN_TOKEN, accessToken);}if (StringUtils.isNotBlank(accessToken)) {log.info("token:{}", accessToken);log.info("请求参数:{}", new ObjectMapper().writeValueAsString(weiXinRequestDTO));json = HttpRequestUtil.postJSON(weiXinRequestDTO, accessToken);}} catch (Exception e) {e.printStackTrace();}return json;}
}

java集成微信发送模板消息相关推荐

  1. java 微信发送模板的_微信开发:微信发送模板消息代码示例

    最近一个微信开发的项目里需要发送微信模板消息给卖家或者供应商等,微信开发其实也就按照微信的官方接口要求组装起来即可,下面简单介绍一下我的微信模板发送代码. 1.获取access token,至于acc ...

  2. 微信小程序开发 给微信发送模板消息提示openId无效

    参数我都给好了,也是post的raw方式发送请求, openId是绝对没有问题的. 但就是一直报如下错误 {"errcode":40003,"errmsg":& ...

  3. 微信小程序发送模板消息demo

    一.登陆微信公众号,选中模板消息,添加需要的模板, 二.在 .properties 配置文件中,记录模板ID 三.模板文件配置, -SendTemplateMessageController publ ...

  4. 公众号 接收规则 消息_微信公众平台 发送模板消息(Java接口开发)

    前言:最近一直再弄微信扫码推送图文消息和模板消息发送,感觉学习到了不少东西.今天先总结一下微信公众平台模板消息的发送.因为这个自己弄了很久,开始很多地方不明白,所以今天好好总结一下. 微信公众平台技术 ...

  5. java 模板接口开发_微信公众平台 发送模板消息(Java接口开发)

    前言:最近一直再弄微信扫码推送图文消息和模板消息发送,感觉学习到了不少东西.今天先总结一下微信公众平台模板消息的发送.因为这个自己弄了很久,开始很多地方不明白,所以今天好好总结一下. 微信公众平台技术 ...

  6. java 微信开发收到乱码,微信公众号发送模板消息中文乱码(java)

    使用 restTemplate 发送. /** * 微信模板类 */ @Data public class WeChatTemplate implements Serializable { priva ...

  7. java 微信小程序-发送模板消息

    开发前准备工作 登录微信公众平台-小程序后台,在模板消息里面设置需要发送的模板,拿到模板id. 地址: https://mp.weixin.qq.com 找到微信官方文档-小程序开发-下发小程序和公众 ...

  8. (Java)微信公众号发送模板消息

    模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等.不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息. 1.模板消息调用时主要 ...

  9. java发送微信模板消息_java微信公众平台之发送模板消息

    准备条件: 1.一个测试号,有必要说下的是订阅号没有发送模板消息这一功能,那么开发的小伙伴们就可以直接先注册一个测试号 2.目前我并没有就是做的很完善,网页授权获取openId这个我没做,那么我是直接 ...

最新文章

  1. redis学习(七)jedis客户端
  2. 推荐系统笔记: 基于邻居的协同过滤问题 中的降维
  3. 鸿蒙系统gpl,华为鸿蒙最大的对手现身!谷歌正式推送Fuchsia OS,或替代安卓
  4. ActiveMQ 发送和接收消息
  5. mysql 下载到其他盘中_MYSQL 如果把数据文件保存到其他磁盘里
  6. 实战:自定义脚本启动mysql-mysql 5.6.19
  7. asp.net中前台javascript与c#函数相互调方法
  8. 报表 labview_干货!24个LabVIEW初学者常见问题及解答汇总
  9. vue实现九宫格打地鼠小游戏
  10. java定义一个盒子类box_C++定义一个Box(盒子)类 看完你就知道了
  11. 如何自定义Tomcat 404错误页面
  12. 从后端开发转大数据开发怎么样?
  13. 罗松-东文财-赵栋201771010112罗松《面向对象程序设计(java)》第十四周学习总结...
  14. 《通用数据保护条例》(GDPR)系列解读一:如何判断出海企业是否受GDPR管辖?
  15. Python *和**用法
  16. iloc和loc区别和应用总结
  17. 迅雷离线配合Internet Download Manager下载ED2K链接
  18. Python websocket爬虫
  19. 算法工程师当前选哪个方向好?| 文末送书
  20. 帮我写一个关于erp的prd

热门文章

  1. 【AIML系列-2】人工智能标记语言——初级标签教学
  2. c# Internet时间服务器同步
  3. centos6.3下2T以上大硬盘如何部署和使用
  4. Go语言从控制台读取数据
  5. 服务器 地址 域名 ip ??从输入url地址到客户端见到网页的大致过程,连接好服务器以后将网页挂上去的具体操作
  6. 蚂蚁金服彭翼捷:金融科技不止用来改良 更要用来改变
  7. PaddlePaddle基本用法详解(二)、PaddelPaddle训练水果分类模型
  8. VR虚拟现实购物解决方案
  9. laravel入门教程
  10. 腾讯云CFS挂载问题