• <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://www.newhan.cn/zhishi/a/167771478895980.html

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

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

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

            標簽:公眾   網頁   平臺   按鈕
            相關文章
            留言與評論(共有 0 條評論)
               
            驗證碼:
            Copyright ?2019-2022 Comsenz Inc.Powered by ? 實用文體寫作網旗下知識大全大全欄目是一個全百科類寶庫! 優秀范文|法律文書|專利查詢|
            主站蜘蛛池模板: 69天堂人成无码麻豆免费视频| 香港日本三级亚洲三级| 亚洲欧美日韩愉拍自拍美利坚| 国产一级av在线播放| 国产精品国产三级国快看| bt天堂新版中文在线| 在线看av一区二区三区| 免费a级毛片无码专区| 真人无码作爱免费视频| 性色av无码无在线观看| 国内精品久久人妻无码妲| 激情综合网激情五月俺也想| 免费无码高潮流白浆视频| 亚洲成A人片在线观看的电影| 无码人妻一区二区三区免费N鬼沢 亚洲国产精品自产在线播放 | 视频女同久久久一区二区三区| 一区二区日韩中文字幕| 亚洲av无码乱码在线观看野外| 一本色道无码不卡在线观看| 欧美一区二区三区成人久久片| 久久国内精品自在自线观看| 熟妇激情一区二区三区| 一本之道高清乱码少妇| 午夜精品久久久久久久久| 欧洲码亚洲码的区别入口| 中文字幕第一区| 国语精品自产拍在线观看网站 | 日韩精品一区二区三区中文无码| 99视频在线精品国自产拍 | 国内丰满少妇一A级毛片视频| 免费午夜福利一区二区| 男女性高爱潮免费网站| 国产成人自拍小视频在线| 九九热中文字幕在线视频| 无码免费大香伊蕉在人线国产| 污污污污污污WWW网站免费| 国产a在视频线精品视频下载 | 国产日韩另类综合11页| 国产欧美日韩精品丝袜高跟鞋 | 久久午夜无码鲁丝片直播午夜精品 | 福利一区二区在线视频|