使用SDK方式进行微信授权
1.在pom.xml中添加依赖
<dependency>
<groupId>com.github.binarywang</groupId>
<artifacted>weixin-java-mp</artifacted>
<wersion>2.7.0</version>
</dependency>
2.输入网址:https://github.com/Wechat-Group/WxJava/wiki,

点开第一个,进入以下页面。并选择OAuth2网页授权。

3,写Controller文件
4.写配置文件:WxMpService 是一个接口,接口是一个特殊的类,也可以用new关键字后面跟他的实现类WxMpServiceImpl 创建对象wxMpService,
WxMpConfigStorage是对象WxMpService的属性。appId,Secret是 wxMpConfigStorage的属性

wxMpConfigStorage是一个接口,wxMpInMemoryConfigStorage是它的实现类。new出的对象wxMpConfigStorage是代表微信公众账号的类。
他的属性就是微信公众账号的属性。包括appId,Secret.


4。在配置文件中application.yml配置

5.(1)写一个与“微信账号相关的配置类”取名叫:WechatAccountConfig(自定义),@Data注解的使用可简化代码,不必写set和get方法。
@component和@ConfigurationProperties是注入config的两个不可缺少的注解。下图只展示了appId(公众平台id)和mpAppSecret(公众平台密匙)两个属性,
其实还有openAppId(开放平台Id), openAppSecret(开放平台密匙)等与微信账号相关的一些属性。

(2)使用WechatAccountConfig,注意:@Autowired注解的使用代替了 WechatAccountConfig accountConfig=new WechatAccountConfig.(使用new关键字创建实例)
(3)wxMpConfigStorage.setAppId(accountConfig.getMpAppId);//将微信公众号的属性赋给wxMpConfigStorage的意义是便于在控制台显示输出结果。
wxMpConfigStorage是一个返回值,类似于一个盒子里面包装了各种属性。
(4)因为不同的appId对应于不同的openId.,例mpAppId(微信公众平台)和openAppId(微信开放平台)对应的openId是不同的,写WechatMpConfig配置的目的是将appId赋值给wxMpService,让它知道 要获取哪个appId的openAppId,再获取openId。
wxMpOAuth2AccessToken=wxMpService.oauth2getAccessToken(code);
String openId=wxMpOAuth2AccessToken.getOpenId();


6.
构造网页授权url
首先构造网页授权url,然后构成超链接让用户点击:
WxMpService wxMpService = ...;
String url = ...;
String redirectUrl=wxMpService.oauth2buildAuthorizationUrl(url, WxConsts.OAuth2Scope.SNSAPI_USERINFO, null)
redirect_uri(redirectUrl)是用户授权后重定向的回调链接地址,即引导用户在微信中点击的地址,url是参数,wxMpService通过方法oauth2buildAuthorizationUrl将url赋给redirectUrl
获得access token
当用户同意授权后,会回调所设置的url并把authorization code传过来,然后用这个code获得access token,其中也包含用户的openid等信息
WxMpOAuth2AccessToken wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(code);
//
获得用户基本信息
WxMpUser wxMpUser = wxMpService.oauth2getUserInfo(wxMpOAuth2AccessToken, null);
代码如下所示:

