JAVA连接微信服务号,创建自定义菜单、获取openid

        上篇写了发送模板消息,但在发送时需要获取到发送对象的openid(注:此openid是用户关注此服务号产生的唯一值)才能进行模板的发送。因为发送节点是app下单后发送通知,所以我还需要把关注服务号的用户和app用户关联起来才能进行模板的发送。此关联我是通过自定义菜单来实现的(如果有更简便的可以自动略过......)。

 

        1、创建自定义菜单

        此处绑定因为需要和app关联所以我做了个绑定页面所以选择了跳转网页,下面的页面地址就是跳转的url

 绑定页面:

我在绑定页面做了短信验证以免出现乱绑定(注:此处其实应该可以自动获取到电话号码,因为我的业务需求所以才做了这个页面)

后台代码:

        ①用户授权后重定向到跳转绑定页面方法

// 刚才公众平台自定义菜单配置的网页地址就是此方法的url
@RequestMapping(value = "/redirect", method = RequestMethod.GET)
    public void weixinRedirect(HttpServletRequest request, HttpServletResponse response) {
        logger.info("weixinRedirect,进入重定向方法!");
        //配置redirect_uri,即用户同意授权后重定向的地址
         String path = "http://XXXXXXXX/oauth"; //此路径为跳转绑定页面的路径
        
        logger.info("weixinRedirect,进入重定向方法!path:{}",path);
        //使用 urlEncode 对链接进行处理

        String url = "https://open.weixin.qq.com/connect/oauth2/authorize?" +
                "appid=XXXXXX" +
                "&redirect_uri="+ path +
                "&response_type=code" +
                "&scope=snsapi_userinfo" +
                "&state=STATE" +
                "#wechat_redirect";

        //引导用户打开url这个网页,即重定向到url
        try {
            response.sendRedirect(url);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

        ②跳转绑定页面时就获取到此用户服务号的openid,并回传到页面以便后面使用


    @GetMapping(value = "/oauth")
    public String weixinOAuth(HttpServletRequest request, HttpServletResponse response, Model model) {
        logger.info("weixinOAuth,进入获取OPENID方法!");
        //得到code
        String code = request.getParameter("code");
        String state = request.getParameter("state");
        System.out.println("code="+code);
        //3、认证服务器,获取code后,请求以下链接获取网页授权access_token
        String url = "https://api.weixin.qq.com/sns/oauth2/access_token?" +
                "appid=XXXXX" +
                "&secret=XXXXX" +
                "&code="+code +
                "&grant_type=authorization_code";
        JSONObject jsonObject = WeiXinUtil.httpRequest(url,"POST",null);
        logger.info("weixinOAuth,进入获取OPENID方法! jsonStr:{}",jsonObject);
        String access_token = jsonObject.getString("access_token");
        String openid = jsonObject.getString("openid");

        System.out.println("access_token="+access_token);
        System.out.println("openid="+openid);

        //4、根据openid和access_token获取资源信息
        String URLUserinfo = "https://api.weixin.qq.com/sns/userinfo?" +
                "access_token=" + access_token +
                "&openid="+openid+
                "&lang=zh_CN";
        JSONObject jsonobj = WeiXinUtil.httpRequest(URLUserinfo,"GET",null);
        System.out.println(jsonobj);

        logger.info("weixinOAuth,进入获取OPENID方法! openId:{}",openid);
        model.addAttribute("openId",openid);

        //判断是否已绑定
        String isBind = "N";
        List<AppCustomer> customer = appletsService.findCustomerListByWechatServiceNumberOpenid(openid);
        AppEmployee employee = appletsService.findEmployeeByWechatServiceNumberOpenid(openid);
        if ((null != customer && customer.size() > 0) || null != employee){
            isBind = "Y";
        }
        model.addAttribute("isBind",isBind);
        return "/views/bind_applets";
    }

 ③后面的绑定app用户方法就不贴了,绑定成功后就回到关注的聊天窗口了。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值