公眾號(hào)授權(quán)流程

公眾號(hào)獲取授權(quán)流程

背景

在公眾號(hào)網(wǎng)頁中,使用系統(tǒng),根據(jù)用戶手機(jī)號(hào)進(jìn)行賬號(hào)同步關(guān)聯(lián)(PC端系統(tǒng)),所以授權(quán)采用靜默授權(quán)獲取openID.

授權(quán)流程

1、 授權(quán)頁wxAuthPage --》微信授權(quán)OAuth --》 重定向授權(quán)頁 --》wxAuthPage頁拿到code --》 wxAuthPage 獲取 openId - -》 根據(jù)openID與后端交互決定去首頁or登陸頁,做后續(xù)的業(yè)務(wù)邏輯


授權(quán)流程圖
  • 網(wǎng)頁授權(quán)回調(diào)域名配置
    1. 需要先到公眾平臺(tái)官網(wǎng)中的 【設(shè)置與開發(fā)】-【功能設(shè)置】-【網(wǎng)頁授權(quán)域名】的配置選項(xiàng)中,配置授權(quán)回調(diào)域名。回調(diào)域名可配置多個(gè)(一般只會(huì)配置一個(gè)回調(diào)頁,統(tǒng)一進(jìn)行授權(quán)),授權(quán)頁面需要下載上傳【授權(quán)文件】MP_文件)到【回調(diào)頁面】所在項(xiàng)目的根目錄下。詳見公眾號(hào)回調(diào)域名配置
      image.png
image-1.png
坑點(diǎn)?。。。号渲没卣{(diào)頁面時(shí),一直提示文件找不到匹配,已經(jīng)按照文檔指示,把文件下載,放在了項(xiàng)目的根目錄里,排查后發(fā)現(xiàn)打包后的dist目錄沒有MP文件(``項(xiàng)目打包時(shí),MP文件因?yàn)闆]有引用,所以沒有打包到dist目錄里``)
    ![image-2.png](https://upload-images.jianshu.io/upload_images/2928576-d45f37fb4e985402.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
image-3.png

解決方案如下:本項(xiàng)目框架是UNIAPP,流水線自動(dòng)打包上傳項(xiàng)目(Docker容器),MP文件因?yàn)闆]有被引用,沒有打包到dist目錄里,所以打包后需要把MP文件添加進(jìn)dist文件,配置如下:
COPY MP_verify_LZajyYxePcus2bkd.txt /usr/share/nginx/html

image-4.png

具體步驟如下
  • 發(fā)起授權(quán)獲取openID
    可后端做,也可前端做,本項(xiàng)目由前端發(fā)起,參數(shù)說明如下
    

    網(wǎng)頁授權(quán)的作用域scope:
    snsapi_base:(靜默授權(quán))
    snsapi_userinfo
    appid:"wx520c15f417810387"----服務(wù)端維護(hù)
    redirect_uri:回調(diào)成功后URL頁面(wxAuthPage)
    secret:公眾號(hào)的appsecret----服務(wù)端維護(hù)

一: 發(fā)起授權(quán),獲取code。
引導(dǎo)用戶打開授權(quán)鏈接頁面:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
const hrefUrl = 'https://ksbl-yingjian-h5-test.shoupaji.com'
const url = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${res.appId}&redirect_uri=${encodeURI(hrefUrl)}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`
location.href = url
二.:同意授權(quán),頁面將跳轉(zhuǎn)至 redirect_uri/?code=CODE&state=STATE。
三:通過code換取網(wǎng)頁授權(quán)access_token 和 openid

網(wǎng)頁授權(quán)的作用域?yàn)閟nsapi_base,本步驟中獲取到網(wǎng)頁授權(quán)access_token的同時(shí),也獲取到了openid, snsapi_base式的網(wǎng)頁授權(quán)流程即到此為止。

將授權(quán)拿到的code傳給后端,通過后端調(diào)用微信API獲取access_tokenopenid

// 微信獲取access_token API
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
```javascript
正確時(shí)返回的JSON數(shù)據(jù)包如下:
{
    "access_token":"ACCESS_TOKEN",
    "expires_in":7200,
    "refresh_token":"REFRESH_TOKEN",
    "openid":"OPENID",
    "scope":"SCOPE",
    "is_snapshotuser": 1,
    "unionid": "UNIONID"
}

```
四:拿到openID后跟后端進(jìn)行登陸綁定交互

后端根據(jù)openID進(jìn)行判斷用戶是否關(guān)聯(lián)手機(jī)號(hào)

未關(guān)聯(lián):引導(dǎo)用戶填寫手機(jī)號(hào),關(guān)聯(lián)手機(jī)號(hào)和openID
已關(guān)聯(lián): token未失效,進(jìn)入h5首頁,失效,引導(dǎo)去登陸頁。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容