java实现微信模板消息推送

模板消息推送接口:

微信公众平台API链接:

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277

我这里写了模板调用工具类,

java可视情况改为一个方法

附加HTTP的POST调用工具类

根据不同模板拼接不同数据

例如:







一、测试类

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


import com.google.gson.Gson;
import com.phjr.service.huifu.util.HttpClientUtil;


import weixn.Demo;


public class TuiSongTest {


	private static Logger logger = LoggerFactory.getLogger(TuiSongTest.class);


	//微信模板接口
	private final String SEND_TEMPLAYE_MESSAGE_URL ="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";
	
	private final String APPID = "";
	private final String SECRET = "";
	//获取微信ACCESS_TOKEN接口
	private final String aturl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + APPID
	+ "&secret=" + SECRET;
	//openId
	private static  String fromUserName="";
	//模板ID
	private static String template_id="";
	//模板消息详情跳转URL
	private static String url="";
	
	
	public static void main(String[] args) {
		TuiSongTest tuiSongTest = new TuiSongTest();
		
		Demo demo = tuiSongTest.getAccess_token();
		String access_token=demo.getAccess_token();
		
		logger.info("为模板消息接口获取的accessToken是"+access_token);  
		
		WechatTemplate wechatTemplate = new WechatTemplate();  
		wechatTemplate.setTemplate_id(template_id);  
		wechatTemplate.setTouser(fromUserName);  //此处是用户的OpenId
		wechatTemplate.setUrl(url); 
		
             //根据不同模板 拼写不同数据
            Map<String,TemplateData> m = new HashMap<String,TemplateData>();  
TemplateData first = new TemplateData ();   first.setColor("#000000");     first.setValue("您的一位好友完成了注册");     m.put("first", first);   TemplateData keyword1 = new TemplateData();     keyword1.setColor("#000000");     keyword1.setValue("136****1234");     m.put("keyword1", keyword1);      TemplateData keyword2 = new TemplateData();     keyword2.setColor("#000000");     keyword2.setValue("2018-06-10 10:23:00");     m.put("keyword2", keyword2);      TemplateData remark = new TemplateData();     remark.setColor("#000000");     remark.setValue("用户136****1234是您的直接推荐好友");     m.put("remark", remark);   wechatTemplate.setData(m); try {   tuiSongTest.sendTemplateMessage(access_token, wechatTemplate);   } catch (Exception e) {       logger.info("异常"+e.getMessage());   }   } public void sendTemplateMessage(String accessToken, WechatTemplate wechatTemplate) {           String jsonString = new Gson().toJson(wechatTemplate).toString();          String requestUrl = SEND_TEMPLAYE_MESSAGE_URL.replace("ACCESS_TOKEN", accessToken);        logger.info("请求参数",jsonString);     //发送 post请求 发送json数据     String json = HttpClientUtil.sendHttpPostJson(requestUrl, jsonString);           WeiXinResponse weiXinResponse = new Gson().fromJson(json, WeiXinResponse.class);     logger.info("jsonObject="+weiXinResponse);     if (null != weiXinResponse) {           int errorCode = weiXinResponse.getErrcode();            if (0 == errorCode) {               logger.info("模板消息发送成功");           } else {               String errorMsg = weiXinResponse.getErrmsg();             logger.info("模板消息发送失败,错误是 "+errorCode+",错误信息是"+ errorMsg);           }       }   }   public Demo getAccess_token() { try { String access_token = ""; DefaultHttpClient client = new DefaultHttpClient(); HttpGet request = new HttpGet(aturl); HttpResponse response = client.execute(request); String httpGet = HttpClientUtil.sendHttpGet(aturl); Gson gson=new Gson(); Demo jsonResult=new Demo (); if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { String strResult = EntityUtils.toString(response.getEntity());      System.out.println("get请求结果:" + strResult);         System.out.println("结果回调" +response.getStatusLine().getStatusCode() );          jsonResult = gson.fromJson(strResult, Demo.class); access_token = jsonResult.getAccess_token(); String expires_in =jsonResult.getExpires_in(); logger.info("access_token{}:  expires_in{}:",access_token,expires_in); } return jsonResult; } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } }

以下是相关实体

public class Demo {

	private String access_token;
	
	private String expires_in;

	public String getAccess_token() {
		return access_token;
	}

	public void setAccess_token(String access_token) {
		this.access_token = access_token;
	}

	public String getExpires_in() {
		return expires_in;
	}

	public void setExpires_in(String expires_in) {
		this.expires_in = expires_in;
	}
	
	
}
import java.util.Map;

public class WechatTemplate {

	
	private String touser;
	
	private String template_id;
	
	private String 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;
	}
	
	
	
}

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

public class WeiXinResponse {

	private Integer  errcode;
	
	private String errmsg;
	
	private String 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 String getMsgid() {
		return msgid;
	}

	public void setMsgid(String msgid) {
		this.msgid = msgid;
	}
	
	
	
}


附加HttpClient工具类

 /**
     * 发送 post请求 发送json数据
     * 
     * @param httpUrl
     *            地址
     * @param paramsJson
     *            参数(格式 json)
     * 
     */
    public static String sendHttpPostJson(String httpUrl, String paramsJson) {
        HttpPost httpPost = new HttpPost(httpUrl);// 创建httpPost
        try {
            // 设置参数
            if (paramsJson != null && paramsJson.trim().length() > 0) {
                StringEntity stringEntity = new StringEntity(paramsJson, "UTF-8");
                stringEntity.setContentType(CONTENT_TYPE_JSON_URL);
                httpPost.setEntity(stringEntity);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return sendHttpPost(httpPost);
    }
    
 /**
     * 发送Post请求
     * 
     * @param httpPost
     * @return
     */
    private static String sendHttpPost(HttpPost httpPost) {

        CloseableHttpClient httpClient = null;
        CloseableHttpResponse response = null;
        // 响应内容
        String responseContent = null;
        try {
            // 创建默认的httpClient实例.
            httpClient = getHttpClient();
            // 配置请求信息
            httpPost.setConfig(requestConfig);
            // 执行请求
            response = httpClient.execute(httpPost);
            // 得到响应实例
            HttpEntity entity = response.getEntity();

 
            // 判断响应状态
            if (response.getStatusLine().getStatusCode() >= 300) {
                throw new Exception(
                        "HTTP Request is not success, Response code is " + response.getStatusLine().getStatusCode());
            }

            if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) {
                responseContent = EntityUtils.toString(entity, CHARSET_UTF_8);
                EntityUtils.consume(entity);
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // 释放资源
                if (response != null) {
                    response.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return responseContent;
    }




猜你喜欢

转载自blog.csdn.net/qq_38973841/article/details/80280521