1. 程式人生 > >微信處理使用者授權 openid的持久化 openid儲存注意事項 openid快取等

微信處理使用者授權 openid的持久化 openid儲存注意事項 openid快取等

微信每次的訪問 請求 首先經過授權 拿到code換取openid 將openid存入cookie 這以後的所有訪問url 全部都從cookie中獲取openid 如果沒有在獲取code換取

  • 可以解決的問題:

1,如何儲存獲取使用者資訊及呼叫第三方介面所需要的token.
2, 第三方頁面授權,如何減少從微信伺服器獲取使用者openid的次數以及減少獲取使用者資訊的次數,加速第三方頁面的載入速速。

  • 處理邏輯:
    首先,說一下我的測試邏輯:
    1,先用一個穿透工具,配置好自己的測試號域名和appid 等資訊。
    2,編寫一個WxServlet 攔截wx下的請求,經過處理和url拼接需要的引數進行重定向到具體業務目錄上。
    3,啟動服務,在微信開發者工具或者微信中開啟預設好的url(“。。。。/wx/。。。”),進行訪問/index。
    4,index是入口地址,可以先從cookie中獲取openid,不過這個暫不使用,還是根據傳過來的code在進行獲取一次,這樣保證每次訪問都會進行授權驗證,拿到授權後再獲取openid,存入cookie設定過期時間,這裡可以新增和儲存使用者資訊的邏輯等。
    5,點選頁面跳轉到index1上。這個加了testUtil 這個工具類,首先獲取cookie中的openid,如果沒有,需要重新通過code獲取。(這裡也可以做成攔截器等,這裡改造老專案就按需處理了)。
    6,通過index1和index2的相互跳轉 獲取openid都是可以輕鬆實現,設定時間可以測試,並親測過安卓和蘋果都沒問題,頁面進行分享後也是可以正常使用的。(主要處理之前openid拼接在url上的尷尬問題)

微信選單入口

    /**
     * 微信選單入口
     */
    @RequestMapping("/index")
    public String index(HttpServletRequest request, HttpServletResponse response)throws Exception {
//      CookieUtils.deleteCookie(request, response, "userOpenid");
        String cookieValue = CookieUtils.getCookieValue(request, "userOpenid"
); System.out.println("*********c=="+cookieValue); String code = request.getParameter("code"); logger.info("--openid為空--,OAuth2.0頁面授權CODE====="+ code); //1、如果不是微信中開啟則返回 if (StringUtils.isNotBlank(code)) { JSONObject jsonObject = WeiXinUtil.getAuthorizationAccessToken(WeiXinConstant.getAppid(), WeiXinConstant.getAppsecret(),code); //儲存一小時cookie
CookieUtils.setCookie(request, response, "userOpenid", jsonObject.getString("openid"), 10, true); }else{ if (StringUtils.isBlank(code)) { return null; } } return "/app/book/student/testIndex"; }

測試頁面1

    @RequestMapping("/index1")
    public String index1(HttpServletRequest request, HttpServletResponse response)throws Exception {
         String testUtil = testUtil(request, response);
         if(StringUtils.isNotBlank(testUtil)){
             return "redirect:"+testUtil;
         }
         String cookieValue = CookieUtils.getCookieValue(request, "userOpenid");
         if(StringUtils.isBlank(cookieValue)){
             System.out.println("opneid is null   寫入日誌   1111&&&&&");
         }else{
             System.out.println("openid not null   ---開始處理自己的邏輯11111---");
         }
        return "/app/book/student/testIndex1";
    }

測試頁面2

    @RequestMapping("/index2")
    public String index2(HttpServletRequest request, HttpServletResponse response)throws Exception {
        String testUtil = testUtil(request, response);
         if(StringUtils.isNotBlank(testUtil)){
             return "redirect:"+testUtil;
         }
         String cookieValue = CookieUtils.getCookieValue(request, "userOpenid");
         if(StringUtils.isBlank(cookieValue)){
             System.out.println("opneid is null   *****寫入日誌   222");
         }else{
             System.out.println("openid not null*****開始處理自己的邏輯--2222---");
         }
         return "/app/book/student/testIndex2";
    }

