(感谢好多老哥提供的文档,哈哈,这里我就只是代码贴出来,方便以后copy)

1获取token

String token = Wechat.getAccess_token(appId, appSecret).getString("access_token");
    public static JSONObject getAccess_token(String appId, String appSecret) {String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" + appSecret;String accessToken = null;JSONObject jsonObj = null;try {URL urlGet = new URL(url);HttpURLConnection http = (HttpURLConnection) urlGet.openConnection();http.setRequestMethod("GET"); // 必须是get方式请求http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");http.setDoOutput(true);http.setDoInput(true);http.connect();InputStream is = http.getInputStream();int size = is.available();byte[] jsonBytes = new byte[size];is.read(jsonBytes);accessToken = new String(jsonBytes, "UTF-8");System.err.println(accessToken);jsonObj = JSONObject.parseObject(accessToken);is.close();} catch (Exception e) {e.printStackTrace();}return jsonObj;}

2调用service层发消息模板

TemplateMessageService.sendTemp(appId, token, appSecret, entity.realAmount, tenantEntity.name, memberEntity.wechatOpenId);

3进入该模板后会调用httputil类,发送消息

package com.mall.common.services;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.mall.common.utils.HttpSend;
import com.mall.common.utils.HttpUtil;import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;public class TemplateMessageService {public static void sendTemp(String appid, String accessToken, String appSecret, Double realAmount, String shopName, String openId) {String url = "https://api.weixin.qq.com/cgi-bin/token";String param = "grant_type=client_credential" + "&appid=" + appid + "&secret=" + appSecret;String accTemp = HttpSend.sendGet(url, param);JSONObject jsonObject = JSONObject.parseObject(accTemp);System.out.println("1--->" + jsonObject);accessToken = jsonObject.getString("access_token"); // 获取到了access_token,调用接口都要用到的,有时效// 封装要发送的jsonMap<String, Object> map = new HashMap();map.put("touser", openId);//你要发送给某个用户的openid 前提是已关注该公众号,该openid是对应该公众号的,不是普通的openidmap.put("template_id", "VkxwzizOa2YS_M2RQbVQHPHzHTbabAqLvqU5FNFqQVs");//模板消息id//map.put("url","https://www.vipkes.cn");//用户点击模板消息,要跳转的地址// 封装miniprogram 跳转小程序用,不跳不要填Map<String, String> mapA = new HashMap<>();mapA.put("appid", ""); //小程序appidmapA.put("pagepath", ""); //小程序页面pagepathmap.put("miniprogram", mapA);// 以下就是根据模板消息的格式封装好,我模板的是:问题反馈结果通知  可以和我一样试试// 封装firstMap firstMap = new HashMap();firstMap.put("value", "新的消费通知!"); //内容firstMap.put("color", "#173177"); //字体颜色// 封装keyword1 提交的问题Map keyword1Map = new HashMap();keyword1Map.put("value", shopName);keyword1Map.put("color", "#fff");// 封装keyword2此处也可以是商品名Map keyword2Map = new HashMap();keyword2Map.put("value", "-");keyword2Map.put("color", "#fff");// 封装keyword2此处可以是商品价格Map keyword3Map = new HashMap();keyword3Map.put("value", realAmount + "元");keyword3Map.put("color", "#fff");// 封装keyword4// 封装remarkDate date = new Date();SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Map keyword4Map = new HashMap();keyword4Map.put("value", simpleDateFormat.format(date));keyword4Map.put("color", "#fff");Map remarkMap = new HashMap();remarkMap.put("value", "尊敬的用户,您于" + simpleDateFormat.format(date) + "在" + shopName + "消费了" + realAmount + "元");remarkMap.put("color", "#fff");// 封装dataMap dataMap = new HashMap();dataMap.put("first", firstMap);dataMap.put("keyword1", keyword1Map);dataMap.put("keyword2", keyword2Map);dataMap.put("keyword3", keyword3Map);dataMap.put("keyword4", keyword4Map);dataMap.put("remark", remarkMap);map.put("data", dataMap);String r = HttpUtil.getJsonData(JSONObject.parseObject(JSON.toJSONString(map)), "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken); //发送模板消息,这里有个工具类,我给你哟System.out.println("-->" + r);}public static void sendTempPoint(String appid, String accessToken, String appSecret, Integer Id, String name, String mobile, Double amount, String wechatOpenId) {String url = "https://api.weixin.qq.com/cgi-bin/token";String param = "grant_type=client_credential" + "&appid=" + appid + "&secret=" + appSecret;String accTemp = HttpSend.sendGet(url, param);JSONObject jsonObject = JSONObject.parseObject(accTemp);System.out.println("1--->" + jsonObject);accessToken = jsonObject.getString("access_token"); // 获取到了access_token,调用接口都要用到的,有时效// 封装要发送的jsonMap<String, Object> map = new HashMap();map.put("touser", wechatOpenId);//你要发送给某个用户的openid 前提是已关注该公众号,该openid是对应该公众号的,不是普通的openidmap.put("template_id", "672dPs0Jwl9zLvhVrncI0nyEHxX3Mx-fPNLBcIEb05A");//模板消息id//map.put("url","https://www.vipkes.cn");//用户点击模板消息,要跳转的地址// 封装miniprogram 跳转小程序用,不跳不要填Map<String, String> mapA = new HashMap<>();mapA.put("appid", ""); //小程序appidmapA.put("pagepath", ""); //小程序页面pagepathmap.put("miniprogram", mapA);// 以下就是根据模板消息的格式封装好,我模板的是:问题反馈结果通知  可以和我一样试试// 封装firstMap firstMap = new HashMap();firstMap.put("value", "会员积分消费提醒!"); //内容firstMap.put("color", "#173177"); //字体颜色String newname;try {newname = (java.net.URLDecoder.decode(name, "UTF-8"));} catch (UnsupportedEncodingException e) {newname = name;}// 封装keyword1 提交的问题Map XM = new HashMap();XM.put("value", newname);XM.put("color", "#fff");// 封装keyword2此处也可以是商品名Map KH = new HashMap();KH.put("value", Id);KH.put("color", "#fff");Date date = new Date();SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 封装keyword3此处可以是商品价格Map CONTENTS = new HashMap();CONTENTS.put("value", "尊敬的用户,您的账户于" + simpleDateFormat.format(date) + "增加了" + amount + "积分");CONTENTS.put("color", "#fff");Map remarkMap = new HashMap();remarkMap.put("value", "消息惠顾");remarkMap.put("color", "#fff");// 封装dataMap dataMap = new HashMap();dataMap.put("first", firstMap);dataMap.put("XM", XM);dataMap.put("KH", KH);dataMap.put("CONTENTS", CONTENTS);dataMap.put("remark", remarkMap);map.put("data", dataMap);String r = HttpUtil.getJsonData(JSONObject.parseObject(JSON.toJSONString(map)), "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken); //发送模板消息,这里有个工具类,我给你哟System.out.println("-->" + r);}}

4发送消息

package com.mall.common.utils;import com.alibaba.fastjson.JSONObject;import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;public class HttpUtil {public static String getJsonData(JSONObject jsonParam, String urls) {StringBuffer sb = new StringBuffer();try {// 创建url资源URL url = new URL(urls);// 建立http连接HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 设置允许输出conn.setDoOutput(true);// 设置允许输入conn.setDoInput(true);// 设置不用缓存conn.setUseCaches(false);// 设置传递方式conn.setRequestMethod("POST");// 设置维持长连接conn.setRequestProperty("Connection", "Keep-Alive");// 设置文件字符集:conn.setRequestProperty("Charset", "UTF-8");// 转换为字节数组byte[] data = (jsonParam.toString()).getBytes();// 设置文件长度conn.setRequestProperty("Content-Length", String.valueOf(data.length));// 设置文件类型:conn.setRequestProperty("contentType", "application/json");// 开始连接请求conn.connect();//OutputStream out = new DataOutputStream(conn.getOutputStream()) ;//防止消息乱码OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream(), "utf-8");// 写入请求的字符串out.write(jsonParam.toString());out.flush();out.close();System.out.println(conn.getResponseCode());// 请求返回的状态if (HttpURLConnection.HTTP_OK == conn.getResponseCode()) {System.out.println("连接成功");// 请求返回的数据InputStream in1 = conn.getInputStream();try {String readLine = new String();BufferedReader responseReader = new BufferedReader(new InputStreamReader(in1, "UTF-8"));while ((readLine = responseReader.readLine()) != null) {sb.append(readLine).append("\n");}responseReader.close();System.out.println(sb.toString());} catch (Exception e1) {e1.printStackTrace();}} else {System.out.println("error++");}} catch (Exception e) {}return sb.toString();}/*** @auther: cxl* @Description 发送post请求  参数String* @date: 2019/4/28 19:38*/public static String post(String jsonParam, String urls) {StringBuffer sb = new StringBuffer();try {// 创建url资源URL url = new URL(urls);// 建立http连接HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 设置允许输出conn.setDoOutput(true);// 设置允许输入conn.setDoInput(true);// 设置不用缓存conn.setUseCaches(false);// 设置传递方式conn.setRequestMethod("POST");// 设置维持长连接conn.setRequestProperty("Connection", "Keep-Alive");// 设置文件字符集:conn.setRequestProperty("Charset", "UTF-8");// 转换为字节数组//byte[] data = (jsonParam.toString()).getBytes();// 设置文件长度// conn.setRequestProperty("Content-Length", String.valueOf(data.length));// 设置文件类型:conn.setRequestProperty("contentType", "application/text");// 开始连接请求conn.connect();//防止消息乱码OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream(), "utf-8");// 写入请求的字符串out.write(jsonParam.toString());out.flush();out.close();System.out.println(conn.getResponseCode());// 请求返回的状态if (HttpURLConnection.HTTP_OK == conn.getResponseCode()) {System.out.println("连接成功");// 请求返回的数据InputStream in1 = conn.getInputStream();try {String readLine = new String();BufferedReader responseReader = new BufferedReader(new InputStreamReader(in1, "UTF-8"));while ((readLine = responseReader.readLine()) != null) {sb.append(readLine).append("\n");}responseReader.close();System.out.println(sb.toString());} catch (Exception e1) {e1.printStackTrace();}} else {System.out.println("error++");}} catch (Exception e) {e.printStackTrace();}return sb.toString();}}

5以下问题是之后出的问题

此处如果不写utf-8本地postman测试不一定会乱码 ,上传线上有几率乱码,我遇到了,被骂死,哈哈,其他的真没什么问题,openid是他们提供的,我不太清楚,然后千万别乱给微信公众号,他们给错公众号害得我一直显示未关注公众号,擦,说了他们不信

通过java实现微信公众号发送微信消息相关推荐

  1. springboot微信公众号发送模板消息

    springboot微信公众号发送模板消息 1.准备工作 申请你所需要模板 配置ip白名单(你所需要部署的服务器ip) 2.编写模板消息的请求参数封装类 import java.util.HashMa ...

  2. 微信公众号 发送模板消息和获取关注公众号人数

    微信公众号发送模板消息 1.创建模板,拿到模板ID 2.创建发送消息工具类 import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JS ...

  3. php 微信模板消息url,【求助】php 微信公众号 发送模板消息改变不了颜色

    php 微信公众号 发送模板消息改变不了颜色 不知道为什么 1.模板消息内容: 2.发送的模板消息效果: 序列化的模板消息内容如下: 大家可以测试下,touser需要另外添加下 a:4:{s:11:& ...

  4. php之微信公众号发送模板消息

    讲一下开发项目中微信公众号发送模板消息的实现过程(我用的还是Thinkphp5.0).先看一下效果,如图: 就是类似于这样的,下面讲一下实现过程: 第一步:微信公众号申请模板消息权限: 立即申请: 申 ...

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

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

  6. 使用微信公众号发送模板消息

    使用微信公众号 API 本文所有内容均使用微信公众号测试号平台来演示 打开公众平台的测试号管理页面后我们可以在页面中看到测试号的信息 图中的 appId 和 appSecret 就是我们需要用到的 图 ...

  7. .Net Core 3.1实现微信公众号发送模板消息,且跳转微信小程序

    .Net Core 3.1开发微信相关 背景 微信公众号和小程序关联 微信小程序获取UnionId及OpenId 微信公众号获取UnionId及OpenId 背景 公司需要将内部产品的审批放到微信小程 ...

  8. tp5微信公众号发送模板消息

    ``话不多说直接贴代码(公众号设置模板id看官方文档 ) <?php namespace app\admin\controller; use think\Controller; use thin ...

  9. 微信公众号发送模版消息

    在我们购买商品或其他操作的时候,这时候微信公众号会推送相关模版消息.接下来简单介绍开发流程:(本文以订单推送为例) 测试号新建模版消息 格式如下: {{first.DATA}} 用户名:{{keywo ...

最新文章

  1. 该项研究降低了使用大脑信号控制机器人手臂的位置误差
  2. JAVA _构造函数
  3. 在Windows 2000下优化Oracle9i性能[转]
  4. webpack指南-webpack入门-webpack的安装
  5. 硬核Redis总结,看这篇就够了!
  6. 怎么把一个Java应用打包成Docker镜像
  7. 惊,Java 字符串拼接竟然有这么多玩法!| CSDN 原力计划
  8. mysql python2_Python 16.2 使用MySQL
  9. 用jsp的mvc模式的新闻发布系统_【利元亨 | 新品】柯马智能柔性激光焊接站震撼发布...
  10. JavaScript高级程序设计学习笔记(一)
  11. 新式汉语拼音使用方法及相关数据,用与交流编程只能用英语字母的环境使用
  12. macos 下 vmware fusion 安装 vmware tools
  13. [RK3399][Android7.1] 调试笔记 --- HDMI输出没有音频信号
  14. 如何查看windows凭据管理器-windows 凭据 里保存的密码
  15. 使用@Vaild或@Validated正则校验以及常用正则
  16. linux 修改文件夹和子文件夹权限,Linux下设置文件夹以及子文件夹中所有文件权限...
  17. 事件监听 ActionListener
  18. Mysql 计算两个时间差函数
  19. 深入理解Android Crash 流程
  20. jsp 实现查询功能

热门文章

  1. 拍卖小程序直播功能扩展之翻转摄像头、美颜
  2. java中 toast的意思,英语:toast意思
  3. 使用mediasoup-demo搭建多人音视频聊天室
  4. 大学物理第十三章复习笔记:波动光学基础
  5. php写商城,小白学习使用Thinkphp5写一个商城项目
  6. ZedBoard的初步学习-通信设置
  7. EDA软件常用3D库站点
  8. JSON字符串转换为JSON对象 互转函数
  9. HTML表单事件,获取焦点时、失去焦点时、即将获取焦点时、即将失去焦点时、输入值时、选取文本时、表单元素的内容改变时、提交时....
  10. 单板硬件设计和软件测试,单板硬件调试与单元测试方案(报告)模板.doc