授权登录传参

2022-10-31  本文已影响0人  tenro

本文背景:

调用微信的授权登录:
  1、需要获取用户同意授权的code

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。

上一篇下一篇

猜你喜欢

热点阅读