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 ...
随机推荐
- UVa 10891 Game of Sum - 动态规划
因为数的总和一定,所以用一个人得分越高,那么另一个人的得分越低. 用$dp[i][j]$表示从$[i, j]$开始游戏,先手能够取得的最高分. 转移通过枚举取的数的个数$k$来转移.因为你希望先手得分 ...
- Cocoa 初识
1,判断程序是否第一次启动 OC: if (![[NSUserDefaults stringOfKeyInStandardDefaults:FirstOpenApp] boolValue]) { [s ...
- sql逻辑查询语句的执行顺序
SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN ...
- JavaScript:Function/Object/prototype/__proto__
console.log(Object.__proto__===Function.prototype); //true console.log(Object.prototype.__proto__); ...
- 51NOD 1087 1 10 100 1000
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1087 暴力大法 #include<bits/stdc++.h> ...
- C#学习笔记(二十):C#总结和月考讲解
m1w1d2_console_variable_constant 输入Console.WriteLine(); 输出Console.ReadLine(); 快捷键 折叠代码:快捷键“Ctrl+ K + ...
- HTML5 Plus 拍照或者相册选择图片上传
HBuilder+HTML5 Plus+MUI实现拍照或者相册选择图片上传,利用HTML5 Plus的Camera.Gallery.IO.Storage和Uploader来实现手机APP拍照或者从相册 ...
- ros 使用命令测试topic
发布话题 $ rostopic pub -r /chatter std_msgs/String "test" 输出数据: $ rostopic echo /chatter data ...
- selenium-chrome-headless
#coding=utf-8 from selenium import webdriver import time chrome_options = webdriver.ChromeOptions() ...
- dat.gui.js
].appendChild(b)},inject:function(e,a){a=a||document;].appendChild(b)}}}(); dat.utils.common=functio ...