springboot微信公众号发送模板消息

springboot微信公众号发送模板消息

注意:

1. 公众号模板消息新规的出台,原有的模板消息营销功能大大削弱,主要包含以下几个方面的限制:
(1)去除自定义颜色、表情符号;
(2)去除尾部/备注内容;
(3)去除首行内容;
(4)中间的主内容中,单个字段内容不超过20个字,且不支持换行
2. 公众号后去除了原来从模板库中添加模板消息功能,目前新规定只能配置了类目后才能从类目模板库中去添加模板消息。并且只能添加对应类目的模板消息!!!
3. 如果需要定制的模板消息需要审核,不过限制太多通过率不高。

1、准备工作

设置公众号类目信息
一个公众号可以设置5个类目,按照公众号服务类目中的要求提供对应的证件。设置类目后只能申请对应类目的模板消息模板,选择好需要用到的类目。
在这里插入图片描述
配置模板消息
”从类目模板库中添加“进行模板选择页面,可输入关键字进行选择模板。
选择好模板后进去模板详情,点击选择关键词库字段,如果是常量则需要你列举出所有的情况(工作人员审核通过后才能使用,建议选择不需要审核的字段)。之后填写这个模板的场景说明并点击添加即可完成模板的选择
在这里插入图片描述

配置ip白名单(你所需要部署的服务器ip)
通过开发者ID及密码调用获取access_token接口时,需要设置访问来源IP为白名单。不配置可能会获取access_token失败
在这里插入图片描述

2、编写模板消息的请求参数封装类

import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonProperty;


public class WeChatTemplate {
    @JsonProperty("touser")
    private String toUser;

    @JsonProperty("template_id")
    private String templateId;

    private String url;

    private Map<String,String> miniprogram;

    private Map<String, Map<String, String>> data = new HashMap<>();

    public static Map<String, String> initData(String value, String color) {
        HashMap<String, String> data = new HashMap<String, String>();
        data.put("value", value);
        data.put("color", color);
        return data;
    }

    public String getToUser() {
        return toUser;
    }

    public void setToUser(String toUser) {
        this.toUser = toUser;
    }

    public String getTemplateId() {
        return templateId;
    }

    public void setTemplateId(String templateId) {
        this.templateId = templateId;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public Map<String, String> getMiniprogram() {
        return miniprogram;
    }

    public void setMiniprogram(Map<String, String> miniprogram) {
        this.miniprogram = miniprogram;
    }

    public Map<String, Map<String, String>> getData() {
        return data;
    }

    public void setData(Map<String, Map<String, String>> data) {
        this.data = data;
    }
}

3、编写模板消息的返回参数封装类


public class WeiXinResponse {
    private Integer errcode;
    private String errmsg;
    private Long msgid;

    public Integer getErrcode() {
        return errcode;
    }

    public void setErrcode(Integer errcode) {
        this.errcode = errcode;
    }

    public String getErrmsg() {
        return errmsg;
    }

    public void setErrmsg(String errmsg) {
        this.errmsg = errmsg;
    }

    public Long getMsgid() {
        return msgid;
    }

    public void setMsgid(Long msgid) {
        this.msgid = msgid;
    }
}

4、编写发送微信模板消息接口

import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Objects;

/**
 * 通过openid当发消息
 */
@RestController
@CrossOrigin
@RequestMapping("/wechat")
public class WeChatMessage {

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping("/sendWxMessage")
    public void sendMessage() throws IOException {
        WeChatTemplate weChatTemplate = new WeChatTemplate();
        // 设置模板id
        weChatTemplate.setTemplateId("oWabUeRpqRGVWr2eJJaQn_t9GDqesvrtPQJSDPuDsrw");

        // 设置接收用户openId,这里填接收者的openid
        weChatTemplate.setToUser("");
        //点击详情跳转的地址
        weChatTemplate.setUrl("");
       
        /**
       	* 设置模板dada参数
        * {{keyword1.DATA}}
        */
        weChatTemplate.getData().put("first", WeChatTemplate.initData("10月水费缴费成功","#459ae9"));
        weChatTemplate.getData().put("keyword1", WeChatTemplate.initData("105.3元","#459ae9"));//缴费金额
        weChatTemplate.getData().put("keyword2", WeChatTemplate.initData("10月用水付费(用水:96.5吨)","#459ae9"));//项目
        weChatTemplate.getData().put("keyword3", WeChatTemplate.initData("张三","#459ae9"));//用户姓名
        weChatTemplate.getData().put("keyword4", WeChatTemplate.initData("编A3345-01","#459ae9"));//用户编号
        weChatTemplate.getData().put("keyword5", WeChatTemplate.initData("测试","#459ae9"));//收费机构
        weChatTemplate.getData().put("remark", WeChatTemplate.initData("如遇错误,请往当地社区服务中心进行解决。感谢您的使用!","#383838"));

        String accessToken = this.getAccessToken();
		
		if(accessToken != null){
			// 发送消息的接口
	        String pust_message_url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=%s";
	
	        //调用微信接口,发送模板消息
	        WeiXinResponse result = restTemplate.postForObject(String.format(pust_message_url, accessToken),
	                weChatTemplate, WeiXinResponse.class);
	        if (weiXinResponse.getErrcode() == 0){;
	            System.out.println("==========成功"+result);
	        }else{
	            System.out.println("==========发送失败");
	        }
		}else{
			System.out.println("==========失败");
		}
        

    }


    /**
     * 获取getAccessToken
     * @return
     */
    public String getAccessToken() throws IOException {
		try {
	        String appid = "";//填写公众号的appid
	        String secret = "";//填写公众号的开发者密码(AppSecret)
	        String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+secret;
	
	        StringBuilder json = new StringBuilder();
	        URL oracle = new URL(url);
	        URLConnection yc = oracle.openConnection();
	        BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream(), "UTF-8"));
	        String inputLine = null;
	        while ((inputLine = in.readLine()) != null) {
	            json.append(inputLine);
	        }
	        in.close();
	        JSONObject object = (JSONObject) JSONObject.parse(String.valueOf(json));
	        String access_token = object.getString("access_token");
			
			if (access_token  != null) {
		        System.out.println("=====access_token========"+access_token+"=============");
		        return access_token;
	        }
	        return null;
        } catch (Exception e) {
            //log.error("获取accessToken异常" + e.getMessage());
            return null;
        }
    }


}

将项目部署到所填写的ip白名单的服务器运行项目

效果图

在这里插入图片描述

需要用到的pom.xml

<!--json-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.50</version>
            <scope>compile</scope>
        </dependency>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值