微信第三方登录有两种方式:扫码登录(微信开放平台)和公众号登录(微信公众平台)
扫码登录可以用于PC等跨平台应用,而公众平台必须在微信应用程序内使用,且必须关注公众号。
下面以公众平台为例,介绍如何基于Spring Social实现微信用户授权并获取到用户信息。(微信开放平台类似)
<强>第一步:到微信公众平台后台注册应用并进行相关设置强>
微信公众平台后台地址:https://mp.weixin.qq.com/
也可以先注册一个测试号:https://mp.weixin.qq.com/debug/cgi-bin/sandbox& # 63; t=沙箱/登录
用微信扫码登录后台后可以看到如下页面:
其中的“appID”和“appsecret”需要记录下来,一会要用到。
滑到下方找到“网页授权获取用户基本信息 ",点击”修改 ",将自己测试服务器的域名或IP填上去:
修改页面:
<强>第二步:添加相关代码强>
我们假设服务端是基于springboot。
1。增加spring-social-wechat依赖:
Maven:
& lt; dependency> & lt; groupId> com.ikasoa & lt; artifactId> spring-social-wechat & lt; version> 1.3.1 & lt;/dependency>
或者Gradle:
编译“com.ikasoa: spring-social-wechat: 1.3.1”
2。增加配置项目
application.yml:
春天: 社会: wechatmp: 应用id (appID): app-secret (appsecret):
或者application.properties:
spring.social.wechatmp.app-id=[appID] spring.social.wechatmp.app-secret=[appsecret]
其中“ appID ”和“ appsecret "可以从微信公众平台后台得到。
3。修改Application.java
增加注解@EnableSocial,并引用自动配置类(WechatMpAutoConfiguration.class):
Application.java
进口org.springframework.boot.SpringApplication; 进口org.springframework.boot.autoconfigure.SpringBootApplication; 进口org.springframework.context.annotation.Import; 进口org.springframework.social.config.annotation.EnableSocial; 进口org.springframework.social.wechat.autoconfigurer.WechatMpAutoConfiguration; @SpringBootApplication @EnableSocial @ import (WechatMpAutoConfiguration.class) 公共类应用程序{ 公共静态void main (String [] args){抛出异常 SpringApplication.run (Application.class, args); } }
4。增加SignInAdapter并注册ProviderSignInController
SignInAdapter用来处理微信授权成功后的相关操作,例如:
WechatSignInAdapter.java
进口org.springframework.social.connect.Connection; 进口org.springframework.social.connect.ConnectionKey; 进口org.springframework.social.connect.web.SignInAdapter; 进口org.springframework.social.wechat.api.User; 进口org.springframework.social.wechat.api.Wechat; 进口org.springframework.stereotype.Component; 进口org.springframework.web.context.request.NativeWebRequest; @ component 公共类WechatSignInAdapter实现SignInAdapter { @Override signIn公共字符串(字符串openId, Connection<& # 63;比;连接,NativeWebRequest请求){ ConnectionKey关键=connection.getKey ();//通过providerId判断是否为微信公众平台授权 如果(wechatmp .equalsIgnoreCase (key.getProviderId ())) {//通过微信openId获取到用户详细信息 用户用户=((微信)connection.getApi ()) .userOperations () .getUserProfile (openId);//微信用户详细信息,可以记录到数据库。这里直接打印到后台 System.out.println(用户); 返回"/success.htm”;//返回登录成功后跳转的url } 返回"/error.htm”; } }