使用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(在没有真实微信账号的情况下测试大量微信账户授权登录的情况)
场景介绍 对于构建在微信公众号的系统,帐号体系往往使用微信授权登录(如各类微信商城应用系统). 这样操作不仅可以实现静默注册,对用户几乎是无感的,同时也达到了区分用户,获取用户基本信息(头像,昵称等) ...
随机推荐
- JZOI1169A 平均数Ave
#include <cstdio> #include <cmath> #define lztin() read() #define ztyout( a ) printf( &q ...
- 从pcap文件中分析出数据包
import dpkt import struct import sys,os f=file(sys.argv[1],"rb") pcap=dpkt.pcap.Reader(f) ...
- node 创建静态web服务器(上)
声明:本文仅用来做学习记录. 本文将使用node创建一个简单的静态web服务器. 准备工作: 首先,准备好一个类似图片中这样的页面 第一步: 创建 http 服务: const http = requ ...
- Apache配置 PHP 支持
1,在服务区安装PHP 解压 php 到纯英文路径目 2,添加 PHP处理模块 LoadModule php7_module C:/ProgramData/php/php7apache2_4.dl 3 ...
- C#十六进制值0x12,是一个无效字符 - 程序园
原文:C#十六进制值0x12,是一个无效字符 - 程序园 我正在加载很多xml文档,其中一些返回错误,如“十六进制值0x12,是无效字符”,并且有不同的字符.如何删除它们? 我在这里做了一个小的研 ...
- 【HDOJ】 P2054 A == B ?
题目意思不太多解释,具体WA的情况可以举出一下特例 0 +0 0.00 0 +1 -2 +1.00 -1.00 +.2 -.2 .0 .1 等等 不过可以发现对上面的数据处理,可以分为以下几步 1.找 ...
- android项目各个文件详解
res目录说明 android应用的res目录是一个特殊的目录,该项目里存放了 android应用所用的全部资源,包括图片资源.字符串资源. 颜色资源.尺寸资源等. /res/value/string ...
- 使用Kettle的命名参数动态执行作业
关于如何根据传入的不同参数,达到动态运行作业的目的,这里不介绍.只提供一个思路,就是不同的调度进程调度同一个Kettle文件时,传入了不同的参数,从而得到不同的数据. 如下图所示: 1. 先设置参数名 ...
- SpringMVC和spring常见面试题总结
1.什么是Spring MVC ?简单介绍下你对springMVC的理解? Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,C ...
- centos6和7安装vnc
centos6安装vnc yum安装 yum groupinstall -y "Desktop" yum install -y tigervnc-server tigervnc-s ...
