微信网页授权步骤说明
2023-12-13 11:37:13
总览
- 引导用户进入授权页面同意授权,获取code
- 通过code换取网页授权access_token(与基础支持中的access_token不同)
- 如果需要,开发者可以刷新网页授权access_token,避免过期(一般不需要)
- 通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)
获取code
解释:让用户跳转到拼接后的指定地址,进行授权获取code,然后重定向到redirect_uri,重定向后的地址带有code和state参数
拼接地址:https://open.weixin.qq.com/connect/oauth2/authorize?appid=appid&redirect_uri=redirect_uri&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect,其中appid和redirect_uri需要替换,且redirect_uri需要encodeURI处理,state为可选值用于用户自定义传参。
通过code换取access_token和用户信息
这里只写Java示例,且使用weixin-java-mp依赖
引入以下依赖
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
<version>4.5.0</version>
</dependency>
在application.yml中添加如下参数
# 自定义微信相关配置信息
wx:
mp:
# 微信公众号的appid
appId: wxajhlksfnjls777777
# 信公众号的app secret
secret: sds56dg4fd5sd54s5555555
创建WxMpProperties如下
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@Data
@ConfigurationProperties(prefix = "wx.mp")
public class WxMpProperties {
/**
* 设置微信公众号的appid
*/
private String appId;
/**
* 设置微信公众号的app secret
*/
private String secret;
}
创建WxMpConfiguration如下
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class WxMpConfiguration {
@Autowired
private WxMpProperties wxMpProperties;
/**
* 微信客户端配置存储
*/
@Bean
public WxMpConfigStorage wxMpConfigStorage() {
WxMpDefaultConfigImpl configStorage = new WxMpDefaultConfigImpl();
// 设置微信公众号appId
configStorage.setAppId(wxMpProperties.getAppId());
// 设置微信公众号appSecret
configStorage.setSecret(wxMpProperties.getSecret());
return configStorage;
}
/**
* WxMpService多个实现类 声明一个实例
*/
@Bean
public WxMpService wxMpService() {
WxMpService wxMpService = new WxMpServiceImpl();
wxMpService.setWxMpConfigStorage(wxMpConfigStorage());
return wxMpService;
}
}
然后在Controller中引入WxMpService
@RestController
public class LoginController {
@Autowired
private WxMpService wxMpService;
@PostMapping("/wx/login")
public SysAjaxResult login(@RequestBody Map<String, String> params) {
String code = MapUtils.getString(params, "code");
if (StringUtils.isBlank(code)) {
return SysAjaxResult.error("code不能为空");
}
try {
// 获取accessToken,获取用户信息(据官方文档,下面两个接口调用频率为每分钟5万次)
WxOAuth2AccessToken accessToken = wxMpService.getOAuth2Service().getAccessToken(code);
WxOAuth2UserInfo userInfo = wxMpService.getOAuth2Service().getUserInfo(accessToken, null);
// 通过openid校验有没有当前用户,没有则新增
String openid = userInfo.getOpenid();
return AjaxResult.success();
} catch (WxErrorException e) {
e.printStackTrace();
}
return AjaxResult.error();
}
}
时效
接口名 | 频率限制 |
---|---|
通过 code 换取 access_token | 5 万/分钟 |
获取用户基本信息 | 5 万/分钟 |
刷新 access_token | 10 万/分钟 |
文章来源:https://blog.csdn.net/jl15988/article/details/134966152
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!