Springboot集成微信公众号模板通知java

先看效果

1、微信模板消息官方文档

  微信公众平台

2、申请微信公众平台接口测试账号

       微信公众平台

3、创建3个实体

(1)、ConfigBean

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

/**
 * @Configuration 相当于 spring中的 application.xml
 * 参考文章:https://blog.csdn.net/PotatoWatermelon/article/details/125487951
 * 解决 'org.springframework.web.client.RestTemplate' that could not be found. 的问题
 */
@Configuration
public class ConfigBean {

    @Bean
    RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

(2)、WeChatTemplate 

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)、WeiXinResponse

/**
 * 参数配置表 WeiXinResponse
 *
 */
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.fastjson2.JSONObject;
import com.ruoyi.thirdpart.domain.WeChatTemplate;
import com.ruoyi.thirdpart.domain.WeiXinResponse;
import com.ruoyi.thirdpart.service.IWxOAuthchatService;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

/**
 * 模板通知 业务层处理
 */
@Service
public class WxOAuthServiceImpl implements IWxOAuthchatService
{

    @Resource
    private RestTemplate restTemplate;

    @Override
    public void sendMessage(String accessToken) throws IOException {
        WeChatTemplate weChatTemplate = new WeChatTemplate();
        // 设置模板id
        weChatTemplate.setTemplateId("5Ag_P7K_C-iPxxxx");

        // 设置接收用户openId,这里填接收者的openid
        weChatTemplate.setToUser("owte76Js8Gexxxxxxxx");
        //点击详情跳转的地址
        weChatTemplate.setUrl("");

        /**
         * 设置模板data参数
         * {{keyword1.DATA}}
         */
        weChatTemplate.getData().put("time3", WeChatTemplate.initData("2022-10-23 14:23:26","#459ae9"));//申请时间
        weChatTemplate.getData().put("thing1", WeChatTemplate.initData("张三","#459ae9"));//客户姓名
        weChatTemplate.getData().put("remark", WeChatTemplate.initData("如遇错误,请往当地社区服务中心进行解决。感谢您的使用!","#383838"));


        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 (result.getErrcode() == 0){;
                System.out.println("==========成功"+result);
            }else{
                System.out.println("==========发送失败");
            }
        }else{
            System.out.println("==========失败");
        }


    }


    /**
     * 获取getAccessToken
     * @return
     */
    @Override
    public String getAccessToken() throws IOException {
        try {
            String appid = "xxxxxxx";//填写公众号的appid
            String secret = "xxxxxxxxxxx";//填写公众号的开发者密码(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;
        }
    }
}

参数对应

5、调用层

@Autowired
    private IWxOAuthchatService wxOAuthServiceImpl;

    /**
     * 微信 公众号 模板通知
     */
    @GetMapping("/getAccessToken")
    public AjaxResult getAccessToken() throws IOException
    {
        AjaxResult ajax = AjaxResult.success();
        String token = wxOAuthServiceImpl.getAccessToken();
        ajax.put(AjaxResult.DATA_TAG, token);
        return ajax;
    }

    /**
     * 微信 公众号 模板通知
     */
    @GetMapping("/sendMessage")
    public AjaxResult sendMessage(HttpServletRequest request) throws IOException
    {
        AjaxResult ajax = AjaxResult.success();
        String token = request.getParameter("token");
        wxOAuthServiceImpl.sendMessage(token);
        return ajax;
    }

 6、其他

import java.io.IOException;

/**
 * 模板通知 业务层
 * 
 * @author ruoyi
 */
public interface IWxOAuthchatService
{
    void sendMessage(String accessCode) throws IOException;

    String getAccessToken() throws  IOException;
}

7、实现效果

8、参考文章

https://www.cnblogs.com/guduershi/p/13385293.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值