zoukankan      html  css  js  c++  java
  • Java开发微信公众号模板消息【同步|异步】

    第一步:申请模板消息功能并添加模板

    在微信公众平台找到你需要的模板,并添加上即可;

    第二步:添加功能模块后开始开发

     

    功能中使用的类及代码:

    发送数据主实体类:

    Template.java
    package com.wfcm.wxUitls;
    
    import org.apache.commons.lang.StringUtils;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Template {
    
        // 消息接收方
        private String toUser;
        // 模板id
        private String templateId;
        // 模板消息详情链接
        private String url;
        // 消息顶部的颜色
        private String topColor;
        // 参数列表
        private List<TemplateParam> templateParamList;
        //省略getter、setter方法
    
        //按微信接口要求格式化模板
        public String toJSON() {
            StringBuffer buffer = new StringBuffer();
            buffer.append("{");
            buffer.append(String.format(""touser":"%s"", this.toUser)).append(",");
            buffer.append(String.format(""template_id":"%s"", this.templateId)).append(",");
            buffer.append(String.format(""url":"%s"", this.url)).append(",");
            buffer.append(String.format(""topcolor":"%s"", this.topColor)).append(",");
            buffer.append(""data":{");
            TemplateParam param = null;
            for (int i = 0; i < this.templateParamList.size(); i++) {
                param = templateParamList.get(i);
                // 判断是否追加逗号
                if (i < this.templateParamList.size() - 1){
    
                    buffer.append(String.format(""%s": {"value":"%s","color":"%s"},", param.getName(), param.getValue(), param.getColor()));
                }else{
                    buffer.append(String.format(""%s": {"value":"%s","color":"%s"}", param.getName(), param.getValue(), param.getColor()));
                }
    
            }
            buffer.append("}");
            buffer.append("}");
            return buffer.toString();
        }
    
        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 String getTopColor() {
            return topColor;
        }
    
        public void setTopColor(String topColor) {
            this.topColor = topColor;
        }
    
        public List<TemplateParam> getTemplateParamList() {
            return templateParamList;
        }
    
        public void setTemplateParamList(List<TemplateParam> templateParamList) {
            this.templateParamList = templateParamList;
        }
    }
    View Code

    TemplateParam.java
    package com.wfcm.wxUitls;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class TemplateParam {
    
        private String name;
        private String value;
        private String color;
    
        public TemplateParam(String name, String value, String color) {
            this.name = name;
            this.value = value;
            this.color = color;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getValue() {
            return value;
        }
    
        public void setValue(String value) {
            this.value = value;
        }
    
        public String getColor() {
            return color;
        }
    
        public void setColor(String color) {
            this.color = color;
        }
    }
    View Code

    HttpUtil.java
    package com.wfcm.utils;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.io.UnsupportedEncodingException;
    import java.net.ConnectException;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLEncoder;
    import java.util.List;
    import java.util.Map;
    
    import javax.net.ssl.HttpsURLConnection;
    import javax.net.ssl.SSLContext;
    import javax.net.ssl.SSLSocketFactory;
    import javax.net.ssl.TrustManager;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    import org.apache.commons.io.IOUtils;
    
    
    
    public class HttpUtil {
        /**
         * 向指定 URL 发送POST方法的请求
         *
         * @param url   发送请求的 URL
         * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
         * @return 所代表远程资源的响应结果
         */
        public static String sendPost(String url, String param) {
            PrintWriter out = null;
            BufferedReader in = null;
            String result = "";
            try {
                URL realUrl = new URL(url);
                // 打开和URL之间的连接
                HttpURLConnection conn = (HttpURLConnection) realUrl
                        .openConnection();
                // 设置通用的请求属性
                conn.setRequestProperty("accept", "*/*");
                conn.setRequestProperty("connection", "Keep-Alive");
                conn.setRequestProperty("user-agent",
                        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
                // 发送POST请求必须设置如下两行
                conn.setDoOutput(true);
                conn.setDoInput(true);
                // 获取URLConnection对象对应的输出流
                out = new PrintWriter(conn.getOutputStream());
                // 发送请求参数
                out.print(param);
                // flush输出流的缓冲
                out.flush();
                // 定义BufferedReader输入流来读取URL的响应
                in = new BufferedReader(new InputStreamReader(
                        conn.getInputStream(), "utf-8"));
                String line;
                while ((line = in.readLine()) != null) {
                    result += line;
                }
            } catch (Exception e) {
                System.out.println("发送 POST 请求出现异常!" + e);
                e.printStackTrace();
            }
            // 使用finally块来关闭输出流、输入流
            finally {
                try {
                    if (out != null) {
                        out.close();
                    }
                    if (in != null) {
                        in.close();
                    }
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
            return result;
        }
    }
    View Code

     Demo : 其中accessToken 如何获取就不详细讲了。

    @Test
        public void test(String tplId,String openId) {
    //      String tplId = "Z7CfpaavOr7JT5MMH98IvXzpn4A0bJbguKSQYMEh5Iw";
    //      String openId = "oBkmD01XLbYdT";
            Template tem=new Template();
            tem.setTemplateId(tplId);
            tem.setTopColor("#ffab17");
    
            List<TemplateParam> paras=new ArrayList<TemplateParam>();
            paras.add(new TemplateParam("first","您好,恭喜您成功购买商品","#ffab17"));
            paras.add(new TemplateParam("keyword1","支付金额200","#ffab17"));
            paras.add(new TemplateParam("keyword2", "小学语文","#ffab17"));
            paras.add(new TemplateParam("keyword2", "1234567890","#ffab17"));
            paras.add(new TemplateParam("remark","先到先得!!!点击立即学习","#ffab17"));
            tem.setTemplateParamList(paras);
            tem.setToUser(openId);//用户openid
            //设置超链接
            tem.setUrl("https://newwf.wfkids.net/#/?1553247181");
    
            JSONObject jsonObject = sendTemplateMsg(tem);
            log.info("结果:"+jsonObject);
            System.out.println("结果:"+jsonObject);
        }
    
    
    public JSONObject  sendTemplateMsg(Template template){
            //获取token
            String token = "20_ZQvOMFYGY_uGeis_edeAD-U-yd2opdxxxxxx";
                    log.info("wxAccessToken:"+token);
            String requestUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";
            requestUrl=requestUrl.replace("ACCESS_TOKEN", token);
            if (log.isDebugEnabled()) {
                log.debug(template.toJSON());
            }
            //发送模板消息,返回json格式结果
            log.info("json:"+ template.toJSON());
            String r = HttpUtil.sendPost(requestUrl, template.toJSON());
            JSONObject jsonObject= FastJSONUtils.getJSONObject(r);
    
            return jsonObject;
        }
  • 相关阅读:
    网页的状态掩码
    分享到JavaScript
    右下角收缩广告
    播放列表的收缩展开
    创建文本节点createTextNode
    创建元素节点createElement
    进栈和出栈
    刚刚上班才回来,今天和你说说hash数组
    关于JS中的定时器!!!
    面向对象(程序员最呆的地方,一切皆是对象)
  • 原文地址:https://www.cnblogs.com/hero123/p/10725860.html
Copyright © 2011-2022 走看看