1. 程式人生 > 其它 >微信網頁授權訪問實現方式,根據授權獲取微信openid_新維護

微信網頁授權訪問實現方式,根據授權獲取微信openid_新維護

技術標籤:微信java微信遊戲

基於很多年前才開始研究微信公眾號的時候寫的微信鑑權,現在重新補一版本

1.引入微信API開發工具包

gradle:引入

compile group: 'com.github.binarywang', name: 'weixin-java-mp', version: '3.2.0'

這個是開源的微信開發工具包,封裝了很多api,如果沒有的介面也可以呼叫其get()和post()方法自己傳url呼叫,此框架最大的好處是,呼叫介面只傳入微信appid,開發工具包自動快取了

token資訊,不用本地快取。

舉例:網頁授權的url組裝

/**
     * 微信獲取基本資訊url
     * 時間:2018/8/10
     *
     * @param
     * @param
     * @return
     */
    @GetMapping(value = "/getInfo/{appid}")
    public ModelAndView createUrl(@PathVariable final String appid) {
        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        String url = "";
        try {
            if (servletRequestAttributes != null) {
                url = WxMpConfiguration.getMpServices().get(appid).oauth2buildAuthorizationUrl(String.format("%s/wx/redirect/%s/greet", redirectUrl, appid), WxConsts.OAuth2Scope.SNSAPI_USERINFO, System.currentTimeMillis() + "");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new ModelAndView("redirect:" + url);

    }

選單直接呼叫該方法,只需傳入appid,主要是學會呼叫微信工具組裝url的方法,所有的方法都是WxMpConfiguration.getMpServices().get(appid)的WxMpService介面開始呼叫的,比如組裝網頁授權地址就呼叫oauth2buildAuthorizationUrl(String redirectURI, String scope, String state)方法返回網頁授權地址,此方法返回的url微信會向重定向的地址介面拼裝code引數作為驗證。本文跳轉地址如下:

獲取使用者openid和暱稱

@GetMapping("/greet")
    public void greetUser(@PathVariable final String appid, String code) {
        try {
            logger.info("重定向code:" + code);
            if (StringUtils.isBlank(code)) {
                logger.info("重定向code為null");
                return;
            }
            WxMpService mpService = WxMpConfiguration.getMpServices().get(appid);
            //獲取token
            WxMpOAuth2AccessToken accessToken = mpService.oauth2getAccessToken(code);
            //獲取使用者資訊包括openid
            WxMpUser user = mpService.oauth2getUserInfo(accessToken, null);

            logger.info("使用者的openid:{}",user.getOpenId());
            logger.info("使用者的暱稱:{}",user.getNickname());

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

總結:微信使用者鑑權到此結束,還要小程式,微信企業號,歡迎諮詢探討。