1.微信网页授权access_token与普通access_token区别

  1. 有效期:两者有效时间都是 7200s;
  2. 使用范围:通过网页授权获得的access_token,只能获取到对应的微信用户信息,与微信用户是一对一关系;而普通的access_token在有效期内可以使用,可以获取所有用户信息。
  3. 次数限制:普通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微信网页授权开发相关推荐

  1. 微信网页开发教程 php,PHP实现微信网页授权开发教程,php授权教程_PHP教程

    PHP实现微信网页授权开发教程,php授权教程 微信网页授权是服务号才有的高级功能,开发者可以通过授权后获取用户的基本信息:在此之前,想要获取消息信息只能在用户和公众号交互时根据openid获取用户信 ...

  2. php怎么开发微信网页,PHP实现微信网页授权开发的步骤

    这篇文章主要为大家分享了PHP实现微信网页授权开发教程,开发者可以通过授权后获取用户的基本信息,感兴趣的小伙伴们可以参考一下 微信网页授权是服务号才有的高级功能,开发者可以通过授权后获取用户的基本信息 ...

  3. 微信网页授权开发流程

    最近项目中需要做微信分享,由于开发者文档中写的比较复杂,于是乎整理出来,以待日后方便使用. 1 第一步:用户同意授权,获取code: 接口 : https://open.weixin.qq.com/c ...

  4. Java微信公众平台开发(十六)--微信网页授权(OAuth2.0授权)获取用户基本信息

    转自:http://www.cuiyongzhi.com/post/78.html 好长时间没有写文章了,主要是最近的工作和生活上的事情比较多而且繁琐,其实到现在我依然还是感觉有些迷茫,最后还是决定静 ...

  5. Java微信公众号开发微信网页授权之前端传递code方式获取用户信息

    本片博客讲解的网页授权分为两步,前端先传递backUrl(回调地址)到后台网页授权接口,该接口拿到回调地址后组装授权连接,重定向到前端页面,前端页面截取Code,传入后端获取用户信息方法,获取用户信息 ...

  6. Java微信公众号开发之网页授权获取用户基本信息

    本篇博客讲解的网页授权只需要前端传递一个backUrl(回调地址) 到后台接口,后台接口会完成整个授权流程,无需前端做更多工作: 一. 前言 微信公众号开发,需要用到网页授权获取用户信息,通过OAut ...

  7. 微信开发---微信网页授权、JS-SDK和微信公众号的基本设置

    用了好几个小时的时间,整理了一下关于公众号的思维导图,由于CSDN不能上传相对应的文件,所以萍子一一的分解开的截图附上来,希望对大家有所帮助哦~ 因为是电脑设备自动截图,又鉴于内容比较多,可能不是太清 ...

  8. 微信公众号开发(一) 微信网页授权登录

    微信网页授权登录 前期准备 授权登录 获取微信数据 处理授权拒绝 前期准备 1.微信公众号开发,首先要搞一个公众号,开发阶段可以申请一个公众平台测试账号. (进入到微信公众公众平台,找到开发者工具,点 ...

  9. java ajax 微信网页授权_ajax 实现微信网页授权登录的方法

    AJAX 的 ajax 实现微信网页授权登录的方法 项目背景 因为项目采用前后端完全分离方案,所以,无法使用常规的微信授权登录作法,需要采用 ajax 实现微信授权登录. 需求分析 因为本人是一个ph ...

最新文章

  1. hdu 1516(编辑距离+记录路径)
  2. mysql 集群 主从复制
  3. UltraESB的首选IDE – IntelliJ IDEA
  4. 交换机分布缓存_网络交换机缓存在数据中心的作用
  5. MySQL_JDBC_数据库连接池
  6. HTTP最常见的请求头
  7. 浅谈Eclipse GEF
  8. 10打开没有反应_【专利】表面施胶剂的反应装置
  9. MM模块采购收货的错误解决方案(2)
  10. Spring学习手札(二)面向切面编程AOP
  11. php时间戳怎么转换成时间格式,php时间戳如何转换为时间格式
  12. 影响内存频率的几个因素
  13. Python实现学生管理系统(功能全面)
  14. 除了高额房贷,美国购房者仍面临其他“财政危机”
  15. 如何将网址放到桌面并修改桌面快捷方式的图标
  16. 图片如何抠图换背景?怎样将图片抠成透明底图片?
  17. cortex m3/m4处理器的复位设计
  18. 使用python获取微医数据
  19. 期刊投稿状态_SCI 稿件在线投稿时遇到的几中状态
  20. ★ SMILES与分子图像的转换代码【及后续操作:识别、指标评估】

热门文章

  1. Spring框架之Spring Boot框架搭建详解|CSDN创作打卡
  2. python函数def里面嵌套def_python 函数嵌套函数_Python中的嵌套函数
  3. 抖音最快的涨粉方法 这里总结了6个最实用的方法
  4. RabbitMQ——入门介绍
  5. Python判断类型
  6. linux远程连接工具SecureCRT
  7. Java面向对象特征之三 多态
  8. 计算混淆矩阵和Kappa系数
  9. sqlmap指定cookie_sqlmap使用
  10. 机器学习之Perceptron