關於微信oauth登錄的坑


這是實習公司里微信公眾號的一個小項目,用的是ssm。問題是獲取用戶openid為空。

分析下步驟

  1. 首先用戶點擊微信公眾號按鈕
  2. 訪問微信服務器獲取code
  3. 跳轉到項目url
  4. 拿code訪問微信服務器,獲取token 以及openid。
  5. 將openid存入session
這是微信公眾號按鈕鏈接
https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxxxxxxxxxxxxx&redirect_uri=https:xxx.xx.html&response_type=code&scope=snsapi_base&state=123#wechat_redirect //redirect_uri 是返回的url,指向的項目服務器
這個是url處理的Controller層
    @RequestMapping(method = RequestMethod.GET)
    public String newPage(HttpServletRequest request, ModelMap map, HttpServletResponse response) {
            getOpenid();
    }

其實問題就出在這個controller層里,這個方法的request並不是用戶發出請求的request,而是微信服務器的request。
他們原本的做法是直接用微信轉發的request.getSession().setAttribute("openid",openid);來設置值,用戶發起請求,在通過用戶request去getSession.getAttribute("openid"),獲取的值當然為空了。

以下是我的做法

先跳轉在一個頁面,並帶上code,然后這個頁面在對項目服務器請求一次,這樣就拿到用戶的request了,然后在controller里去訪問微信服務器,拿到token和openid,在存入session


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM