这篇文章介绍了使用微信公众号如何做到从web端提供二维码扫描登录功能,主要分认证的公众号和未认证的普通公众号,两个方向实现扫描登录。这篇文章介绍了使用微信公众号如何做到从web端提供二维码扫描登录功能,主要分认证的公众号和未认证的普通公众号,两个方向实现扫描登录。
TOC(真心顶不住微信公众号开发文档的乱并且刚接触的开发者绝对一头雾水,决心编写,防止更多人跳坑!)
前期准备
注册并配置微信公众号,获取 AppID 和 AppSecret。
配置开发者模式,设置服务器 URL 和 Token。(这一步以下会细讲)
认证的公众号
认证的公众号一年年费 300RMB,可以拥有“生成带参数的二维码”这一项接口权限,以及支付借口权限等具体可以去官方文档登录后查看 “设置与开发”-》“接口权限”
配置准备
在 springboot 中 application.yml 配置微信公众号配置,appid、secret、token、aesKey,以及回调的接口 callback
wx:
mp:
callback:
configs:
- appId: # 第一个公众号的appid
secret: # 公众号的appsecret
token: # 接口配置里的Token值
aesKey: # 接口配置里的EncodingAESKey值
在 pom.xml 添加微信公众号开发的架包(或者自己写也可省了略)
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
</dependency>
初始化 WxMpService
在配置类中初始化 WxMpService 类的方法返回 server 注入 Bean 中,如下
@Bean
public WxMpService wxMpService() {
final List<WxMpProperties.MpConfig> configs = this.properties.getConfigs();//这里是获取application.yml配置信息,可以自己写方法获取
if (configs == null) {
throw new RuntimeException("没有配置微信公众号信息!");
}
WxMpService service = new WxMpServiceImpl();
service.setMultiConfigStorages(configs
.stream().map(a -> {
WxMpDefaultConfigImpl configStorage;
configStorage = new WxMpDefaultConfigImpl();
configStorage.setAppId(a.getAppId());
configStorage.setSecret(a.getSecret());
configStorage.setToken(a.getToken());
configStorage.setAesKey(a.getAesKey());
return configStorage;
}).collect(Collectors.toMap(WxMpDefaultConfigImpl::getAppId, a -> a, (o, n) -> o)));
return service;
}
核心代码
可以使用 Cpolar Web UI 来做内网穿透进行测试,具体安装和设置可以在本站搜索“Cpolar 内网穿透”,没有的只能发布自己服务器进行 url 配置
- 首先先在微信公众号填写服务器配置
{% note warning modern %}
服务器地址(URL)一定要外网能访问,并且验证签名后返回 echostr,服务器配置的 token 和公众号的 token 要一致,这样才能在公众号上配置成功
{% endnote %}
{% note warning modern %}
配置完后一定要启用,不然无法生效
{% endnote %}
验证代码
/**
* 微信认证配置接口
*
* @param signature
* @param timestamp
* @param nonce
* @param echostr
* @return
*/
@GetMapping(value = "/authGet", produces