java微信授权登录传参给redirect_uri 接口,回到原页面,传递多个参数

本文背景:

调用微信的授权登录的时候,我们第一步是需要获取用户同意授权的code,这里面有一个redirect_uri参数,当用户同意授权之后,就会回调访问这个redirect_uri,通常这redirect_uri可能是一个后台的接口,我们获取用户的信息之后和我们的注册业务进行绑定,那我们在保存完这个用户的个人信息之后,希望跳转回去用户最开始访问页面,那么就需要传递一个returnUrl的参数给我们的回调接口redirect_uri

String url = https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

(上面的参数APPID等,需要根据实际情况进行转码和替换)

实现方式1:

上面的url里面可以带一个参数state,这个参数是会被带回去给我们的redirect_uri的,所以我们把需要传递的参数用state带到回调接口redirect_uri就可以了,

比如我们想要把订单id"123456"带过去,那么上述url改成

String url = https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=123456#wechat_redirect,

 

如果我们希望多带几个参数呢,可以把参数用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。

 

相关问题:

不管是redirect_uri ,还是returnUrl,?后面都只能带一个参数再多的参数,会被过滤掉,

想要带多个参数,需要用json字符串的的形式

 

后端跳转到前台页面之后,如果不会刷新页面,需要前端帮忙刷新。

posted @ 2018-07-25 10:56  daisy,gogogo  阅读(2855)  评论(1编辑  收藏  举报