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