微信公众号Java开发记录(五)发送模板消息


微信公众平台_模板消息

一、设置所属行业

设置行业可在微信公众平台后台完成,每月可修改行业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());

}

猜你喜欢

转载自blog.csdn.net/DreamsArchitects/article/details/109022468