1、前期準備
1.申請微信公眾號測驗號及微信模板配置
2.申請一個微信公眾號測驗號,測驗號申請:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

3.掃碼登陸注冊,注冊成功后就會生成微信公號的appID和appsecret

4.需要接收訊息的人微信掃碼關注 測驗號二維碼,微信會回傳我們的openid,這個openid在推送時接收訊息的用戶id,

5.新增訊息模板(模板ID是呼叫推送訊息介面的重要引數),模板中引數內容必須以".DATA"結尾,否則視為保留字,模板保留符號"{{ }}"; 例如{{date.DATA}

6.配置之后就完成了微信公眾號的配置
2、實作邏輯
1.獲取微信基礎accessToken
呼叫微信的介面,access_token肯定是需要的,access_token可以參考一下官方:https://developers.weixin.qq.com/miniprogram/dev/framework/server-ability/backend-api.html,accessToken有效期只有兩小時(下面簡稱token),因此當呼叫一下方法一次后,就可以將其放入redis中,設定過期時間(低于兩小時);
public void getAccessToken(){
String appId = "wxbac840efxxxxxxxx";
String appIdSecret = "dbf4aadaae8dab4e699xxxxxxxxxxxxx";
String requestUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+ appId +"&secret=" + appIdSecret;
String res = HttpUtil.get(requestUrl);
JSONObject jsonObject = JSONObject.fromObject(res);
String accessToken = jsonObject.getString("access_token");
log.info("accessToken:{}", accessToken);
}
2.獲取關注公眾號用戶
public void getUserList(){
RestTemplate restTemplate = new RestTemplate();
String accessToken = "63_3G96dUuGl-r0rGQsD7Nh3IgoEi60z-hmfNqSHjbFTatwdDhlHRgKVwuzMzxzTenlEWoARYE3hgRgQF5yyCNbr9TWFYX7s_ABin_IxR6cROYnjwTkJ-VydFxHd_UQKBgAFAEYP";
String requestUrl = "https://api.weixin.qq.com/cgi-bin/user/get?access_token="+ accessToken;
ResponseEntity<String> response = restTemplate.postForEntity(requestUrl, null, String.class);
log.info("結果是: {}",response.getBody());
com.alibaba.fastjson.JSONObject result = com.alibaba.fastjson.JSONObject.parseObject(response.getBody());
com.alibaba.fastjson.JSONArray openIdJsonArray = result.getJSONObject("data").getJSONArray("openid");
Iterator iterator = openIdJsonArray.iterator();
if (iterator.hasNext()){
log.debug("用戶openid:"+iterator.next());
}
}
3.訊息推送的訊息體
public class WeChatTemplateMsg {
/**
* 訊息
*/
private String value;
/**
* 訊息顏色
*/
private String color;
public WeChatTemplateMsg(String value) {
this.value = https://www.cnblogs.com/qiangzaiBlog/p/value;
this.color = "#173177";
}
public WeChatTemplateMsg(String value, String color) {
this.value = https://www.cnblogs.com/qiangzaiBlog/p/value;
this.color = color;
}
}
4.訊息推送
通過以上獲取的 openId, accessToken 和 前期準備的模板id即可,再呼叫官方url即可,公眾號模板推送介面:POST https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
public void sendMessage(){
// 模板引數
Map<String, WeChatTemplateMsg> sendMag = new HashMap<String, WeChatTemplateMsg>();
// openId代表一個唯一微信用戶,即微信訊息的接收人
String openId = "ogwdJ6w7Om9sKtFc9mxxxxxxxxxx";
// 公眾號的模板id(也有相應的介面可以查詢到)
String templateId = "yBVd_hZR1q5-hko3eP9BsuFfpYnFxxxxxxxxxxxxxx";
// 微信的基礎accessToken
String accessToken = "63_3G96dUuGl-r0rGQsD7Nh3IgoEi60z-hmfNqSHjbFTatwdDhlHRgKVwuzMzxzTenlEWoARYE3hgRgQF5yyCNbr9TWFYX7s_ABin_IxR6cROYnjwTkJ-VydFxHd_UQKBgAFAEYP";
String requestUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken;
sendMag.put("city", new WeChatTemplateMsg("廣州"));
RestTemplate restTemplate = new RestTemplate();
//拼接base引數
Map<String, Object> sendBody = new HashMap<>();
sendBody.put("touser", openId); // openId
sendBody.put("url", "https://www.baidu.com"); //跳轉網頁url
sendBody.put("data", sendMag); // 模板引數
sendBody.put("template_id", templateId); // 模板Id
ResponseEntity<String> response = restTemplate.postForEntity(requestUrl, sendBody, String.class);
log.info("結果是: {}",response.getBody());
com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(response.getBody());
String messageCode = jsonObject.getString("errcode");
String msgId = jsonObject.getString("msgid");
System.out.println("messageCode : " + messageCode + ", msgId: " +msgId);
}
5.請求引數

{
"touser":"ogwdJ6w7Om9sKtFc9xxxxxxxx",
"template_id":"yBVd_hZR1q5-hko3eP9BsuFfxxxxxxxxxx",
"url": "www.baidu.com",
"data":{
"city": {
"value":"廣州"
}
}
}
6.效果
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/539817.html
標籤:Java
上一篇:JAVA中的注解可以繼承嗎?

