Java微信网页授权开发
1.微信网页授权access_token与普通access_token区别
- 有效期:两者有效时间都是 7200s;
- 使用范围:通过网页授权获得的access_token,只能获取到对应的微信用户信息,与微信用户是一对一关系;而普通的access_token在有效期内可以使用,可以获取所有用户信息。
- 次数限制:普通access_token每天获取最多次数为2000次;而网页授权的access_token获取次数没有限制。
2.授权回调URI传递自定义参数
注意:微信授权回调uri不能带端口号
我的回调地址是:https://m.abc.com/#/pages/user/register?phone=15300220033
说明:
phone是自定义参数;
https://m.abc.com/#/pages/user/register是前端的地址;
流程是:发起授权->用户同意授权->微信回调到前端->前端获取到微信code/state和自定义参数phone->前端通过phone从接口查询userId;通过code从接口获取unionId->前端把unionId和userId传给注册接口->接口完成后续逻辑。
以下代码用于拼接授权url:
// 自定义参数拼接
String args = String.format("?phone=%s", phone);/*** 获取微信授权url*/
public static String getAuthUrl(String appId, String callBackUrl, String state, String args) throws UnsupportedEncodingException {String redirect_uri = URLEncoder.encode(callBackUrl + args, "UTF-8");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";return url.replace("APPID",appId).replace("REDIRECT_URI",redirect_uri).replace("SCOPE","snsapi_userinfo").replace("STATE",state);
}
通过以上代码拼接的发起授权的url:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=myappid&redirect_uri=https%3A%2F%2Fm.abc.com%2F%23%2Fpages%2Fuser%2Fregister%3Fphone%3D15300220033&response_type=code&scope=snsapi_userinfo&state=70a38dd8b640491a93347614bc1d4ec6#wechat_redirect
微信回调url:
https://m.abc.com/?code=0817Cznv0FmkBg19vFnv0G1ynv07Cznp&state=70a38dd8b640491a93347614bc1d4ec6#/pages/user/register?phone=15300220033
这样就实现了授权回调uri携带自定义参数的目的。
3.前后端分离,网页授权设计方案
微信公众号网页授权登录,因为是前后端项目,所以跳转是在前端做的,所以回调地址配置的是前端页面地址。
前端需要的步骤是:
1、访问后端接口,获取微信授权url。
2、前端跳转到该授权url。
3、用户点击授权,微信自动会跳转一个重定向页面,也就是回调页面。
4、前端获取到重定向链接上的code,截取下来发送个后端。(这个链接地址是你自己设置的,就是授权成功你需要跳回的页面,然后微信会在这个页面上地址上加上一个code)
5、后端会根据传过去的code,向微信请求头像昵称等;
后面的事情就是交给后端了。
4.防篡改,state用法
发起授权时,生成state值,并拼接到授权url上
// state(防止csrf攻击)存入缓存,有效期60秒
String state = UUID.randomUUID().toString().replaceAll("-", "");
redisTemplate.opsForValue().set(String.format(WX_CACHE_KEY_STATE, state), "1", 60, TimeUnit.SECONDS);
回调回来时,校验state
//判断state是否合法
if (StringUtils.isBlank(code) || StringUtils.isBlank(state) || ! isValidState(state)) {return Result.error("登录超时,请重新登录");
}/*** 校验state*/@Overridepublic boolean isValidState(String state) {String key = String.format(WX_CACHE_KEY_STATE, state);String value = redisTemplate.opsForValue().get(key);// 校验一次就删除redisTemplate.delete(key);return StringUtils.isNotBlank(value);}
5.其他
网页授权回调地址配置可以带端口吗?
答:必须是80端口。否则,报redirect_uri参数错误。改成80端口就好了。
测试号支持授权回调地址带端口号。例如:test.aaa.com:9090
微信公众号提示10005错误
①订阅号没有相关的权限
②账号没有认证,没有相关的权限
③scope 参数位置错误
首先检查您的微信号是服务号还是订阅号, 如果是订阅号,腾讯没有开放接口,故没有权限;
授权回调域名配置规范为全域名且不带http,假如需要网页授权的域名为:”www.qq.com“,配置以后此域名下面页面“http://www.qq.com/music.html、http://www.qq.com/login.html ”都可以进行OAuth2.0鉴权。
Scope 参数错误或没有Scope权限
用订阅号的appId发起授权登录,会提示“Scope 参数错误或没有Scope权限”。因为订阅中没有获取到微信网页授权接口的权限。
redirect_uri域名与后台配置不一致
查看公众号配置的域名和redirect_uri后面你传的参数域名是否一致。配置的域名不能带端口,不能带http
必须关注此测试号,错误码10006
需要关注自己的测试号呀。测试号管理下面有一个测试号二维码,关注一下就可以了。
Java微信网页授权开发相关推荐
- 微信网页开发教程 php,PHP实现微信网页授权开发教程,php授权教程_PHP教程
PHP实现微信网页授权开发教程,php授权教程 微信网页授权是服务号才有的高级功能,开发者可以通过授权后获取用户的基本信息:在此之前,想要获取消息信息只能在用户和公众号交互时根据openid获取用户信 ...
- php怎么开发微信网页,PHP实现微信网页授权开发的步骤
这篇文章主要为大家分享了PHP实现微信网页授权开发教程,开发者可以通过授权后获取用户的基本信息,感兴趣的小伙伴们可以参考一下 微信网页授权是服务号才有的高级功能,开发者可以通过授权后获取用户的基本信息 ...
- 微信网页授权开发流程
最近项目中需要做微信分享,由于开发者文档中写的比较复杂,于是乎整理出来,以待日后方便使用. 1 第一步:用户同意授权,获取code: 接口 : https://open.weixin.qq.com/c ...
- Java微信公众平台开发(十六)--微信网页授权(OAuth2.0授权)获取用户基本信息
转自:http://www.cuiyongzhi.com/post/78.html 好长时间没有写文章了,主要是最近的工作和生活上的事情比较多而且繁琐,其实到现在我依然还是感觉有些迷茫,最后还是决定静 ...
- Java微信公众号开发微信网页授权之前端传递code方式获取用户信息
本片博客讲解的网页授权分为两步,前端先传递backUrl(回调地址)到后台网页授权接口,该接口拿到回调地址后组装授权连接,重定向到前端页面,前端页面截取Code,传入后端获取用户信息方法,获取用户信息 ...
- Java微信公众号开发之网页授权获取用户基本信息
本篇博客讲解的网页授权只需要前端传递一个backUrl(回调地址) 到后台接口,后台接口会完成整个授权流程,无需前端做更多工作: 一. 前言 微信公众号开发,需要用到网页授权获取用户信息,通过OAut ...
- 微信开发---微信网页授权、JS-SDK和微信公众号的基本设置
用了好几个小时的时间,整理了一下关于公众号的思维导图,由于CSDN不能上传相对应的文件,所以萍子一一的分解开的截图附上来,希望对大家有所帮助哦~ 因为是电脑设备自动截图,又鉴于内容比较多,可能不是太清 ...
- 微信公众号开发(一) 微信网页授权登录
微信网页授权登录 前期准备 授权登录 获取微信数据 处理授权拒绝 前期准备 1.微信公众号开发,首先要搞一个公众号,开发阶段可以申请一个公众平台测试账号. (进入到微信公众公众平台,找到开发者工具,点 ...
- java ajax 微信网页授权_ajax 实现微信网页授权登录的方法
AJAX 的 ajax 实现微信网页授权登录的方法 项目背景 因为项目采用前后端完全分离方案,所以,无法使用常规的微信授权登录作法,需要采用 ajax 实现微信授权登录. 需求分析 因为本人是一个ph ...
最新文章
- 弧形背景html,JS实现带圆弧背景渐变效果的导航菜单代码
- 论c++/java/c 与python的语法上的区别
- Python词云 wordcloud 十五分钟入门与进阶
- MATLAB随机信号统计特征
- boost::adl_move_swap相关用法的测试程序
- 0xC00000FD: Stack overflow (parameters: 0x00000000, 0x003E2000).错误
- 匹配行linux中grep命令的使用
- 13个圆可以画什么?数学与艺术完美邂逅!原来数学也可以这么美
- 德标螺纹规格对照表_多大的螺栓用多大规格的扳手,一文看懂!
- “父亲项目”走进澳洲校园 助父子建立联系
- Jni C 与 Java 互调
- 各种学习资料链接 干货 啃啃啃
- 推荐一款限时下载应用(听心字典)
- 中小型企业基于大数据技术的项目实践
- vue用post请求下载文件
- AH快递单打印查询软件V3.68
- 山西机电职业技术学院计算机专业,山西机电职业技术学院怎么样?山西机电职业技术学院好吗?(历年分数、专业设置、校园环境、教学实力、名人校友) - 职友集...
- URAL1389. Roadworks(dp)
- 奔驰A200L升级内饰氛围灯,发光涡轮等,绚丽多彩,温馨又惬意
- SEO快排的行业秘密,原来SEO快排套路这么深