微信公众号开发-模板信息推送
2019-08-26 本文已影响0人
不见当年三月花
微信公众号开发-模板信息推送
- image.png
我们是微信小程序用户在系统中进行用户绑定,但是需要推送信息到微信公众中
发送流程
- 1.获取access_token
- 2.获取所有的用户openid
- 3.获取所有的用户的用户信息
- 4.获取用户的unionid
- 5.绑定用户微信公众号openid,unionid,微信小程序openid
- 6.通过用户微信小程序的openid找到用户微信公众号的openid
- 7.拿着微信公众号openid进行模板推送
以下只演示部分代码
- 获取access_token
/**
* 获取公众号token
* @param appId
* @param secret
* @return
*/
public String getAccessToken(String appId,String secret){
String url = "https://api.weixin.qq.com/cgi-bin/token";
Map<String, String> dataMap = new HashMap<>();
dataMap.put("grant_type", "client_credential");
dataMap.put("appid", appId);
dataMap.put("secret", secret);
WxGetTokenVo wxGetTokenVo = JSONObject.parseObject(HttpClientUtils.get(url, dataMap), WxGetTokenVo.class);
return wxGetTokenVo.getAccess_token();
}
- 获取所有的用户openid
/**
* 获取全部的openID
* @param acessToken
* @param nextOpenId
* @param wxGetOpenIdVos
* @return
*/
public void getAllOpenId(String acessToken,String nextOpenId,List<WxGetOpenIdVo> wxGetOpenIdVos){
String url = "https://api.weixin.qq.com/cgi-bin/user/get";
Map<String, String> dataMap = new HashMap<>(2);
dataMap.put("access_token", acessToken);
if(StringUtils.isNotBlank(nextOpenId)){
dataMap.put("next_openid", nextOpenId);
}
String openidUsersStr = HttpClientUtils.get(url,dataMap);
WxGetOpenIdVo wxGetOpenIdVo = JSONObject.parseObject(openidUsersStr, WxGetOpenIdVo.class);
if(wxGetOpenIdVo != null){
if(wxGetOpenIdVo.getData() != null) {
wxGetOpenIdVos.add(wxGetOpenIdVo);
}
if(StringUtils.isNotBlank(wxGetOpenIdVo.getNext_openid())){
getAllOpenId(acessToken, wxGetOpenIdVo.getNext_openid(), wxGetOpenIdVos);
}
}
}
- 获取用户的用户数据
/**
* 获取用户详情
* @param acessToken
* @param openId
* @param wxGetUserInfoVos
*/
public void getUserInfo(String acessToken,String openId,List<WxGetUserInfoVo> wxGetUserInfoVos){
String url = "https://api.weixin.qq.com/cgi-bin/user/info";
Map<String, String> dataMap = new HashMap<>();
dataMap.put("access_token", acessToken);
dataMap.put("openid", openId);
dataMap.put("lang", "zh_CN");
WxGetUserInfoVo wxGetUserInfoVo = JSONObject.parseObject(HttpClientUtils.get(url, dataMap), WxGetUserInfoVo.class);
wxGetUserInfoVos.add(wxGetUserInfoVo);
}
- 发送模板信息
public static void send(String token){
String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + token;
//TemplateMessage 需要封装 测试代码没有进行封装
TemplateMessage templateMessage=new TemplateMessage();
AppletVo appletVo = new AppletVo();//跳转小程序使用
appletVo.setAppid("****");
appletVo.setPagepath("/pages/index/index");
templateMessage.setMiniprogram(appletVo);
// templateMessage.setUrl("www.baidu.com");
templateMessage.setTouser("********");
templateMessage.setTemplate_id("3IrFxsPYYlutAYqru1ZPtGHCMceMfojGURmVkaWLOZg");
//设置模板标题
Content first=new Content();
first.setValue("感谢您进行实名认证!");
first.setColor("");
//设置模板内容
Content keyword1=new Content();
keyword1.setValue("认证失败");
keyword1.setColor("#FF0000");
//设置模板位置
Content keyword2=new Content();
keyword2.setValue("2019-08-26");
keyword2.setColor("");
//设置设备
//设置跳转内容
Content remark=new Content();
remark.setValue("请提交真实的信息,重新提交,谢谢!");
remark.setColor("#FF0000");
//创建模板信息数据对象
Data data=new Data();
data.setFirst(first);
data.setKeyword1(keyword1);
data.setKeyword2(keyword2);
data.setRemark(remark);
templateMessage.setData(data);
//将封装的数据转成JSON
String jsonString = JSON.toJSONString(templateMessage);
System.out.println("templateMessage = "+templateMessage);
JSONObject post = doPost(url, JSONObject.parseObject(jsonString));
System.out.println(post);
}
- main方法
public static void main(String[] args) {
WeChatUtil weChatUtil = new WeChatUtil();
String accessToken = weChatUtil.getAccessToken(WXAPPID, KEY);
//send(accessToken);
List<WxGetOpenIdVo> wxGetOpenIdVos = new ArrayList<>();
weChatUtil.getAllOpenId(accessToken, null, wxGetOpenIdVos);
List<WxGetUserInfoVo> dataUserInfo = new ArrayList<>();
wxGetOpenIdVos.forEach(wxGetOpenIdVo ->{
wxGetOpenIdVo.getData().getOpenid().forEach(openid ->
weChatUtil.getUserInfo(accessToken, openid, dataUserInfo)
);
}
);
dataUserInfo.forEach(dataUser->
System.out.println(dataUser.getOpenid() + "---" +dataUser.getUnionid())
);
}
image.png
如果需要获取到微信用的unionid需要在微信开放平台绑定公众号,否则不返回该字段。部分封装代码没有贴在代码中,自行封装。
示例代码 没有整理
[https://www.lanzous.com/i5t9bcb](https://www.lanzous.com/i5t9bcb)