處理cookie是否存在openid邏輯工具類

public String testUtil(HttpServletRequest request, HttpServletResponse response)throws Exception {

        String cookieValue = CookieUtils.getCookieValue(request, "userOpenid");
        System.out.println("*********cookieValue=="+cookieValue);
        String code = request.getParameter("code");
        System.out.println("*********code=="+code);
        String authorizationUrl = "";
        if(StringUtils.isBlank(cookieValue)){
             if(StringUtils.isBlank(code)){
                 String uri = request.getRequestURI();
                 String url = "http://" + WeiXinConstant.SERVER_HOST()+uri;
                 authorizationUrl = WeiXinUtil.getAuthorizationCode(WeiXinConstant.getAppid(),url.toString(), WeiXinConstant.SCOPE_SNSAPI_USERINFO);
                 System.out.println("**********Url=="+authorizationUrl);
             }else{
                 JSONObject jsonObject = WeiXinUtil.getAuthorizationAccessToken(WeiXinConstant.getAppid(), WeiXinConstant.getAppsecret(),code);
                 //儲存一小時cookie 3600
                 CookieUtils.setCookie(request, response, "userOpenid", jsonObject.getString("openid"), 20, true);
             }
         }
        return authorizationUrl;
    }

通過servlet及執行緒定時獲取access_token並使用的文章

相關推薦

處理使用者授權 openid持久化 openid儲存注意事項 openid快取

微信每次的訪問 請求 首先經過授權 拿到code換取openid 將openid存入cookie 這以後的所有訪問url 全部都從cookie中獲取openid 如果沒有在獲取code換取 可以解決的問題: 1,如何儲存獲取使用者資訊及呼叫第三方介面所需

小程式開發過程中總結的注意事項

1、picker從後臺動態取值  <picker bindchange="bindPickerChange" value="{{index}}" range="{{array}}">     <view class="picker">      

瀏覽器網頁授權獲取使用者openid 瀏覽器支付

### 配置 1. appid 2. appsecret 3. merchid 4. apikey 5. 微信公眾號,介面許可權,網頁授權域名填寫 ### 獲取code ``` function getWxCode($url){ $appid = ""; $appsecret =

小程式授權獲取使用者詳細資訊openid的例項詳解

小程式獲取使用者的頭像暱稱openid之類  雪利酒網路科技 第一種使用wx.getUserInfo直接獲取微信頭像,暱稱 ? 1 2 3 4 5 6 7 8

小程式授權獲取使用者詳細資訊openid

