1. 程式人生 > >redirect_uri 引數錯誤的解決辦法

redirect_uri 引數錯誤的解決辦法

我通過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

最後附上一張報錯的圖片
這裡寫圖片描述