您當前位置>首頁 » 新聞資(zī)訊 » 公衆号相關(guān) >
最新微服務SpringCloud項目:微信公衆号+SpringBoot開發流程總結(必看)
發表時間:2020-10-20
發布人:葵宇科技
浏覽次數:123
想要查看前面的筆記請翻閱我的CSDN博客,作者碼字不易,喜歡的話點贊,加個(gè)關(guān)注吧,後期還有很多幹貨等着你(nǐ)!
1.注冊微信公衆号
這裡主要做技術(shù)讨論,請查看:傳送門
2.獲取用戶微信信息
2.1 前端首先獲取用戶code
code說明
code作為換取access_token的票據,每次用戶授權帶上的code将不一樣,code隻能使用一次,5分鐘未被使用自動(dòng)過期。
分為兩種情況:1.用戶已經關(guān)注;2.用戶未關(guān)注
用戶已經關(guān)注怎麼做
在确保微信公衆賬号擁有授權作用域(scope參數)的權限的前提下(xià)(服務号獲得高級接口後,默認擁有scope參數中(zhōng)的snsapi_base和(hé)snsapi_userinfo),引導關(guān)注者打開如(rú)下(xià)頁面:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
若提示“該鍊接無法訪問(wèn)”,請檢查參數是否填寫錯誤,是否擁有scope參數對應的授權作用域權限。 參考鍊接(請在微信客戶端中(zhōng)打開此鍊接體驗) Scope為snsapi_base
參數說明
參數是否必須說明appid是公衆号的唯一标識redirect_uri是授權後重定向的回調鍊接地址,請使用urlencode對鍊接進行處理response_type是返回類型,請填寫codescope是應用授權作用域,snsapi_base (不彈出授權頁面,直接跳轉,隻能獲取用戶openid),snsapi_userinfo (彈出授權頁面,可(kě)通(tōng)過openid拿到昵稱、性别、所在地。并且,即使在未關(guān)注的情況下(xià),隻要用戶授權,也能獲取其信息)state否重定向後會帶上state參數,開發者可(kě)以填寫a-zA-Z0-9的參數值,最多128字節#wechat_redirect是無論直接打開還是做頁面302重定向時候,必須帶此參數用戶同意授權後
如(rú)果用戶同意授權,頁面将跳轉至
redirect_uri/?code=CODE&state=STATE。
用戶禁止授權
則重定向後不會帶上code參數,僅會帶上state參數
redirect_uri?state=STATE
用戶未關(guān)注怎麼做
第三方使用網站(zhàn)應用授權登錄前請注意已獲取相應網頁授權作用域(scope=snsapi_login)
https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
若提示“該鍊接無法訪問(wèn)”,請檢查參數是否填寫錯誤,如(rú)redirect_uri的域名與審核時填寫的授權域名不一緻或scope不為snsapi_login。
參數說明
參數是否必須說明appid是公衆号的唯一标識redirect_uri是授權後重定向的回調鍊接地址,請使用urlencode對鍊接進行處理response_type是返回類型,請填寫codescope是應用授權作用域,擁有多個(gè)作用域用逗号(,)分隔,網頁應用目前僅填寫snsapi_login即可(kě)state否用于保持請求和(hé)回調的狀态,授權請求後原樣帶回給第三方。該參數可(kě)用于防止csrf攻擊(跨站(zhàn)請求僞造攻擊),建議第三方帶上該參數,可(kě)設置為簡單的随機數加session進行校(xiào)驗#wechat_redirect是無論直接打開還是做頁面302重定向時候,必須帶此參數返回值
用戶允許授權後,将會重定向到redirect_uri的網址上,并且帶上code和(hé)state參數
redirect_uri?code=CODE&state=STATE
若用戶禁止授權,則重定向後不會帶上code參數,僅會帶上state參數
redirect_uri?state=STATE
2.2 前端獲取code後将code值傳至後端
@RequestMapping("/greet")
public Result greetUser(@PathVariable String appid, @RequestParam String code) {
if (!this.wxService.switchover(appid)) {
throw new IllegalArgumentException(String.format("未找到對應appid=[%s]的配置,請核實!", appid));
}
WxMpUser user = null;
try {
WxMpOAuth2AccessToken accessToken = wxService.getOAuth2Service().getAccessToken(code);
user = wxService.getOAuth2Service().getUserInfo(accessToken, null);
} catch (WxErrorException e) {
e.printStackTrace();
}
return Result.succeed(user,"用戶信息");
}
當獲取到用戶的微信信息後 ,我将其中(zhōng)重要的openid存在數據庫中(zhōng),以便後期使用,這時候,我們已經完成了重要的一步了,後期我還添加了公衆号對話等一系列相關(guān)操作,都是需要openid的支持
後端獲取用戶信息:這裡要注意,我使用的是一個(gè)國人開發的小工具
maven如(rú)下(xià):
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
<version>3.9.0</version>
</dependency>
gitee傳送門:點擊這裡
我的目錄結構如(rú)下(xià):