小程式獲取使用者的頭像暱稱openid之類 第一種使用wx.getUserInfo直接獲取微信頭像,暱稱 wx.getUserInfo({ success: function (res) { that.setData

小程式使用spring boot獲取使用者唯一標識openId

1.app.js裡面呼叫wx.login(OBJECT) 獲取登入憑證(code)進而換取使用者登入態資訊,包括使用者的唯一標識(openid) 及本次登入的 會話金鑰(session_key)等。 //app.js App({ onLaunch: function() {

Egret:針對官方的授權按鈕,對遊戲中的授權進行處理優化

1、之前的官方微信小遊戲,要獲得使用者微信授權,直接呼叫wx.getUserInfo函式微信就可以自動判斷是否已授權過,如果授權過會直接返回success,如果未授權過則會自動彈出授權視窗。所以在編譯後的platform.js檔案裡對getUserInfo函式修改如下(分

PHP小程式之獲取並解密使用者資料獲取openId和unionId

前言微信小程式API文件:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html在實際的小程式開發中,往往需要使用者授權登陸並獲取使用者的資料,快速對接使用者系統。openId : 使用者在當前小程式的唯一標識

公眾號開發訪問第三方網頁獲取使用者的openid

訪問第三方網頁獲取使用者的openid首先要滿足兩個條件 1.不能是訂閱號(訂閱號可以藉助服務號來獲取openid,直接將請求連結放在訂閱號上) 2.要經過認證 在開發者中心可以看該公眾號是否有許可權 若已獲得許可權才能繼續,點選修改 填上你的回撥域名      

小程序授權頁面

itl lex use style 如果 pen ali justify cell 微信小程序授權頁面,效果圖如下 app.js 中的 onLaunch或onShow中加如下代碼,如果沒授權跳轉到授權頁面 // 獲取用戶信息 wx.getSetting

開放平臺授權流程

ons msg upd 解密 pty entity getc err 取消 最近在看微信第三方開發,整個流程看下來還是可以理解的 https://blog.csdn.net/abc916545195/article/details/50977079?locationNum=

裡的”授權

授權,這個詞對很多人不陌生,也很多場合都能遇到。比如說,銀行取辦理業務,業務員需要主管授權;登入某個系統,需要管理員授權。授權,即授予權利,可以是,授予操作權利,授予訪問權利,授予使用權利等等。我們聊聊微信裡“授權”有哪些。 作為普通使用者,在使用微信的過程中,我們經常會看到各種“授權”,體

web使用者授權

以thinkphp3.2為例 步驟:1.使用者授權->2.獲得CODE->3.根據CODE獲取openid->4.根據openid獲取使用者資訊 1.使用者初次訪問頁面 class IndexController extends Controller { pub

.net core 2.x - 、QQ 授權登入

上一篇是關於模擬請求配置,包括域名問題的解決,本篇就說下授權登入。嗯,比較閒。以前的fx 開發web的時候好像使用的 微信提供的js外掛生成二維碼,然後掃碼登入,,,記不清了,好久不開發微信了。   1.準備工作。 1.1.單獨解決ajax的跨域問題 首先考慮到web端(ajax)

.net core 2.x - 、QQ 授權登錄

img ray lba creating 針對 們的 side over ase 上一篇是關於模擬請求配置,包括域名問題的解決,本篇就說下授權登錄。嗯,比較閑。以前的fx 開發web的時候好像使用的 微信提供的js插件生成二維碼,然後掃碼登錄,,,記不清了,好久不開發微信

多域名授權

需求是這樣的 現在有3個不同的域名,一個認證的微信公眾號,由於公眾號授權回撥頁面域名只能寫一個,因此對於我有多個微擎系統分別部署在不同伺服器上(一臺做營銷業務、一臺做分銷系統、一臺做餐飲系統),分別部署的原因是主要是兩點:分流和防止一個域名被封(主要是微信營銷訪問量大,被人惡意舉報被封閉的風險大大

普通js使用ajax,公眾號授權網頁授權

微信授權的整個流程: 引導使用者進入授權頁面同意授權,獲取code 通過code換取網頁授權access_token(與基礎支援中的access_token不同) 如果需要,開發者可以重新整理網頁授權access_token,避免過期 通過網頁授權access_tok

vue腳手架,公眾號授權網頁授權

如果使用者在微信客戶端中訪問第三方網頁,公眾號可以通過微信網頁授權機制,來獲取使用者基本資訊,進而實現業務邏輯。 首先我做了一個H5小專案,然後申請公眾號,然後在【自定義選單】中輸入想填寫的,公眾號選單名稱,以及頁面地址: 然後,我們在我們的前端頁面寫呼叫伺服器介面,得到授權。當然

第三方平臺授權

目的:         微信第三方公眾平臺是為了讓公眾號和小程式的運營者,可以一建授權給第三方平臺,通過第三方平臺來完成業務。 業務特徵: 提供通用的解決方案; 基於安全的公眾號授權機制; 是公眾號外包團隊的商

小程式 - 授權頁面

小程式授權方式更改以後,我們只有兩種選擇.   1.在主頁使用遮罩層,類似這樣的(會造成一點卡頓)       2.新增登陸授權頁(經過反覆的思考,我還是覺得用這個好)   這個也不錯: https://blog.csdn.net/qq_33