微信第三方登錄有兩種方式:掃碼登錄(微信開放平臺)和公眾號登錄(微信公眾平臺)
掃碼登錄可以用于pc等跨平臺應用,而公眾平臺必須在微信app內使用,且必須關注公眾號.
下面以公眾平臺為例,介紹如何基于spring social實現微信用戶授權并獲取到用戶信息.(微信開放平臺類似)
第一步:到微信公眾平臺后臺注冊應用并進行相關設置
微信公眾平臺后臺地址: https://mp.weixin.qq.com/
也可以先注冊一個測試號: https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
用微信掃碼登錄后臺后可以看到如下頁面:
其中的"appid"和"appsecret"需要記錄下來,一會要用到.
滑到下方找到" 網頁授權獲取用戶基本信息 ",點擊" 修改 ",將自己測試服務器的域名或ip填上去:
修改頁面:
第二步:添加相關代碼
我們假設服務端是基于springboot。
1.增加spring-social-wechat依賴:
maven:
1
2
3
4
5
|
<dependency> <groupid>com.ikasoa</groupid> <artifactid>spring-social-wechat</artifactid> <version> 1.3 . 1 </version> </dependency> |
或者gradle:
1
|
compile 'com.ikasoa:spring-social-wechat:1.3.1' |
2.增加配置項目
application.yml:
1
2
3
4
5
|
spring: social: wechatmp: app-id: [appid] app-secret: [appsecret] |
或者application.properties:
1
2
|
spring.social.wechatmp.app-id=[appid] spring.social.wechatmp.app-secret=[appsecret] |
其中" appid "和" appsecret "可以從微信公眾平臺后臺得到.
3.修改application.java
增加注解@enablesocial,并引用自動配置類(wechatmpautoconfiguration.class):
application.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.context.annotation. import ; import org.springframework.social.config.annotation.enablesocial; import org.springframework.social.wechat.autoconfigurer.wechatmpautoconfiguration; @springbootapplication @enablesocial @import (wechatmpautoconfiguration. class ) public class application { public static void main(string[] args) throws exception { springapplication.run(application. class , args); } } |
4.增加signinadapter并注冊providersignincontroller
signinadapter用來處理微信授權成功后的相關操作,例如:
wechatsigninadapter.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
import org.springframework.social.connect.connection; import org.springframework.social.connect.connectionkey; import org.springframework.social.connect.web.signinadapter; import org.springframework.social.wechat.api.user; import org.springframework.social.wechat.api.wechat; import org.springframework.stereotype.component; import org.springframework.web.context.request.nativewebrequest; @component public class wechatsigninadapter implements signinadapter { @override public string signin(string openid, connection<?> connection, nativewebrequest request) { connectionkey key = connection.getkey(); // 通過providerid判斷是否為微信公眾平臺授權 if ( "wechatmp" .equalsignorecase(key.getproviderid())) { // 通過微信openid獲取到用戶詳細信息 user user = ((wechat)connection.getapi()).useroperations().getuserprofile(openid); // 微信用戶詳細信息,可以記錄到數據庫.這里直接打印到后臺 system.out.println(user); return “/success.htm”; // 返回登錄成功后跳轉的url } return “/error.htm”; } } |
將wechatsigninadapter注入到providersignincontroller中:
1
2
3
4
5
6
7
|
...... @bean public providersignincontroller providersignincontroller(connectionfactorylocator connectionfactorylocator, usersconnectionrepository usersconnectionrepository, wechatsigninadapter wechatsigninadapter) { ((inmemoryusersconnectionrepository) usersconnectionrepository).setconnectionsignup((connection<?> connection) -> connection.getkey().getprovideruserid()); return new providersignincontroller(connectionfactorylocator, usersconnectionrepository, wechatsigninadapter); } ...... |
其中inmemoryusersconnectionrepository是基于內存存儲用戶信息的實現(usersconnectionrepository),也是默認的實現.此外springsocial還提供了jdbc的實現可選.
第三步:啟動并測試
在測試頁面里添加一個微信授權入口:
1
2
3
4
5
|
...... <form action= "/signin/wechatmp" method= "post" > <button type= "submit" >微信授權登錄</button> </form> ...... |
啟動springboot,在微信app中打開測試頁面點擊測試button.
測試頁面的域名必須與公眾平臺后臺" 網頁授權獲取用戶基本信息 "中設置的域名相同.
如果一切順利,服務端后臺就會打印該微信用戶的詳細信息:
頁面會跳轉到"/success.htm",也就是在wechatsigninadapter.signin中返回的地址.
注意,測試賬號需要先關注微信測試公眾號(測試號后臺掃二維碼可以關注),否則會報錯"errorcode:10006".
微信登錄實現已全部完成.
關于 微信開放平臺登錄 (掃碼登錄)與此類似,需要在 微信開放平臺 后臺申請"appid"和"appsecret",并將上面例子中的" wechatmp "改為" wechat "即可.
完整的例子代碼:
關于Spring Social項目
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://my.oschina.net/venwyhk/blog/2987727