公众号Java开发记录(五)发送模板消息"/>
微信公众号Java开发记录(五)发送模板消息
文章目录
- 一、设置所属行业
- 二、获取设置的行业信息
- 三、发送模板消息
- 1.设置消息模板
- 2.创建参数对象
- 1.整体参数
- 2.First参数
- 3.keyword参数
- 4.remark参数
- 3.封装参数,转化json
- 4.发送模板消息
微信公众平台_模板消息
一、设置所属行业
设置行业可在微信公众平台后台完成,每月可修改行业1次,帐号仅可使用所属行业中相关的模板,为方便第三方开发者,提供通过接口调用的方式来修改账号所属行业,具体如下:
接口调用请求说明
http请求方式: POST =ACCESS_TOKEN
POST数据说明
POST数据示例如下:
{
“industry_id1”:“1”,
“industry_id2”:“4”
}
参数说明:
参数 是否必须 说明
access_token 是 接口调用凭证
industry_id1 是 公众号模板消息所属行业编号
industry_id2 是 公众号模板消息所属行业编号
设置成功。
代码:
@Testpublic void test9(){//获取你自己的ACCESS_TOKENString redisToken = wxService.getRedisToken();String Url = "=ACCESS_TOKEN";String access_token = Url.replace("ACCESS_TOKEN", redisToken);String data="{\n" +" \"industry_id1\":\"1\",\n" +" \"industry_id2\":\"5\"\n" +"}";StringBuffer sb = null;try {
// 建立连接URL url = new URL(access_token);HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();httpUrlConn.setDoInput(true);httpUrlConn.setDoOutput(true);httpUrlConn.setRequestMethod("POST");//设置请求头 //设置参数类型是json格式httpUrlConn.setRequestProperty("Content-Type", "application/json;charset=utf-8");//httpUrlConn.connect(); 可要 可不要BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(httpUrlConn.getOutputStream(), "UTF-8"));writer.write(data);writer.close();// 获取输入流InputStream inputStream = httpUrlConn.getInputStream();InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");BufferedReader bufferedReader = new BufferedReader(inputStreamReader);// 读取返回结果sb = new StringBuffer();String str = null;while ((str = bufferedReader.readLine()) != null) {sb.append(str);}// 释放资源bufferedReader.close();inputStreamReader.close();inputStream.close();httpUrlConn.disconnect();} catch (Exception e) {e.printStackTrace();}System.out.println(sb);}
二、获取设置的行业信息
获取设置的行业信息
获取帐号设置的行业信息。可登录微信公众平台,在公众号后台中查看行业信息。为方便第三方开发者,提供通过接口调用的方式来获取帐号所设置的行业信息,具体如下:
接口调用请求说明
http请求方式:GET =ACCESS_TOKEN
参数说明
参数 是否必须 说明
access_token 是 接口调用凭证
返回说明
正确调用后的返回示例:
{
“primary_industry”:{“first_class”:“运输与仓储”,“second_class”:“快递”},
“secondary_industry”:{“first_class”:“IT科技”,“second_class”:“互联网|电子商务”}
}
返回参数说明
参数 是否必填 说明
access_token 是 接口调用凭证
primary_industry 是 帐号设置的主营行业
secondary_industry 是 帐号设置的副营行业
代码:
/*** 获取设置的行业信息* 获取帐号设置的行业信息。可登录微信公众平台,在公众号后台中查看行业信息。为方便第三方开发者,提供通过接口调用的方式来获取帐号所设置的行业信息,具体如下:* 接口调用请求说明* http请求方式:GET =ACCESS_TOKEN*/@Testpublic void test10(){String redisToken = wxService.getRedisToken();String Url = "=ACCESS_TOKEN";String url = Url.replace("ACCESS_TOKEN", redisToken);httpClient(url, "Get", null);}public String httpClient(String Url,String RequestMethod,String data){StringBuffer sb = null;try {
// 建立连接URL url = new URL(Url);HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();httpUrlConn.setDoInput(true);httpUrlConn.setDoOutput(true);String s = RequestMethod.toUpperCase();httpUrlConn.setRequestMethod(s);httpUrlConn.setRequestProperty("Content-Type", "application/json;charset=utf-8");if ("GET".equalsIgnoreCase(RequestMethod)){httpUrlConn.connect();}else {//设置请求头 //设置参数类型是json格式//httpUrlConn.connect(); 可要 可不要BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(httpUrlConn.getOutputStream(), "UTF-8"));writer.write(data);writer.close();// 获取输入流}InputStream inputStream = httpUrlConn.getInputStream();InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");BufferedReader bufferedReader = new BufferedReader(inputStreamReader);// 读取返回结果sb = new StringBuffer();String str = null;while ((str = bufferedReader.readLine()) != null) {sb.append(str);}// 释放资源bufferedReader.close();inputStreamReader.close();inputStream.close();httpUrlConn.disconnect();} catch (Exception e) {e.printStackTrace();}System.out.println(sb);return sb.toString();}
三、发送模板消息
1.设置消息模板
参数实例:
{"touser":"OPENID","template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY","url":"", "miniprogram":{"appid":"xiaochengxuappid12345","pagepath":"index?foo=bar"}, "data":{"first": {"value":"恭喜你购买成功!","color":"#173177"},"keyword1":{"value":"巧克力","color":"#173177"},"keyword2": {"value":"39.8元","color":"#173177"},"keyword3": {"value":"2014年9月22日","color":"#173177"},"remark":{"value":"欢迎再次购买!","color":"#173177"}}}
注:url和miniprogram都是非必填字段,若都不传则模板无跳转;若都传,会优先跳转至小程序。开发者可根据实际需要选择其中一种跳转方式即可。当用户的微信客户端版本不支持跳小程序时,将会跳转至url。
返回码说明
在调用模板消息接口后,会返回JSON数据包。正常时的返回JSON数据包示例:
{
“errcode”:0,
“errmsg”:“ok”,
“msgid”:200228332
}
注意:在模版消息发送任务完成后,微信服务器会将是否送达成功作为通知,发送到开发者中心中填写的服务器配置地址中。
2.创建参数对象
构建模板参数对象,然后将对象一步一步转成JSON形式。
1.整体参数
package com.wx.model.templatemessage;import lombok.Data;/*** @author :LiuShihao* @date :Created in 2020/10/12 2:00 下午* @desc :*/
@Data
public class WxTemplateMessage {private String touser;private String template_id ;private String url;private String miniprogram;private String data;public WxTemplateMessage(String touser ,String template_id, String url,String data){this.touser = touser;this.template_id = template_id;this.url = url;this.data = data;}public WxTemplateMessage(){}
}
2.First参数
package com.wx.model.templatemessage;import lombok.Data;/*** @author :LiuShihao* @date :Created in 2020/10/12 2:55 下午* @desc :*/
@Data
public class First {private String value;private String color;public First(String value,String color){this.value = value;this.color = color;}
}
3.keyword参数
package com.wx.model.templatemessage;import lombok.Data;/*** @author :LiuShihao* @date :Created in 2020/10/12 2:55 下午* @desc :订单商品*/
@Data
public class Keyworld {private String value;private String color;public Keyworld(String value,String color){this.value = value;this.color = color;}public Keyworld(){}
}
4.remark参数
package com.wx.model.templatemessage;import lombok.Data;/*** @author :LiuShihao* @date :Created in 2020/10/12 2:56 下午* @desc :*/
@Data
public class Remark {private String value;private String color;public Remark(String value,String color){this.value = value;this.color = color;}}
由于Miniprogram没有用到该参数,所以省略,
3.封装参数,转化json
pom依赖
<!-- .sf.json-lib/json-lib --><dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.4</version><classifier>jdk15</classifier></dependency>
First first = new First("尊敬的用户,恭喜您订购成功!","#173177");//订单商品Keyworld keyword1 = new Keyworld("iPhone 12 Pro Max 256G 海军蓝","#173177");//订单编号Keyworld keyword2 = new Keyworld("202010140315325205","#173177");//支付金额Keyworld keyword3 = new Keyworld("1299.00$","#173177");//支付时间Keyworld keyword4 = new Keyworld("2020年10月14日 03:15:32","#173177");Remark remark = new Remark("祝您生活愉快!","#173177");//将data参数对象 转化成json 这里使用的是net.sf.json-lib 使用阿里巴巴的fastjson也是可以的JSONObject first1 = JSONObject.fromObject(first);JSONObject keyword11 = JSONObject.fromObject(keyword1);JSONObject keyword21 = JSONObject.fromObject(keyword2);JSONObject keyword31 = JSONObject.fromObject(keyword3);JSONObject keyword41 = JSONObject.fromObject(keyword4);JSONObject remark1 = JSONObject.fromObject(remark);//构造进 data参数JSONObject templateData2 = new JSONObject();templateData2.put("first",first1);templateData2.put("keyword1",keyword11);templateData2.put("keyword2",keyword21);templateData2.put("keyword3",keyword31);templateData2.put("keyword4",keyword41);templateData2.put("remark",remark1);WxTemplateMessage wxTemplateMessage1 = new WxTemplateMessage(openID, "JIMtRhfmeks-H3f0dn_P0wcnBnqiTPIxl7uahiZqvHI", "/",null);//将请求参数对象 转化成 JSONJSONObject msgData = JSONObject.fromObject(wxTemplateMessage1);msgData.put("data",templateData2.toString());System.out.println(msgData);
4.发送模板消息
public String httpClient(String Url,String RequestMethod,String data){StringBuffer sb = null;try {
// 建立连接URL url = new URL(Url);HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();httpUrlConn.setDoInput(true);httpUrlConn.setDoOutput(true);String s = RequestMethod.toUpperCase();httpUrlConn.setRequestMethod(s);httpUrlConn.setRequestProperty("Content-Type", "application/json;charset=utf-8");if ("GET".equalsIgnoreCase(RequestMethod)){httpUrlConn.connect();}else {//设置请求头 //设置参数类型是json格式//httpUrlConn.connect(); 可要 可不要BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(httpUrlConn.getOutputStream(), "UTF-8"));writer.write(data);writer.close();// 获取输入流}InputStream inputStream = httpUrlConn.getInputStream();InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");BufferedReader bufferedReader = new BufferedReader(inputStreamReader);// 读取返回结果sb = new StringBuffer();String str = null;while ((str = bufferedReader.readLine()) != null) {sb.append(str);}// 释放资源bufferedReader.close();inputStreamReader.close();inputStream.close();httpUrlConn.disconnect();} catch (Exception e) {e.printStackTrace();}System.out.println(sb);return sb.toString();}@Test
public void test11(){//获得AccessTokenString redisToken = wxService.getRedisToken();String openID = "oCV_T6HEG-hy1-cZrp1aaK7NwmuI****";String url = "=ACCESS_TOKEN";String access_token = url.replace("ACCESS_TOKEN", redisToken);String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss"));String serialNumber = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))+(Math.random()*100000+"").substring(0,4);First first = new First("尊敬的用户,恭喜您订购成功!","#173177");//构造data参数对象//订单商品Keyworld keyword1 = new Keyworld("iPhone 12 Pro Max 256G 海军蓝","#173177");//订单编号Keyworld keyword2 = new Keyworld("202010140315325205","#173177");//支付金额Keyworld keyword3 = new Keyworld("1299.00$","#173177");//支付时间Keyworld keyword4 = new Keyworld("2020年10月14日 03:15:32","#173177");Remark remark = new Remark("祝您生活愉快!","#173177");//将data参数对象 转化成jsonJSONObject first1 = JSONObject.fromObject(first);JSONObject keyword11 = JSONObject.fromObject(keyword1);JSONObject keyword21 = JSONObject.fromObject(keyword2);JSONObject keyword31 = JSONObject.fromObject(keyword3);JSONObject keyword41 = JSONObject.fromObject(keyword4);JSONObject remark1 = JSONObject.fromObject(remark);//构造进 data参数JSONObject templateData2 = new JSONObject();templateData2.put("first",first1);templateData2.put("keyword1",keyword11);templateData2.put("keyword2",keyword21);templateData2.put("keyword3",keyword31);templateData2.put("keyword4",keyword41);templateData2.put("remark",remark1);//构造 请求参数对象WxTemplateMessage wxTemplateMessage1 = new WxTemplateMessage(openID, "JIMtRhfmeks-H3f0dn_P0wcnBnqiTPIxl7uahiZqvHI", "/",null);//将请求参数对象 转化成 JSONJSONObject msgData = JSONObject.fromObject(wxTemplateMessage1);msgData.put("data",templateData2.toString());System.out.println(msgData);httpClient(access_token, "POST", msgData.toString());}
更多推荐
微信公众号Java开发记录(五)发送模板消息
发布评论