controller层的代码说明:
1.redirectUrl是用户授权后重定向的回调链接地址,即引导用户在微信中点击的地址,url和returnUrl是参数,wxMpService通过方法oauth2buildAuthorizationUrl将url和returnUrl
赋给redirectUrl,例:http://127.0.0.1/sell/wechat/authorize?returnUrl=www.imooc.com,这就是一个redirectUrl,其中url=http://127.0.0.1/sell/wechat/authorize
也可以使用外网地址:url=http://sell/natapp4.cc/sell/wechat/authorize,这里的returnUrl是慕课网的地址,也可以写其他网站的地址。程序员根据需要传参。
因此redirectUrl,url和returnUrl是完全不同的概念。
2.String redirectUrl=wxMpService.oauth2buildAuthorizationUrl(url, WxConsts.OAuth2Scope.SNSAPI_USERINFO, returnUrl)
参数state的是我们传递什么,就会回传什么,由于我们传递的参数是returnUrl,所以要把returnUrl回传过来,使用 urlEncoder 对returnUrl链接进行处理.
例当用户点击:http://127.0.0.1/sell/wechat/authorize?returnUrl=www.imooc.com,成功进入后,地址栏就会反馈给我们一个地址:
www.imooc.com?openId=......(returnUrl被回传)
.
使用SDK方式进行微信授权的更多相关文章
- springboot微信sdk方式进行微信支付
https://blog.csdn.net/xsg6509/article/details/80342744
- 使用uView UI+UniApp开发微信小程序--微信授权绑定和一键登录系统
在前面随笔<使用uView UI+UniApp开发微信小程序>和<使用uView UI+UniApp开发微信小程序--判断用户是否登录并跳转>介绍了微信小程序的常规登录处理和验 ...
- Android接入微信SDK之一:发起微信授权登录
1.重要的事情首先说! 包名.应用签名.app id 三者都必须和在腾讯上申请的一致!!!否则将不能成功. 包名:就是在腾讯上申请的包名 应用签名:使用微信官网提供的<签名生成工具>(这个 ...
- 解决微信授权回调页面域名只能设置一个的问题 [php]
最终的解决方案是:https://github.com/liuyunzhuge/php_weixin_proxy,详细的介绍请往下阅读. 在做项目集成微信登录以及微信支付的时候,都需要进行用户授权.这 ...
- 微信公众平台开发——微信授权登录(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是一个开放协议,允许用户让第三方应用 ...
- .net core identity集成微信授权登录
最快的方式是直接nuget安装AspNetCore.Authentication.WeChat包. 想要知道是如何实现的,可以看下面github上面的源码. 源码在这里:https://github. ...
- 微信授权登录mock(在没有真实微信账号的情况下测试大量微信账户授权登录的情况)
场景介绍 对于构建在微信公众号的系统,帐号体系往往使用微信授权登录(如各类微信商城应用系统). 这样操作不仅可以实现静默注册,对用户几乎是无感的,同时也达到了区分用户,获取用户基本信息(头像,昵称等) ...
随机推荐
- ACdream 1157 (cdq分治)
题目链接 Segments Time Limit: 4000/2000MS (Java/Others)Memory Limit: 20000/10000KB (Java/Others) Problem ...
- ASP.NET Core学习——1
ASP.NET Core介绍 ASP.NET Core是一个新的开源和跨平台的框架,用于构建如Web应用.物联网(IoT)应用和移动后端应用等连接到互联网的基于云的现代应用程序.ASP.NET Cor ...
- vim与ctags/cscope的完美结合
1. 安装vim/ctags/cscope ctag 2. 在源码根目录下执行 sudo ctags -R . 会生成tags文件,里面包含着整个源码目录下的符号信息. 3. 直接到达某个符号(比 ...
- 剑指offer——62数组种数字出现的次数
题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 题解: 我们想到异或运算的一个性质:任何一个数字异或它自己都等于0.也就是说,如果我们从头到尾依 ...
- 10 个轻松学会 CSS3 的优秀在线资源
本文包揽 CSS 的所有关键点,并且引入了最新的 CSS3 版本.这个先进的技术提供超级多的新标签和属性,使得 Web 设计构建创新更简单,帮助开发者创建具有新趋势,带有漂亮布局的 Web 页面.随着 ...
- leetcode.字符串.409最长回文串-Java
1. 具体题目 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串.在构造过程中,请注意区分大小写.比如 "Aa" 不能当做一个回文字符串. 注意: 假设 ...
- C-Ubuntu中MySQL出现ERROR1698(28000):Access denied for user root@localhost错误解决方法
卸载原先的MySQL,重新安装过程中没有提示设置密码, 当键入命令:mysql -uroot -p; 不知密码是什么,输入主机的密码以及不输入密码,回车后都出现标题错误. 寻找多篇相关博文,验证如下博 ...
- hdu6396 /// fread()快速读入挂
题目大意: 给定n k 给定主角具有的k种属性 给定n个怪兽具有的k种属性和打死该怪兽后能得到的k种属性对应增幅 求主角最多能打死多少怪兽和最终主角的k种属性 k最大为5 开5个优先队列贪心 快速读入 ...
- SpringBoot Controller 中使用多个@RequestBody的正确姿势
最近遇到Controller中需要多个@RequestBody的情况,但是发现并不支持这种写法, 这样导致 1.单个字符串等包装类型都要写一个对象才可以用@RequestBody接收: 2.多个对象需 ...
- js进阶之路,关于UI资源的优化(转载)
以下场景往往由于事件频繁被触发,因而频繁执行DOM操作.资源加载等重行为,导致UI停顿甚至浏览器崩溃. 1. window对象的resize.scroll事件 2. 拖拽时的mousemove事件 3 ...
