随手记录
/**
* 获取接口凭证
*
* @param appId 微信公众号应用唯一标识
* @param appSecret 微信公众号应用密钥(注意保密)
* @param openId 用户编号
* @param url 广告地址
* @param templateId 用户编号
* @param data 发送内容
* @return
*/
private static String send(String appId, String appSecret, String openId, String url, String templateId, String data) {
try {
String accessToken = WxpubOAuth.getAccessToken(appId, appSecret);
logger.info(accessToken);
String sendUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken;
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("touser", openId);//推送的用户编号
paramMap.put("template_id", templateId);//模板编号
paramMap.put("url", url);//点击跳转的地址
paramMap.put("data", JsonUtil.writeJson2Object(data, Map.class));
logger.info("公众号推送消息参数:" + JsonUtil.writeObject2Json(paramMap));
String ret = sendPost(sendUrl, JsonUtil.writeObject2Json(paramMap));
JsonParser jp = new JsonParser();
JsonObject respJson = jp.parse(ret).getAsJsonObject();
if (StringUtils.equalsAny("42001","40001", respJson.get("errcode").getAsString())) {
SpringContext.getBean(JedisClient.class).del(WxpubOAuth.CT_WX_ACCESS_TOKEN);
WxpubOAuth.getAccessToken(appId, appSecret);
send(appId,appSecret,openId,url,templateId,data);
return null;
}
logger.info("公众号消息发送返回:" + ret);
return null;
} catch (Exception e) {
logger.error(e.getMessage(), e);
e.printStackTrace();
}
return "发送失败";
}
/**
* 获取接口凭证
*
* @param appId 微信公众号应用唯一标识
* @param appSecret 微信公众号应用密钥(注意保密)
* @return 获取openid的URL地址
*/
public static String getAccessToken(String appId, String appSecret)
throws UnsupportedEncodingException {
String access_token = SpringContext.getBean(JedisClient.class).get(CT_WX_ACCESS_TOKEN);
if (StringUtils.isNotBlank(access_token)) {
return access_token;
}
Map<String, String> data = new HashMap<String, String>();
data.put("appid", appId);
data.put("secret", appSecret);
data.put("grant_type", "client_credential");
String queryString = WxpubOAuth.httpBuildQuery(data);
String accessTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?" + queryString;
String resp = httpGet(accessTokenUrl);
logger.info(resp);
JsonParser jp = new JsonParser();
JsonObject respJson = jp.parse(resp).getAsJsonObject();
if (respJson.has("errcode")) {
return "";
}
access_token = respJson.get("access_token").getAsString();
SpringContext.getBean(JedisClient.class).set(CT_WX_ACCESS_TOKEN, access_token, 3600);
return respJson.get("access_token").getAsString();
}