美文网首页
微信公众号开发-模板信息推送

微信公众号开发-模板信息推送

作者: 不见当年三月花 | 来源:发表于2019-08-26 18:31 被阅读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)
    

    相关文章

      网友评论

          本文标题:微信公众号开发-模板信息推送

          本文链接:https://www.haomeiwen.com/subject/bcpnsctx.html