zoukankan      html  css  js  c++  java
  • springboot 使用微信测试号 给用户发送模板消息

    1. 首先获得微信的tokenID

    package com.txj.bwbd.common.wechat.task;
     
    import com.txj.bwbd.constraint.WeixinConstants;
    import com.txj.bwbd.utils.WeChatCommonUtil;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component;
     
    @Component
    public class WeChatAccessTokenTask {
        Logger logger = LoggerFactory.getLogger(WeChatAccessTokenTask.class);
     
        @Autowired
        private WeChatCommonUtil weChatCommonUtil;
    
        public static String token;
     
        // 第一次延迟1秒执行,当执行完后7100秒再执行
        @Scheduled(initialDelay = 1000, fixedDelay = 7100*1000 )
    //    @Scheduled(initialDelay = 1000, fixedDelay = 7100*1000 )
        public void WeChatAccessToken(){
            try {
                token = weChatCommonUtil.getToken(WeixinConstants.APPID, WeixinConstants.APPSECRET).getAccess_token();
                logger.info("获取到的微信access_token为"+token);
            } catch (Exception e) {
                logger.error("获取微信access_toke出错,信息如下");
                e.printStackTrace();
            }
        }
     
    }
    package com.txj.bwbd.utils;
     
    import cn.hutool.http.HttpUtil;
    import com.alibaba.fastjson.JSONObject;
    import com.txj.bwbd.common.wechat.entity.AccessToken;
    import com.txj.bwbd.constraint.WeixinConstants;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Component;
     
    @Component
    public class WeChatCommonUtil {
    
        Logger logger = LoggerFactory.getLogger(WeChatCommonUtil.class);
    
        // 获取access_token的接口地址(GET) 限2000(次/天)
        private static String url = WeixinConstants.ACCESS_TOKEN_URL;
     
        public AccessToken getToken(String appid, String appsecret){
    
            AccessToken token;
            //访问微信服务器的地址
            String requestUrl=url.replace("APPID", appid).replace("APPSECRET", appsecret);
            //HttpRequestUtil httpRequestUtil=new HttpRequestUtil();
            //创建一个json对象
            String responseStr = HttpUtil.get(requestUrl);
            System.out.println("获取到的String格式的Response为:"+responseStr);
            //判断返回字符串是否为空
            if (responseStr != null) {
                token = JSONObject.parseObject(responseStr, AccessToken.class);
            } else {
                token = null;
                // 获取token失败
                logger.error("获取token失败 errcode:{} errmsg:{}");
            }
            return token;
        }
    }

    2.组装微信模板消息访问参数 调用微信发送模板消息接口

        /**
         * post请求,发送消息
         */
        @RequestMapping(value = "/sendTemplateMessage", method = RequestMethod.POST)
        public String sendTemplateMessage() {
            WeChatTemplate weChatTemplate = new WeChatTemplate();
            weChatTemplate.setTouser("o_Fm8s4563xOZfB05FYpS2IJmRHI");
            weChatTemplate.setTemplate_id("TVNSDJdRNWEHQLMdLWWUcw-6gadxI1tBNeNaK0x40RE");
            Map<String, TemplateData> dataMap = new HashMap<>();
            dataMap.put("first", new TemplateData("这是第一", "#173177"));
            dataMap.put("keynote1", new TemplateData("这是第一", "#173177"));
            dataMap.put("keynote2", new TemplateData("这是第一", "#173177"));
            dataMap.put("keynote3", new TemplateData("这是第一", "#173177"));
            dataMap.put("remark", new TemplateData("这是第一", "#173177"));
            weChatTemplate.setData(dataMap);
    
            WeixinResponse weixinResponse = templateMessageService
                    .sendTemplateMessage(WeChatAccessTokenTask.token, weChatTemplate);
    
            return "success";
        }
    package com.txj.bwbd.common.wechat.service;
    
    import com.txj.bwbd.common.wechat.entity.WeChatTemplate;
    import com.txj.bwbd.common.wechat.entity.WeixinResponse;
    
    public interface TemplateMessageService {
    
        WeixinResponse sendTemplateMessage(String accessToken, WeChatTemplate wechatTemplate);
    
    }
    package com.txj.bwbd.common.wechat.service.impl;
    
    import com.txj.bwbd.common.wechat.entity.WeChatTemplate;
    import com.txj.bwbd.common.wechat.entity.WeixinResponse;
    import com.txj.bwbd.common.wechat.service.TemplateMessageService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.web.client.RestTemplate;
    
    import java.util.HashMap;
    
    @Service
    public class TemplateMessageServiceImpl implements TemplateMessageService {
    
    
        private RestTemplate restTemplate = new RestTemplate();
    
        private String serviceHost = "https://api.weixin.qq.com";
    
        @Override
        public WeixinResponse sendTemplateMessage(String accessToken, WeChatTemplate weChatTemplate) {
            WeixinResponse weixinResponse = null;
            String url = new StringBuffer(serviceHost).append("/cgi-bin/message/template/send?access_token=")
                    .append(accessToken).toString();
            weixinResponse = restTemplate.postForObject(url, weChatTemplate, WeixinResponse.class, new HashMap<String, String>());
            return weixinResponse;
        }
    
    }

    使用到的实体对象:

    package com.txj.bwbd.common.wechat.entity;
    
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    @Data
    @NoArgsConstructor
    public class TemplateData {
    
        private String value;
        private String color;
    
        public TemplateData(String value, String color) {
            this.value = value;
            this.color = color;
        }
    }
    package com.txj.bwbd.common.wechat.entity;
    
    import lombok.Data;
    
    import java.util.Map;
    
    @Data
    public class WeChatTemplate {
    
        private String touser;
    
        private String template_id;
    
        private String url;
    
        private Map<String, TemplateData> data;
        
    }
    package com.txj.bwbd.common.wechat.entity;
    
    import lombok.Data;
    
    @Data
    public class WeixinResponse {
        private String msgid;
        private int errcode;
        private String errmsg;
    
        @Override
        public String toString() {
            StringBuffer buf = new StringBuffer("WeixinResponse[msgid=");
            buf.append(msgid)
                    .append(",errcode=").append(errcode)
                    .append(",errmsg=").append(errmsg)
                    .append("]");
            return buf.toString();
        }
    
    }

    使用idea httpCilent调用接口 

  • 相关阅读:
    向量杂谈
    对widget使用WM_SetCallback
    群延迟与广义线性相位
    采样的频域表示
    Oracle 表的连接方式(2)-----HASH JOIN的基本机制1
    Oracle 表的连接方式(1)-----Nested loop join和 Sort merge join
    Oracle 表的访问方式(2)-----索引扫描
    Oracle 表的访问方式(1) ---全表扫描、通过ROWID访问表
    11g RAC R2 之Linux DNS 配置
    11g RAC r2 的启停命令概述1
  • 原文地址:https://www.cnblogs.com/guanxiaohe/p/13323583.html
Copyright © 2011-2022 走看看