• 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字符串的的形式

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

  • 相关阅读:
    chrome安装vue-devtools
    企业网络设计
    nginx的安装
    Typora 的使用
    如何学习dubbo?
    关于原码反码和补码以及byte&0xff
    HttpClient以及连接池的使用
    计算机网络读书笔记:tcp面试常见问题都在里面了
    接口类是否继承自Object?
    数据挖掘会议记录
  • 原文地址:https://www.cnblogs.com/daisygogogo/p/9364731.html
Copyright © 2020-2023  润新知