JAVA微信公众号网页开发——发送模板消息

 

 

TemplateData.java
package com.weixin.weixin.template;

public class TemplateData {
    private String value;  //值
    private String color;  //展示的颜色

    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;
    }
}

  

 

WechatTemplate.java
package com.weixin.weixin.template;

import java.util.Map;

public class WechatTemplate {
    private String touser; //接收人

    private String template_id;  //模板id

    private String url;  //跳转的url

    private Map<String, TemplateData> data; //内容中的参数数据

    public String getTouser() {
        return touser;
    }

    public void setTouser(String touser) {
        this.touser = touser;
    }

    public String getTemplate_id() {
        return template_id;
    }

    public void setTemplate_id(String template_id) {
        this.template_id = template_id;
    }

    public String getUrl() {
        return url;
    }

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

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

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

  

控制器类

templateMsgAct.java
package com.weixin.weixin.template;

import com.weixin.weixin.template.TemplateData;
import com.weixin.weixin.template.WechatTemplate;
import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.HttpResponseException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.IOException;
import java.net.URI;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.HashMap;
import java.util.Map;

@Controller
public class templateMsgAct {

    /**
     * 发送模板消息
     *官方文档地址:https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Interface.html#5
     */
    @RequestMapping("/send_template_msg.do")
    public void sendTemplateMsg() {
        String token = getToken();//获取access_token
        String createMenuUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send"; //微信提供的发送接口地址
        String url = createMenuUrl + "?access_token=" + token;

        //封装模板消息数据内容
        try {

            WechatTemplate wechatTemplate = new WechatTemplate();
            //模板id
            wechatTemplate.setTemplate_id("pYD-hJo7VwjQkoLXAcPeU3MCF18FoumTK-x_m1ignN0");
            //接收人的openid
            wechatTemplate.setTouser("okE7QwU7QRCBqBxTqHppYmRHPvP0");
            Map<String, TemplateData> mapdata = new HashMap<String, TemplateData>();
            // 封装模板数据
            TemplateData first = new TemplateData();
            first.setValue("{{first.DATA}}");
            first.setColor("#173177");
            mapdata.put("first", first);

            TemplateData keyword1 = new TemplateData();
            keyword1.setValue("{{keyword1.DATA}}");
            first.setColor("#173177");
            mapdata.put("keyword1", keyword1);

            TemplateData keyword2 = new TemplateData();
            keyword2.setValue("{{keyword2.DATA}}");
            first.setColor("#173177");
            mapdata.put("keyword2", keyword2);

            TemplateData keyword3 = new TemplateData();
            keyword3.setValue("{{keyword3.DATA}}");
            keyword3.setColor("#173177");
            mapdata.put("keyword3", keyword3);

            TemplateData remark = new TemplateData();
            remark.setValue("{{remark.DATA}}");
            remark.setColor("#173177");
            mapdata.put("remark", remark);

            wechatTemplate.setData(mapdata);
            net.sf.json.JSONObject object= net.sf.json.JSONObject.fromObject(wechatTemplate);

            post(url, object.toString(), "application/json");

        } catch (Exception e) {
            e.printStackTrace();
        }

    }


    private String post(String url, String json, String contentType) {
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        //HttpClient
        CloseableHttpClient client = httpClientBuilder.build();
        client = (CloseableHttpClient) wrapClient(client);
        HttpPost post = new HttpPost(url);
        try {
            StringEntity s = new StringEntity(json, "utf-8");
            if (StringUtils.isBlank(contentType)) {
                s.setContentType("application/json");
            }
            s.setContentType(contentType);
            post.setEntity(s);
            HttpResponse res = client.execute(post);
            HttpEntity entity = res.getEntity();
            String str = EntityUtils.toString(entity, "utf-8");
            return str;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    private String filterCharacters(String txt) {
        if (StringUtils.isNotBlank(txt)) {
            txt = txt.replace("“", "“").replace("”", "”").replace(" ", " ");
        }
        return txt;
    }

    private static HttpClient wrapClient(HttpClient base) {
        try {
            SSLContext ctx = SSLContext.getInstance("TLSv1");
            X509TrustManager tm = new X509TrustManager() {
                public void checkClientTrusted(X509Certificate[] xcs,
                                               String string) throws CertificateException {
                }

                public void checkServerTrusted(X509Certificate[] xcs,
                                               String string) throws CertificateException {
                }

                public X509Certificate[] getAcceptedIssuers() {
                    return null;
                }
            };
            ctx.init(null, new TrustManager[]{tm}, null);
            SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(ctx, new String[]{"TLSv1"}, null,
                    SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
            CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
            return httpclient;

        } catch (Exception ex) {
            return null;
        }
    }

    public class CharsetHandler implements ResponseHandler<String> {
        private String charset;

        public CharsetHandler(String charset) {
            this.charset = charset;
        }

        public String handleResponse(HttpResponse response)
                throws ClientProtocolException, IOException {
            StatusLine statusLine = response.getStatusLine();
            if (statusLine.getStatusCode() >= 300) {
                throw new HttpResponseException(statusLine.getStatusCode(),
                        statusLine.getReasonPhrase());
            }
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                if (!StringUtils.isBlank(charset)) {
                    return EntityUtils.toString(entity, charset);
                } else {
                    return EntityUtils.toString(entity);
                }
            } else {
                return null;
            }
        }
    }

    /**
     * 获取access_token
     * @return
     */
    public String getToken() {
        String tokenGetUrl="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential";//微信提供获取access_token接口地址
        String appid="";
        String secret="";

        System.out.println("~~~~~appid:"+appid);
        System.out.println("~~~~~secret:"+secret);
        JSONObject tokenJson=new JSONObject();
        if(StringUtils.isNotBlank(appid)&&StringUtils.isNotBlank(secret)){
            tokenGetUrl+="&appid="+appid+"&secret="+secret;
            tokenJson=getUrlResponse(tokenGetUrl);
            System.out.println("~~~~~tokenJson:"+tokenJson.toString());
            try {
                return (String) tokenJson.get("access_token");
            } catch (JSONException e) {
                System.out.println("报错了");
                return null;
            }
        }else{
            System.out.println("appid和secret为空");
            return null;
        }
    }

    private  JSONObject getUrlResponse(String url){
        CharsetHandler handler = new CharsetHandler("UTF-8");
        try {
            HttpGet httpget = new HttpGet(new URI(url));
            HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
            //HttpClient
            CloseableHttpClient client = httpClientBuilder.build();
            client = (CloseableHttpClient) wrapClient(client);
            return new JSONObject(client.execute(httpget, handler));
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

}

  

JAVA微信公众号网页开发——发送模板消息

上一篇:浅谈微信转发分享功能


下一篇:微信小程序(总体认识于实用)