• <em id="6vhwh"><rt id="6vhwh"></rt></em>

    <style id="6vhwh"></style>

    <style id="6vhwh"></style>
    1. <style id="6vhwh"></style>
        <sub id="6vhwh"><p id="6vhwh"></p></sub>
        <p id="6vhwh"></p>
          1. 国产亚洲欧洲av综合一区二区三区 ,色爱综合另类图片av,亚洲av免费成人在线,久久热在线视频精品视频,成在人线av无码免费,国产精品一区二区久久毛片,亚洲精品成人片在线观看精品字幕 ,久久亚洲精品成人av秋霞

            微信公眾平臺網頁版(微信公眾平臺網頁版沒有發表按鈕)

            更新時間:2023-03-02 07:53:08 閱讀: 評論:0

            寫在前面

            在日常開發過程中我們難免會遇到需要網頁授權登錄獲取用戶openId的情況,隨著開發的深入我們會有很多網頁需要用到用戶的openId,而我們不可能每次都去寫一個授權登錄的接口去匹配每個網頁,為了減少我們重復的工作,本篇文章將分享一個所有網頁公共授權方案包括未配置的安全域名下的網頁。如有不足之處,可在評論區指出。

            本次使用開發語言為java。使用框架springboot。

            前期配置

            我們都知道要想實現微信公眾號的網頁授權登錄,需在公眾號管理后臺“設置與開發”->“公眾號設置”->"功能設置"中設置網頁授權域名,如下圖所示

            網頁授權域配置

            但是微信官方將此域名配置限制為僅可設置兩個,那我們需要跳轉其他域名怎么辦呢,其實很簡單,我們接著往下看!

            授權流程

            大家都知道微信網頁授權只需要在確保微信公眾賬號擁有授權作用域(scope參數)的權限的前提下(已認證服務號,默認擁有 scope 參數中的snsapi_ba和snsapi_urinfo 權限),引導關注者打開如下頁面:

            https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&respon_type=code&scope=SCOPE&state=STATE#wechat_redirect

            需要注意的是這里的授權登錄很有可能多次轉發,導致code過期的情況,因此可以加入參數connect_redirect=1告訴微信僅跳轉一次

            REDIRECT_URI就為我們的用戶確認授權后 微信轉發的地址 我們要實現公共網頁的授權登錄就在這里做文章

            關于scope作用域這里就不再過多地描述snsapi_ba僅可以拿到戶的 openid,并且用戶是無感知的,是靜默的。snsapi_urinfo可以拿到用戶的基本信息,但不是無感知的需要用戶手動確認,特殊情況除外(對于已關注公眾號的用戶,如果用戶從公眾號的會話或者自定義菜單進入本公眾號的網頁授權頁,即使是 scope 為snsapi_urinfo,也是靜默授權,用戶無感知)。

            實現代碼

            /**

            * 公共重定向

            * @param url

            * @param request

            * @return

            */

            @RequestMapping("/common")

            public String authCommonUrl(String url, HttpServletRequest request)

            try {

            if (StringUtils.isEmpty(url)) {

            return "/error";

            }

            return "redirect:https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + environment.getProperty("wechat.appId")

            + "&redirect_uri="

            + URLEncoder.encode(

            environment.getProperty("wechat.baRedirectUrl") + "/authcommonurl?url=" + URLEncoder.encode(url, "utf-8"),

            "utf-8")

            + "&respon_type=code&scope=snsapi_urinfo&connect_redirect=1&state=join#wechat_redirect";

            } catch (Exception e) {

            logger.error("重定向發生異常->RedirectController.authCommon:" + ParamsUtils.showParams(request), e);

            return "/error";

            }

            }

            可以看到我們將redirect_uri設置成了一個公共的獲取用戶信息的接口地址,然后在該地址上傳入我們需要最終跳轉的url,這里的url我們如果需要傳遞其他參數,也可以直接加在url上。這里我們只要保證redirect_uri在網頁授權的安全域名下,而url任意域名都可以啦。

            獲取用戶信息重定向url地址

            /**

            * 授權回調轉發

            * @param url

            * @param code

            * @param request

            * @return

            */

            @SuppressWarnings({ "unchecked" })

            @RequestMapping(value = "/authcommonurl")

            public String authCommon(String url, String code, HttpServletRequest request) {

            HttpSession ssion = request.getSession();

            try {

            if (StringUtils.isEmpty(url)) {

            return "/error";

            }

            if (StringUtils.isEmpty(code)) {

            return "/error";

            }

            // 首先判斷ssion中是否存在用戶信息,存在則跳過以下獲取用戶信息方法,不存在繼續執行

            String ssionId = ssion.getId();

            CacheObject<JSONObject> cache = MapCacheManager.getInstance().getCache(ssionId);

            JSONObject urInfoJO = cache != null ? cache.getObject() : null;

            if (urInfoJO == null || StringUtils.isEmpty(urInfoJO.optString("nickname", ""))) {// 里面為整個網頁登錄授權過程

            // 調用獲取accessToken接口 獲取accessToken

            String json = HttpsUtil.httpMethodGet(getAccessTokenUrl(code), "UTF-8");

            JSONObject jsonObject = null;

            try {

            jsonObject = new JSONObject(json);

            } catch (Exception e) {

            logger.error("獲取授權accesstoken轉換json異常->NotStaticAuthReturnController.authHd:" + json, e);

            }

            if (!jsonObject.has("access_token")) {

            return "/error";

            }

            String access_token = jsonObject.optString("access_token", "");

            String openid = jsonObject.optString("openid", "");

            // 得到獲取用戶信息的鏈接

            // 獲取用戶信息接口 獲取用戶信息

            String urInfoJson = HttpsUtil.httpMethodGet(getUrinfoUrl(access_token, openid), "UTF-8");

            try {

            urInfoJO = new JSONObject(urInfoJson);

            } catch (JSONException e) {

            urInfoJO = new JSONObject();

            logger.error("獲取用戶信息轉換json異常->NotStaticAuthReturnController.authcommon:" + urInfoJson, e);

            }

            if (!urInfoJO.has("nickname")) {

            return "/error";

            }

            urInfoJO.put("nickname", EmojiFilter.filterEmoji(urInfoJO.optString("nickname", "")));

            cache = new CacheObject<>();

            cache.tExpires_in(7200L);

            cache.tObject(urInfoJO);

            MapCacheManager.getInstance().putCache(ssionId, cache);

            }

            // System.out.println("用戶信息:" + urInfoJO.toString());//輸出用戶信息 測試用

            String ur_openid = urInfoJO.optString("openid", "");

            if (StringUtils.isEmpty(ur_openid)) {

            return "/error";

            }

            return "redirect:" + url + (url.contains("?") ? "&" : "?") + "openId=" + ur_openid;

            } catch (Exception e) {

            e.printStackTrace();

            logger.error("微信授權異常->NotStaticAuthReturnController.authCommonurl:" + ParamsUtils.showParams(request), e);

            return "/error";

            }

            }

            這里我們作用域是snsapi_urinfo有獲取用戶的基本信息,若無需這些信息,按需求刪除代碼即可。

            如有問題或不足之處可在評論區指出,覺得還行的看官動動小手幫忙點個贊吧!

            祝大家健健康康,每天開開心心!

            本文發布于:2023-02-28 21:00:00,感謝您對本站的認可!

            本文鏈接:http://m.newhan.cn/zhishi/a/167771478895980.html

            版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。

            本文word下載地址:微信公眾平臺網頁版(微信公眾平臺網頁版沒有發表按鈕).doc

            本文 PDF 下載地址:微信公眾平臺網頁版(微信公眾平臺網頁版沒有發表按鈕).pdf

            標簽:公眾   網頁   平臺   按鈕
            相關文章
            留言與評論(共有 0 條評論)
               
            驗證碼:
            Copyright ?2019-2022 Comsenz Inc.Powered by ? 實用文體寫作網旗下知識大全大全欄目是一個全百科類寶庫! 優秀范文|法律文書|專利查詢|
            主站蜘蛛池模板: 国产精品99一区二区三区| 人妻激情偷一区二区三区| 狠狠躁天天躁中文字幕无码| 亚洲av永久无码精品天堂久久| 男女性高爱潮免费网站| 亚洲 都市 无码 校园 激情 | 亚洲国产精品第一区二区| 国产精品午夜av福利| 日韩成人无码v清免费| 老熟妇国产一区二区三区 | 2022亚洲男人天堂| 国产女人看国产在线女人| 伊伊人成亚洲综合人网7777| 黄色a一级视频| 九九热在线视频精品免费| 亚洲av午夜福利精品一区二区| 漂亮人妻被强中文字幕久久| 色一乱一伦一图一区二区精品| 天堂视频一区二区免费在线观看| 久久久精品2019中文字幕之3| 日韩永久永久永久黄色大片| 久久不见久久见免费视频观看| 粉嫩大学生无套内射无码卡视频| 91中文字幕一区在线| 日本sm/羞辱/调教/捆绑| 成人网站免费观看永久视频下载| 好吊色妇女免费视频免费| 国产成人永久免费av在线| 国产一区二区三区AV在线无码观看| 国产伦精品一区二区亚洲| 国产日产亚洲系列av| 乱人伦中文字幕成人网站在线| 久久久久亚洲av成人网址| 亚洲欧美色综合影院| 狠狠色综合播放一区二区| 日韩中文字幕高清有码| 国产精品成人aaaaa网站| 人妻无码av中文系列久| 欧美综合人人做人人爱| 成人片99久久精品国产桃花岛| 欧美在线人视频在线观看|