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. 弧形背景html,JS实现带圆弧背景渐变效果的导航菜单代码
  2. 论c++/java/c 与python的语法上的区别
  3. Python词云 wordcloud 十五分钟入门与进阶
  4. MATLAB随机信号统计特征
  5. boost::adl_move_swap相关用法的测试程序
  6. 0xC00000FD: Stack overflow (parameters: 0x00000000, 0x003E2000).错误
  7. 匹配行linux中grep命令的使用
  8. 13个圆可以画什么?数学与艺术完美邂逅!原来数学也可以这么美
  9. 德标螺纹规格对照表_多大的螺栓用多大规格的扳手,一文看懂!
  10. “父亲项目”走进澳洲校园 助父子建立联系
  11. Jni C 与 Java 互调
  12. 各种学习资料链接 干货 啃啃啃
  13. 推荐一款限时下载应用(听心字典)
  14. 中小型企业基于大数据技术的项目实践
  15. vue用post请求下载文件
  16. AH快递单打印查询软件V3.68
  17. 山西机电职业技术学院计算机专业,山西机电职业技术学院怎么样?山西机电职业技术学院好吗?(历年分数、专业设置、校园环境、教学实力、名人校友) - 职友集...
  18. URAL1389. Roadworks(dp)
  19. 奔驰A200L升级内饰氛围灯,发光涡轮等,绚丽多彩,温馨又惬意
  20. SEO快排的行业秘密,原来SEO快排套路这么深

热门文章

  1. python网上批量下载表格_python爬虫智能翻页批量下载文件的实例详解
  2. Linux locate模糊查询,linux命令: 两个查找工具 locate,find(示例代码)
  3. VxWorks上高精度定时器(auxClk)的配置和使用
  4. Linux echo -e 的作用
  5. Python基础-推导式
  6. cygwin上编译c语言,Cygwin编译c程序步骤
  7. 如何查看服务器内存使用情况--top
  8. Android_控制闪光灯
  9. 在树莓派上使用自制的USB声卡
  10. 欧几里得几何求解——建模实践