百木园-与人分享,
就是让自己快乐。

JAVA微信公众号订阅消息推送

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 = value;
this.color = \"#173177\";
}

public WeChatTemplateMsg(String value, String color) {
this.value = 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.cnblogs.com/qiangzaiBlog/p/16979016.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » JAVA微信公众号订阅消息推送

相关推荐

  • 暂无文章