使用SDK方式進(jìn)行微信授權(quán)(使用sdk方式進(jìn)行微信授權(quán)登錄)
1.在pom.xml中添加依賴
<dependency>
<groupId>com.github.binarywang</groupId>
<artifacted>weixin-java-mp</artifacted>
<wersion>2.7.0</version>
</dependency>
2.輸入網(wǎng)址:https://github.com/Wechat-Group/WxJava/wiki,
點開第一個,進(jìn)入以下頁面。并選擇OAuth2網(wǎng)頁授權(quán)。
3,寫Controller文件
4.寫配置文件:WxMpService 是一個接口,接口是一個特殊的類,也可以用new關(guān)鍵字后面跟他的實現(xiàn)類WxMpServiceImpl 創(chuàng)建對象wxMpService,
WxMpConfigStorage是對象WxMpService的屬性。appId,Secret是 wxMpConfigStorage的屬性
wxMpConfigStorage是一個接口,wxMpInMemoryConfigStorage是它的實現(xiàn)類。new出的對象wxMpConfigStorage是代表微信公眾賬號的類。
他的屬性就是微信公眾賬號的屬性。包括appId,Secret.
4。在配置文件中application.yml配置
5.(1)寫一個與“微信賬號相關(guān)的配置類”取名叫:WechatAccountConfig(自定義),@Data注解的使用可簡化代碼,不必寫set和get方法。
@component和@ConfigurationProperties是注入config的兩個不可缺少的注解。下圖只展示了appId(公眾平臺id)和mpAppSecret(公眾平臺密匙)兩個屬性,
其實還有openAppId(開放平臺Id), openAppSecret(開放平臺密匙)等與微信賬號相關(guān)的一些屬性。
(2)使用WechatAccountConfig,注意:@Autowired注解的使用代替了 WechatAccountConfig accountConfig=new WechatAccountConfig.(使用new關(guān)鍵字創(chuàng)建實例)
(3)wxMpConfigStorage.setAppId(accountConfig.getMpAppId);//將微信公眾號的屬性賦給wxMpConfigStorage的意義是便于在控制臺顯示輸出結(jié)果。
wxMpConfigStorage是一個返回值,類似于一個盒子里面包裝了各種屬性。
(4)因為不同的appId對應(yīng)于不同的openId.,例mpAppId(微信公眾平臺)和openAppId(微信開放平臺)對應(yīng)的openId是不同的,寫WechatMpConfig配置的目的是將appId賦值給wxMpService,讓它知道 要獲取哪個appId的openAppId,再獲取openId。
wxMpOAuth2AccessToken=wxMpService.oauth2getAccessToken(code);
String openId=wxMpOAuth2AccessToken.getOpenId();
6.
構(gòu)造網(wǎng)頁授權(quán)url
首先構(gòu)造網(wǎng)頁授權(quán)url,然后構(gòu)成超鏈接讓用戶點擊:
WxMpService wxMpService = ...;String url = ...; String redirectUrl=wxMpService.oauth2buildAuthorizationUrl(url, WxConsts.OAuth2Scope.SNSAPI_USERINFO, null)redirect_uri(redirectUrl)是用戶授權(quán)后重定向的回調(diào)鏈接地址,即引導(dǎo)用戶在微信中點擊的地址,url是參數(shù),wxMpService通過方法oauth2buildAuthorizationUrl將url賦給redirectUrl
獲得access token
當(dāng)用戶同意授權(quán)后,會回調(diào)所設(shè)置的url并把a(bǔ)uthorization code傳過來,然后用這個code獲得access token,其中也包含用戶的openid等信息
WxMpOAuth2AccessToken wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(code);//
獲得用戶基本信息
WxMpUser wxMpUser = wxMpService.oauth2getUserInfo(wxMpOAuth2AccessToken, null);代碼如下所示:
controller層的代碼說明:
1.redirectUrl是用戶授權(quán)后重定向的回調(diào)鏈接地址,即引導(dǎo)用戶在微信中點擊的地址,url和returnUrl是參數(shù),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也可以使用外網(wǎng)地址:url=http://sell/natapp4.cc/sell/wechat/authorize,這里的returnUrl是慕課網(wǎng)的地址,也可以寫其他網(wǎng)站的地址。程序員根據(jù)需要傳參。因此redirectUrl,url和returnUrl是完全不同的概念。
2.String redirectUrl=wxMpService.oauth2buildAuthorizationUrl(url, WxConsts.OAuth2Scope.SNSAPI_USERINFO, returnUrl)
參數(shù)state的是我們傳遞什么,就會回傳什么,由于我們傳遞的參數(shù)是returnUrl,所以要把returnUrl回傳過來,使用 urlEncoder 對returnUrl鏈接進(jìn)行處理.
例當(dāng)用戶點擊:http://127.0.0.1/sell/wechat/authorize?returnUrl=www.imooc.com,成功進(jìn)入后,地址欄就會反饋給我們一個地址:
www.imooc.com?openId=......(returnUrl被回傳)