本文背景:
調用微信的授權登錄:
1、需要獲取用戶同意授權的code
(上面的參數APPID等捉偏,需要根據實際情況進行轉碼和替換)
實現方式1:
上面的url里面可以帶一個參數state,這個參數是會被帶回去給我們的redirect_uri的黔酥,所以我們把需要傳遞的參數用state帶到回調接口redirect_uri就可以了具温,
比如我們想要把訂單id"123456"帶過去桃序,那么上述url改成
如果我們希望多帶幾個參數呢厚者,可以把參數用json字符串的形式傳遞
String param = "{"type":1,"wxpOutTradeNo":"+wxpOutTradeNo +"}";
先對參數進行編碼玛追,然后再拼接甲献,這里直接使用了replace的方法,用編碼后的值立磁,替換了原來STATE的值
url =url.replace( "STATE", URLEncoder.encode( param, "UTF-8" ) )
然后我們在回調接口這里呈队,先把json字符串,轉成object的形式唱歧,再來獲取就可以了
String state = request.getParameter("state");
JSONObject object = new JSONObject(state);
String wxpOutTradeNo = (String)object.get( "wxpOutTradeNo" ); // 訂單號
實現方式2:
假如我們的回調接口 redirect_uri = user/wechatLoginCallBack,
最開始訪問的頁面是:api/news/newsList宪摧,那么我們的returnUrl = api/news/newsList粒竖,
首先需要給returnUrl進行編碼,String encodedReturnUrl = URLEncoder.encode( returnUrl , "UTF-8" )
然后把它加到redirect_uri 后面几于,再給redirect_uri 進行編碼蕊苗,(returnUrl在這里相當于進行了二次編碼)
String encodedRedirectUri = URLEncoder.encode( redirect_uri + "?returnUrl=" + encodedReturnUrl , "UTF-8" ) ); (?后面只能帶一個參數)
最后孩革,把這個編碼后的回調接口替換到url里面就可以了 url = requestUrl.replace( "REDIRECT_URI", encodedRedirectUri );
這樣就實現了參數傳遞岁歉。
最后的最后,我們在user/wechatLoginCallBack這個回調接口里面可以使用request.getParameter("returnUrl");來獲取我們原始訪問頁鏈接膝蜈,處理完各種邏輯之后再返回到這個頁面就可以了锅移。而且這個原始訪問頁returnUrl 還可以攜帶一個參數,比如api/news/newsList?id=123。