我通過java代碼去獲得用戶的openid,一直報redirect_uri。
我頁面代碼的鏈接為:
https://open.weixin.qq.com/connect/oauth2/authorize?
appid=APPID&
redirect_uri=ENCODE(URL)&
response_type=code&
scope=snsapi_base&
state=state#wechat_redirect"
當中APPID為項目的appid,ENCODE(URL)為鏈接希望跳轉的url地址(url須要urlencode),url的encode在java中代碼實現例如以下:
// url進行編碼
String url = "http://evan.tunnel.mobi/zzaClient/bindindex.html";
String url_encode = java.net.URLEncoder.encode(url, "utf-8");
request.setAttribute("url_encode", url_encode);
當前台頁面構造完畢后,點擊頁面鏈接會跳轉到bindindex.html的controller,在這個controller的代碼寫法是:
// 須要在“開發人員中心”---網頁賬號--改動。
改動成域名。不要帶http 。比方:evan.tunnel.mobi // 通過code獲取openid String code = request.getParameter("code"); JsonObject json = WeixinUtils.getOpenId(getopenid_url, app_id, secret, code, "authorization_code"); String openid = json.get("openid").getAsString(); logger.info(openid + "------------------------------openid");
但是奇怪的是,以上全部參數都沒有寫錯,url也進行編碼了。但是還是會報redirect_uri 參數錯誤。解決的方法是: 須要在微信公眾平台的“開發人員中心”—網頁賬號–改動 把“授權回調頁面域名”改成server的域名就可以。
如圖:
到這樣,openid就能夠正常獲得了。有些開發人員可能會有些疑問,假設我每次更改都要部署到正式環境進行測試。這樣多浪費時間,事實上我們能夠通過ngrok將本地地址映射到外網,這樣就能夠將開發環境的地址直接映射到外網。
詳細操作詳見博客:
http://blog.csdn.net/zl544434558/article/details/46593063
最后附上一張報錯的圖片