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字符串的的形式
后端跳转到前台页面之后,如果不会刷新页面,需要前端帮忙刷新。
java微信授权登录传参给redirect_uri 接口,回到原页面,传递多个参数的更多相关文章
- 微信小程序 带参调用后台接口 循环渲染页面 wx.request wx:for
test.js 文件里的onLoad function getarticles(p,order,mythis) { wx.request({ url: 'https://ganggouo.cn/ind ...
- 微信授权登录-微信公众号和PC端网站
https://blog.csdn.net/qq_34664239/article/details/79107529 一.微信公众号授权登录——微信公众平台 微信授权登录,并调用后台接口,获取用户信息 ...
- java结合node.js非对称加密,实现密文登录传参——让前后端分离的项目更安全
前言 在参考互联网大厂的登录.订单.提现这类对安全性操作要求较高的场景操作时发现,传输的都是密文.而为了目前项目安全,我自己负责的项目也需要这方面的技术.由于,我当前的项目是使用了前后端分离技术, ...
- 微信公众平台开发——微信授权登录(OAuth2.0)
1.OAuth2.0简介 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户 ...
- 微信授权登录(OAuth2.0)-- 随记
1.OAuth2.0简介 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户 ...
- [转] Android:微信授权登录与微信分享全解析
https://wohugb.gitbooks.io/wechat/content/qrconnent/refresh_token.html http://blog.csdn.net/xiong_it ...
- 微信授权登录(PHP)
微信授权登录(PHP) 微信授权 OAuth2.0授权 微信网页授权 主要是在项目中遇到网页授权登录这个需求,就对此做些总结记录. OAuth2.0授权 OAuth是一个开放协议,允许用户让第三方应用 ...
- 【第二十一篇】手C# MVC 微信授权登录 OAuth2.0授权登录
首先一定要熟读,最起码过一遍微信开发者文档 微信开发者文档 文档写的很清楚 授权登录四步走 在正文开始前,我得讲清楚一个事情 敲黑板,划重点:微信一共有两个 access_token 一个是7200就 ...
- wap2app(五)-- 微信授权登录以及踩过的坑
应用场景是:用Hbuilder打包app,在app中点击微信授权登录或者某一操作,调起微信授权登录,用户授权后拿到用户信息. 一.登录插件配置 先配置微信登录参数 appid和appsecret,在m ...
随机推荐
- 20145212罗天晨 逆向及Bof基础实践
20145212罗天晨<网络对抗>第1周学习总结--逆向及Bof基础实践 逆向及Bof基础实践 一.实践目标 1.运行原本不可访问的代码片段 2.强行修改程序执行流 3.以及注入运行任意代 ...
- canvas压缩图片
1.canvas.toDataUrl压缩图片 canvas的toDataUrl方法可以将内容导出为base64编码格式的图片,采用base64编码将比源文件大1/3,但是该方法可以指定导出图片质量,所 ...
- JS ——DOM,BOM(包含盒模型,动画)总结
JS盒模型 content: 通过计算后样式获取padding + content: box.clientWidth | box.clientHeightborder + padding + cont ...
- Centos7.2 修改网卡名称
查看ip [root@localhost network-scripts]# ip addr : lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue ...
- zedgraph右键菜单的汉化
http://blog.csdn.net/jeryler/article/details/7876376 修改 zedGraphControl的ContextMenuBuilder事件即可! zedG ...
- 第八章 对称加密算法--AES
注意:本节内容主要参考自<Java加密与解密的艺术(第2版)>第7章“初等加密算法--对称加密算法” 8.1.AES 特点: 密钥建立时间短.灵敏性好.内存需求低(不管怎样,反正就是好) ...
- 《Robot Framework自动化测试修炼宝典》道长
1. Python下载https://www.python.org/downloads 2. Setuptools下载https://pypi.python.org/pypi/setuptools用原 ...
- 《A_Pancers》第二次作业 基于Android系统的音乐播放系统项目开题报告
小组名 N A B C D 总分 Just_Do_IT! 8 8 9 9 8 42 Miracle-House 8 8 7 8 8 39 ymm3 9 8 8 8 8 41 Spring_Four ...
- jq的attr()与prop()之间区别
1.attr() 一直存在,prop() 仅存在于 jq-1.6 及其之后 2.新版本jq使用细节: 2.1 自定义添加至dom节点的属性,用attr获取 2.2 表单类checked.selecte ...
- HDU 6090 Rikka with Graph
Rikka with Graph 思路: 官方题解: 代码: #include<bits/stdc++.h> using namespace std; #define ll long lo ...