文章目录
微信公众平台_模板消息
一、设置所属行业
设置行业可在微信公众平台后台完成,每月可修改行业1次,帐号仅可使用所属行业中相关的模板,为方便第三方开发者,提供通过接口调用的方式来修改账号所属行业,具体如下:
接口调用请求说明
http请求方式: POST https://api.weixin.qq.com/cgi-bin/template/api_set_industry?access_token=ACCESS_TOKEN
POST数据说明
POST数据示例如下:
{
“industry_id1”:“1”,
“industry_id2”:“4”
}
参数说明:
参数 是否必须 说明
access_token 是 接口调用凭证
industry_id1 是 公众号模板消息所属行业编号
industry_id2 是 公众号模板消息所属行业编号
设置成功。
代码:
@Test
public void test9(){
//获取你自己的ACCESS_TOKEN
String redisToken = wxService.getRedisToken();
String Url = "https://api.weixin.qq.com/cgi-bin/template/api_set_industry?access_token=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 https://api.weixin.qq.com/cgi-bin/template/get_industry?access_token=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 https://api.weixin.qq.com/cgi-bin/template/get_industry?access_token=ACCESS_TOKEN
*/
@Test
public void test10(){
String redisToken = wxService.getRedisToken();
String Url = "https://api.weixin.qq.com/cgi-bin/template/get_industry?access_token=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":"http://weixin.qq.com/download",
"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依赖
<!-- https://mvnrepository.com/artifact/net.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", "https://www.apple.com/cn/",null);
//将请求参数对象 转化成 JSON
JSONObject 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(){
//获得AccessToken
String redisToken = wxService.getRedisToken();
String openID = "oCV_T6HEG-hy1-cZrp1aaK7NwmuI****";
String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=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参数对象 转化成json
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", "https://www.apple.com/cn/",null);
//将请求参数对象 转化成 JSON
JSONObject msgData = JSONObject.fromObject(wxTemplateMessage1);
msgData.put("data",templateData2.toString());
System.out.println(msgData);
httpClient(access_token, "POST", msgData.toString());
}