第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > java对接微信公众号 根据模板发送消息

java对接微信公众号 根据模板发送消息

时间:2021-09-28 18:51:56

相关推荐

java对接微信公众号 根据模板发送消息

一.首先你得创建一个公众号,完成公众号的基本配置

1、服务器地址(URL):必须以http://或https://开头,分别支持80端口和443端口。这个URL是很重要的,需要响应微信发送的token验证

2、令牌(Token):必须为英文或数字,长度为3-32字符。上面说过做验证的

3、消息加解密密钥:可以直接随机生成

4、消息加解密方式:明文、兼容、安全 看业务需求选择:我觉得明文省事点(个人见解)

5、详解微信开发文档:https://developers./doc/offiaccount/Getting_Started/Overview.html

二.微信参数说明

三.获取公众号对应微信用户的openId

四.template_id:模板Id

五.进行开发

1.首先准备好所需的实体类与需要传输的参数

ConstantUtil:存放公众号开发者app_id,公众号开发者密码app_secret,模板messageTemplate,获取token的url.

public class ConstantUtil {// 公众号开发者APPID public final static String app_id = "";//openidpublic final static String open_id = "";// 公众号开发者密码 public final static String app_secret = "";//获取token的urlpublic final static String sendtemplateUrl = "https://api./cgi-bin/message/template/send?access_token=ACCESS_TOKEN";//消息模版信息public final static String messageTemplate = "";}

Token

public class Token {// 接口访问凭证private String accessToken;// 凭证有效期,单位:秒private int expiresIn;public String getAccessToken() {return accessToken;}public void setAccessToken(String accessToken) {this.accessToken = accessToken;}public int getExpiresIn() {return expiresIn;}public void setExpiresIn(int expiresIn) {this.expiresIn = expiresIn;}}

TemplateData

public class TemplateData {private String value;private String color;public TemplateData(String value, String color){this.value = value;this.color = color;}/*** @return the value*/public String getValue() {return value;}/*** @param value the value to set*/public void setValue(String value) {this.value = value;}/*** @return the color*/public String getColor() {return color;}/*** @param color the color to set*/public void setColor(String color) {this.color = color;}}

2.开发

填充发送数据

Map<String, TemplateData> param = new HashMap<>();param.put("first",new TemplateData("您有一条班次信息需要处理,请及时查阅!","#696969"));param.put("keyword1",new TemplateData("班级创建审核","#696969"));SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");String dateString = formatter.format(new Date());param.put("keyword2",new TemplateData(dateString,"#696969"));param.put("remark",new TemplateData("如果您已经处理,请忽略此消息","#696969"));List<String> openIdList = new ArrayList<String>();String openId = ConstantUtil.open_id;openIdList.add(openId);jwBjSendWxinfoService.senTempMsg(openIdList,ConstantUtil.messageTemplate,param);

senTempMsg

/*** 发送微信* @param openIdList* @param templatId* @param param* @return*/public String senTempMsg(List<String> openIdList, String templatId, Map<String, TemplateData> param){String strRet = "0";if(null != openIdList && openIdList.size() >0 ){String access_token = CommonUtil.getToken(ConstantUtil.app_id, ConstantUtil.app_secret).getAccessToken();for(int i = 0;i< openIdList.size();i++){String openId = openIdList.get(i);// 绑定了微信并且关注了服务号的用户 , 注册成功-推送注册短信JSON.toJSONString(param);com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(JSON.toJSONString(param));//调用发送微信消息给用户的接口 利用现有模版 WX_TemplateMsgUtil.sendWechatMsgToUser(access_token,openId,templatId, "", "#000000", jsonObject);WX_TemplateMsgUtil.sendWechatMsgToUser(access_token,openId,templatId, "", "#000000", jsonObject);}}else{strRet = "1";}return strRet;}

CommonUtil:获取token

注意:获取token需要在公众号设置白名单,不然请求会失败

public class CommonUtil {private static Logger log = LoggerFactory.getLogger(CommonUtil.class);/*** 发送https请求** @param requestUrl 请求地址* @param requestMethod 请求方式(GET、POST)* @param outputStr 提交的数据* @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值)*/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.fromObject(buffer.toString());} catch (ConnectException ce) {log.error("连接超时:{}", ce);} catch (Exception e) {log.error("https请求异常:{}", e);}return jsonObject;}/*** 获取接口访问凭证* * @param appid 凭证* @param appsecret 密钥* @return*/public static Token getToken(String appid, String appsecret) {Token token = null;String requestUrl = ConstantUtil.token_url.replace("APPID", appid).replace("APPSECRET", appsecret);// 发起GET请求获取凭证JSONObject jsonObject = httpsRequest(requestUrl, "GET", null);if (null != jsonObject) {try {token = new Token();token.setAccessToken(jsonObject.getString("access_token"));token.setExpiresIn(jsonObject.getInt("expires_in"));} catch (JSONException e) {token = null;// 获取token失败log.error("获取token失败 errcode:{} errmsg:{}", jsonObject.getInt("errcode"), jsonObject.getString("errmsg"));}}return token;}/*** URL编码(utf-8)** @param source* @return*/public static String urlEncodeUTF8(String source) {String result = source;try {result = .URLEncoder.encode(source, "utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}return result;}}

WX_TemplateMsgUtil:发送消息

public class WX_TemplateMsgUtil {private static Logger log = LoggerFactory.getLogger(WX_TemplateMsgUtil.class);/*** 发送微信消息(模板消息)* @param touser 用户 OpenID* @param templatId 模板消息ID* @param clickurl URL置空,则在发送后,点击模板消息会进入一个空白页面(ios),或无法点击(android)。* @param topcolor 标题颜色* @param data 详细内容* @return 返回成功success */public static String sendWechatMsgToUser(String access_token,String touser, String templatId, String clickurl, String topcolor, JSONObject data) {String tmpurl = ConstantUtil.sendtemplateUrl.replace("ACCESS_TOKEN",access_token);JSONObject json = new JSONObject();json.put("touser", touser);json.put("template_id", templatId);json.put("url", clickurl);json.put("topcolor", topcolor);json.put("data", data);try{JSONObject result = WX_HttpsUtil.httpsRequest(tmpurl, "POST", json.toString());JSONObject resultJson = new JSONObject(result);log.info("发送微信消息返回信息:" + resultJson.get("errcode"));String errmsg = (String) resultJson.get("errmsg");if(!"ok".equals(errmsg)){//如果为errmsg为ok,则代表发送成功,公众号推送信息给用户了。return "error";}}catch(Exception e){e.printStackTrace();return "error";}finally {if(templatId!=null) {//删除新增的 微信模板// deleteWXTemplateMsgById(templatId);}}return "success";}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。