微信开发---微信模板消息发送

           刚开始做这个模板消息开发的时候参考了很多大神的博客,讲解的也是比较的详细,但是在工具类这一块都没有详细的说,因为开发的经验少,对这些常用的工具类不是很了解,所以走了很多的弯路,所以今天把整个的详细流程贴上来,给和我一样的初学者一个参考。

1  模板消息由于模板选取不同需要传入参数的名称、值、参数个数也不同首先要封装2个实体

package com.Model;
import java.util.List;
public class Template {
	// 消息接收方  
    private String toUser;  
    // 模板id  
    private String templateId;  
    // 模板消息详情链接  
    private String url;  
    // 消息顶部的颜色  
    private String topColor;  
    // 参数列表  
    private List<TemplateParam> templateParamList;  
  
    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 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 List<TemplateParam> getTemplateParamList() {  
        return templateParamList;  
    }  
  
    public void setTemplateParamList(List<TemplateParam> templateParamList) {  
        this.templateParamList = templateParamList;  
    }  

}
这一块中最重要的是对数据的json处理,我也是完全拷贝的

package com.Model;
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;  
    }  
}
2、这是消息发送的代码
	public @ResponseBody Map<String, Object> classremind(HttpServletRequest request,Model model){
		Map<String, Object> map=new HashMap<>();
		Template tem=new Template();  
		tem.setTemplateId("");//消息模板的id
		tem.setTopColor("#00DD00");  
		tem.setToUser(user.getOpenid());//接收人的openid  
		tem.setUrl("");  		          
		List<TemplateParam> paras=new ArrayList<TemplateParam>();  
		paras.add(new TemplateParam("first","消息内容","#FF3333"));  
		paras.add(new TemplateParam("keyword1","对应的模板中的消息","#0044BB"));  
		paras.add(new TemplateParam("keyword2","对应的模板的消息","#0044BB"));  
		paras.add(new TemplateParam("Remark","请准时收听直播课程!","#AAAAAA"));  		          
		tem.setTemplateParamList(paras);
		String token=GlobalConstant.access_token;\\根据你们自己的方法获取token
		String requestUrl="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";
		requestUrl=requestUrl.replace("ACCESS_TOKEN", token);
		JSONObject jsonResult=Util.httpsRequest(requestUrl, "POST", tem.toJSON());
           if(jsonResult!=null){  
            int errorCode=jsonResult.getInteger("errcode");  
            String errorMessage=jsonResult.getString("errmsg");  
            if(errorCode==0){  
                map.put("status",0); 
            }else{  
                log.info("模板消息发送失败:"+errorCode+","+errorMessage);  
                map.put("status", 1);
                map.put("info", "提醒失败,请稍候再试!");
            }  
        }
		return map;
	}
4、这一部分是我耗时最多的部分工具类

package com.util;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ConnectException;
import java.net.URL;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;  
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.fastjson.JSONObject;
import com.yiwangjiankang.Controller.ZhiboController;
public class Util {
	
	private static Logger log = LoggerFactory.getLogger(ZhiBoUtil.class);
public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) {     
        JSONObject jsonObject = null;
        try {
            // 创建 SSLContext 对象,并使用我们指定的信任管理器初始化
            TrustManager[] tm = { new MyX509TrustManager() };
            SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
            sslContext.init(null, tm, new java.security.SecureRandom());
            // 从上述 SSLContext 对象中得到 SSLSocketFactory 对象
            SSLSocketFactory ssf = sslContext.getSocketFactory();
            URL url = new URL(requestUrl);
            HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
            conn.setSSLSocketFactory(ssf);      
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setUseCaches(false);    
            // 设置请求方式(GET/POST)
            conn.setRequestMethod(requestMethod);
            // 当 outputStr 不为 null 时,向输出流写数据
            if (null != outputStr) {
                OutputStream outputStream = conn.getOutputStream();
                // 注意编码格式
                outputStream.write(outputStr.getBytes("UTF-8"));
                outputStream.close();
            }
            // 从输入流读取返回内容
            InputStream inputStream = conn.getInputStream();
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String str = null;
            StringBuffer buffer = new StringBuffer();
            while ((str = bufferedReader.readLine()) != null) {
                buffer.append(str);
            }
            // 释放资源
            bufferedReader.close();
            inputStreamReader.close();
            inputStream.close();
            inputStream = null;
            conn.disconnect();
            jsonObject = JSONObject.parseObject(buffer.toString());
        } catch (ConnectException ce) {
            log.error(" 连接超时:{}", ce);
        } catch (Exception e) {
            log.error("https 请求异常:{}", e);
        }   
        return jsonObject;
    }
}
\\这个MyX509TrustManager()是一个接口,自己必须添加一个实现类才可以直接使用,如下
class MyX509TrustManager implements X509TrustManager {  
    public void checkClientTrusted(X509Certificate[] chain, String authType)  
            throws CertificateException  
          {  
          }  
          public void checkServerTrusted(X509Certificate[] chain, String authType)  
            throws CertificateException  
          {  
          }  
          public X509Certificate[] getAcceptedIssuers()  
          {  
            return null;  
          }  
}  
            完整的就是这样了,里面可能掺杂了一些我自己工程里面的代码,希望能对大家有所帮助!有问题也希望和大家多多交流



   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值