美文网首页
授权登录传参

授权登录传参

作者: tenro | 来源:发表于2022-10-31 11:04 被阅读0次

    本文背景:

    调用微信的授权登录:
      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。

    相关文章

      网友评论

          本文标题:授权登录传参

          本文链接:https://www.haomeiwen.com/subject/zlnktdtx.html