這是實習公司里微信公眾號的一個小項目,用的是ssm。問題是獲取用戶openid為空。
分析下步驟
- 首先用戶點擊微信公眾號按鈕
- 訪問微信服務器獲取code
- 跳轉到項目url
- 拿code訪問微信服務器,獲取token 以及openid。
- 將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