微信开发平台:微信公众号开发文档

废话不多说,直接上代码

1、Controller层调用代码

 /*** 群发消息* @param user* @return*/@RequestMapping(value="/groupMessage",method=RequestMethod.POST,produces ="application/json;charset=utf-8")public JSONObject Message(@RequestBody(required=false)JSONObject obje) {JSONObject result=new JSONObject();logger.info("-----------开始群发------------");String content=obje.getString("content");//群发内容Integer code=wechatMsg.GroupMessage(wechatMsg.getToken(),content);//群发消息if(code==0) {result.put("code",0);result.put("data","群发成功");}else {result.put("code",1201);result.put("data","微信群发消息失败");}return result;}

2、工具类WechatMsg代码,下面以群发文本消息为例,如果是实现群发文本消息(群发其它消息,如图片视频等,请参考微信公众号开发文档),可以直接复制,只需要修改XXX的地方代码就可以了

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.demo.entity.DataEntity;
@Component
public class WechatMsg {    /*** 获取token* * @return token*/public String getToken() {// 授予形式String grant_type = "client_credential";//应用IDString appid = "XXXXXXXXXXXXXXXXXXXXXXXXX";//密钥String secret = "XXXXXXXXXXXXXXXXXXXXXXXXX";// 接口地址拼接参数String getTokenApi = "https://api.weixin.qq.com/cgi-bin/token?grant_type=" + grant_type + "&appid=" + appid+ "&secret=" + secret;String tokenJsonStr = doGetPost(getTokenApi, "GET", null);JSONObject tokenJson = JSONObject.parseObject(tokenJsonStr);String token = tokenJson.get("access_token").toString();System.out.println("获取到的TOKEN : " + token);return token;}/**** 群发文本消息* @param token*/public Integer GroupMessage(String token,String content) {// 接口地址String sendMsgApi = "https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token="+token;     //整体参数mapMap<String, Object> paramMap = new HashMap<String, Object>();//相关mapMap<String, Object> dataMap1 = new HashMap<String, Object>();Map<String, String> dataMap2 = new HashMap<String, String>();dataMap1.put("is_to_all",true);//用于设定是否向全部用户发送,值为true或false,选择true该消息群发给所有用户,选择false可根据tag_id发送给指定群组的用户dataMap1.put("tag_id",1);//群发到的标签的tag_id,参见用户管理中用户分组接口,若is_to_all值为true,可不填写tag_iddataMap2.put("content",content);//要推送的内容paramMap.put("filter",dataMap1);//用于设定图文消息的接收者paramMap.put("text", dataMap2);//文本内容paramMap.put("msgtype","text");//群发的消息类型,图文消息为mpnews,文本消息为text,语音为voice,音乐为music,图片为image,视频为video,卡券为wxcardString back=doGetPost(sendMsgApi,"POST",paramMap);System.out.println("群发返回:"+back);JSONObject jsonObject =JSONObject.parseObject(back);//String转JSONObject,Integer re=jsonObject.getInteger("errcode");return re;}/*** 调用接口 post* @param apiPath*/public String doGetPost(String apiPath,String type,Map<String,Object> paramMap){OutputStreamWriter out = null;InputStream is = null;String result = null;try{URL url = new URL(apiPath);// 创建连接HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setDoOutput(true);connection.setDoInput(true);connection.setUseCaches(false);connection.setInstanceFollowRedirects(true);connection.setRequestMethod(type) ; // 设置请求方式connection.setRequestProperty("Accept", "application/json"); // 设置接收数据的格式connection.setRequestProperty("Content-Type", "application/json"); // 设置发送数据的格式connection.connect();if(type.equals("POST")){out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8"); // utf-8编码out.append(JSON.toJSONString(paramMap));out.flush();out.close();}// 读取响应is = connection.getInputStream();int length = (int) connection.getContentLength();// 获取长度if (length != -1) {byte[] data = new byte[length];byte[] temp = new byte[512];int readLen = 0;int destPos = 0;while ((readLen = is.read(temp)) > 0) {System.arraycopy(temp, 0, data, destPos, readLen);destPos += readLen;}result = new String(data, "UTF-8"); // utf-8编码}} catch (IOException e) {e.printStackTrace();} finally {try {is.close();} catch (IOException e) {e.printStackTrace();}}return  result;}
}

3、如果你的需求是群发,那么到这里就结束了,如果需求是分组发(也就是is_to_all设为false时),需要先获取标签id,可以调用下面方法获取标签id,获取到的标签id填入上面代码中的tag_id变量。注意:下面代码中name的value值不能和公众号中已存在的标签名一样,调用下面代码成功后才能在公众号生成新标签

/*** 调用这个方法获取标签ID后,还要在公众号上给标签添加用户* @param token* @return*/public Integer getTab(String token) {String sendMsgApi = "https://api.weixin.qq.com/cgi-bin/tags/create?access_token="+token;//整体参数mapMap<String, Object> paramMap = new HashMap<String, Object>();//相关mapMap<String, Object> dataMap1 = new HashMap<String, Object>();dataMap1.put("name","test6");//这里写你要创建的标签名paramMap.put("tag",dataMap1);String back=doGetPost(sendMsgApi,"POST",paramMap);System.out.println("请求获取标签接口返回:"+back);JSONObject jsonObject =JSONObject.parseObject(back).getJSONObject("tag");//String转JSONObject,Integer id=-1;//设id初始值为-1,如果最后返回id还是-1,代表获取标签失败if(jsonObject!=null) {id=jsonObject.getInteger("id");}return id;}

有什么不懂或建议可以直接评论,我会尽快解决

java实现微信公众号群发文本消息相关推荐

  1. 微信公众号群发图文消息

    微信公众号群发图文消息 说明:本demo是基于CoffeeWx框架进行编写的,主要是为了以后复习,如有在学习中有疑问,请参考https://gitee.com/skysong/coffeewx-adm ...

  2. java springboot微信公众号接收回复消息和超过5秒被动回复消息

    本次就是记录一下我的开发过程,不是教程,纯属自己做个笔记. 现在项目有个需求,需要用户在公众号发送图片消息的时候,我后台程序能接收到这个图片,并用ai处理图片并返回信息. 1.首先第一步要接收微信消息 ...

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

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

  4. 微信公众号,文本消息带a标签的处理

    公众号内有时候要回复,带链接的文字,要让安卓和苹果微信能识别出来,要注意两点 一.href里面是单引号 <a href='https://www.baidu.com'>点击打开百度< ...

  5. python公众号留言功能_Python实现的微信公众号群发图片与文本消息功能实例详解...

    本文实例讲述了Python实现的微信公众号群发图片与文本消息功能.分享给大家供大家参考,具体如下: 在微信公众号开发中,使用api都要附加access_token内容.因此,首先需要获取access_ ...

  6. python公众号留言功能详情_Python实现的微信公众号群发图片与文本消息功能实例详解...

    本文实例讲述了Python实现的微信公众号群发图片与文本消息功能.分享给大家供大家参考,具体如下: 在微信公众号开发中,使用api都要附加access_token内容.因此,首先需要获取access_ ...

  7. Java开发微信公众号之被动回复用户消息-回复图片消息

    一.前言 hello小伙伴们,大家好,做微信开发两年了,最近看到微信方面的文章阅读量和关注量上升的比较快速,激发了我满满的动力啊,所以就滋生了一个想法,从头开始整理一下微信公众号开发,写一个简易的教程 ...

  8. Java开发微信公众号(四)---微信服务器post消息体的接收及消息的处理

    在前几节文章中我们讲述了微信公众号环境的搭建.如何接入微信公众平台.以及微信服务器请求消息,响应消息,事件消息以及工具处理类的封装:接下来我们重点说一下-微信服务器post消息体的接收及消息的处理,这 ...

  9. C#实现微信公众号群发消息(解决一天只能发一次的限制)

    经过几天研究网上的代码和谢灿大神的帮忙,今天终于用C#实现了微信公众号群发消息,现在整理一下. 总体思路:1.首先必须要在微信公众平台上申请一个公众号. 2.然后进行模拟登陆.(由于我对http传输原 ...

  10. Java微信公众号推送消息

    Java微信公众号推送消息 1.导入pom文件 2.编写yml文件 3.配置文件 4.配置bean 5.service 模板消息主要代码 6.外放接口测试 ==注:== 1.控制台报40164,解决方 ...

最新文章

  1. 虚拟主机传奇服务器,虚拟主机市场迅猛发展 演绎网络产品传奇
  2. golang中的fallthrough
  3. (zz)Sql Server 2005中的架构(Schema)、用户(User)、角色(Role)和登录(Login)(三)
  4. .Net Core中使用Quartz.Net Vue开即用的UI管理
  5. leetcode(85)最大矩形
  6. VIM总结之一:VIM编辑器常用命令详解
  7. 史上最强大的浏览器嗅探
  8. excel和html互相转换,Excel2016与Html格式之间的互相转换
  9. 苹果鼠标右键怎么按_UG经验技巧案例17把UG命令设置到Shift+Ctrl+鼠标的左、中、右三键及右键长、按右键的方法...
  10. 福昕阅读器最新注册方法
  11. HTML计算平均成绩,成绩平均分怎么算
  12. php输出次方,PHP 计算2的N次方代码
  13. 51单片机学习笔记(8)——74HC573锁存器
  14. 阿里的世界版图——“风清扬”的全球梦
  15. 微信小程序——时间轴的实现
  16. linux蓝牙书籍,Linux蓝牙从入门到精通(BR/EDR)Baseband Introduction(一)General Description...
  17. 智能手表短信读取实现(带有eSIM卡,无短信功能,可安装手表QQ的智能手表)
  18. Liferay URL
  19. android go分析和评述,Pathway和GO功能分析及显著性判断
  20. 大气湍流退化图像复原技术研究及DSP实现

热门文章

  1. Atlas500 ROS Ubuntu容器硬件接口及网络映射配置
  2. Windows 10 21H2 版本微软拼音全拼和双拼的快速切换
  3. 获取全国所有省份,市区县的中文名和英文名
  4. 傅里叶变换【2】:傅里叶幅度谱与相位谱
  5. Cardhop for Mac(通讯录管理工具)
  6. NCCN指南下载以后无法复制,粘贴原因及PDF密码破解
  7. 图论,回路,旅行商、邮递员问题。
  8. 移动端UI设计尺寸规范以及iPhone尺寸大小
  9. gg修改器修改内购_GG入门学习第六课:GG的防闪
  10. 智慧城市顶层设计的“二十八”个问题模型(SCLM)