赞
踩
微信开发平台:微信公众号开发文档
废话不多说,直接上代码
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"; //应用ID String 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; //整体参数map Map<String, Object> paramMap = new HashMap<String, Object>(); //相关map Map<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_id dataMap2.put("content",content);//要推送的内容 paramMap.put("filter",dataMap1);//用于设定图文消息的接收者 paramMap.put("text", dataMap2);//文本内容 paramMap.put("msgtype","text");//群发的消息类型,图文消息为mpnews,文本消息为text,语音为voice,音乐为music,图片为image,视频为video,卡券为wxcard String 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; //整体参数map Map<String, Object> paramMap = new HashMap<String, Object>(); //相关map Map<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; }
有什么不懂或建议可以直接评论,我会尽快解决
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。