redirect_uri 引數錯誤的解決辦法
阿新 • • 發佈:2019-01-08
我通過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 引數錯誤。解決辦法是: 需要在微信公眾平臺的“開發者中心”—網頁賬號–修改 把“授權回撥頁面域名”改成伺服器的域名即可。如圖:
到這樣,openid就可以正常獲得了。有些開發者可能會有些疑問,如果我每次更改都要部署到正式環境進行測試,這樣多浪費時間,其實我們可以通過ngrok將本地地址對映到外網,這樣就可以將開發環境的地址直接對映到外網。具體操作詳見部落格:
http://blog.csdn.net/zl544434558/article/details/46593063
最後附上一張報錯的圖片