前端實現微信公眾號授權—獲取openid
前陣子在做業務的時候,涉及到要微信公眾號授權獲取openid,再用openid進行活動的投票等操作的業務。當時授權這塊是由後端的同事處理的,最近抽空研究了下前端進行授權。
首先說明下結論:
前端不能實現微信公眾號的授權操作。
原因有以下兩點:
1.在授權獲取openid的時候,涉及到appid, appsecret。由於公眾號的secret和獲取到的access_token安全級別都非常高,必須只儲存在伺服器,不允許傳給客戶端。
ps:上圖顯示的不是appid,是code,頁面顯示有問題。
接下來分享下獲取openid的流程,感興趣的朋友可以繼續。
首先可以快速申請一個公眾平臺測試賬號:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
可以看下官網文件,講的已經很詳細了,我這邊就挑著比較重要的步驟說:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842
獲取openid的步驟有兩步:
1、引導使用者進入授權頁面同意授權,獲取code
2、通過code換取網頁授權access_token,獲取openid
第一步:使用者同意授權,獲取code。
我們需要在進入頁面之前,先請求這個url: https://open.weixin.qq.com/connect/oauth2/authorize
有如下幾個引數:
appid 必須 公眾號的唯一標識
redirect_url 必須 授權後跳轉頁面 請使用urlEncode對連結進行處理
response_type 必須 直接填code
scope 必須 應用授權作用域 後面詳細講解
state 非必須 引數 返回時會是 state=XXXXXXXXX
#wechat_redirect 必須 無論直接開啟還是做頁面302重定向時候,必須帶此引數
其中scope 分為兩種情況:
一種是snsapi_base
,只獲取openid,這種方式不會彈窗,只會靜默授權,使用者無感。
另一種是snsapi_userinfo
,彈出授權頁面,可通過openid拿到暱稱,性別,所在地。即使未關注,也能獲取其資訊。
在請求授權成功後,會跳轉至redirect_uri/?code=CODE&state=STATE
。
在獲取到code
之後,我們去請求這個url:https://api.weixin.qq.com/sns/oauth2/access_token
,這裡涉及到四個引數:
appid 必須 公眾號的唯一標識
secret 必須 公眾號的appsecret
code 必須 第一步獲取的code引數
grant_type 必須 直接寫authorization_code
這一步就必須在伺服器實現了,否則會出現跨域的問題
正確請求後就會返回JSON資料:
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"
}
這樣我們就能成功拿到openid了。
接下來分享下當時我們做授權時候的流程,我們主要實現的是一個微信投票的功能,每個使用者只能投一票,所以需要拿到openid就可以了。
步驟如下:
1、在app內使用者參加活動後分享微信進行投票,這時候我們將分享的url設定為後端的一個介面,而不是分享投票的落地頁。
2、由後端同事進行上面所講的兩步的openid請求。
3、在請求成功後,攜帶openid跳轉到我們的落地頁。
4、在投票時攜帶openid對這個openid進行驗證,進而投票成功。
相關文章
- 微信授權獲取使用者的openid
- Java微信公眾號開發之使用攔截器獲取粉絲openIDJava
- 微信公眾號開發Django JSSDK授權DjangoJS
- 微信公眾號開發Django 網頁授權Django網頁
- 微信公眾號開發 —— 微信網頁授權小記網頁
- 微信公眾號支付實現詳解(前端)前端
- php 獲取微信公眾號access_tokenPHP
- 關於微信公眾號靜默授權和非靜默授權的區別
- 【前端】微信公眾號推薦前端
- 微信公眾號h5支付 以及獲取code(前端部分)H5前端
- 基於.net5 wtm框架、uni-app微信公眾號開發一、公眾號授權框架APP
- TNW-獲取微信公眾號的 access_tokenTNW
- 爬取微信公眾號文章工具
- 微信公眾平臺--網頁授權獲取使用者基本資訊(snsapi_userinfo方式)網頁API
- 微信公眾平臺--網頁授權獲取使用者基本資訊(snsapi_base方式)網頁API
- 實現支援多公眾號的微信公眾號掃碼登入服務
- 前端微信授權前端
- 【解決】小程式|微信公眾號授權給第三方平臺時報“沒有繫結公眾號”
- 微信公眾號回覆小程式卡片如何實現?
- Laravel+easywechat 實現公眾號微信支付Laravel
- 微信開發之小程式獲取手機號授權登入
- 微信小程式獲取openid,unionid微信小程式
- 微信公眾號資訊的爬取解決方案
- 微信公眾號智慧回答
- 微信公眾號開發
- 微信公眾號系統
- 微信公眾號--入門
- 微信小程式獲取微信繫結授權手機號getPhoneNumber 全流程及出現手機號帶*號問題詳解微信小程式
- 獲取公眾平號開發測試賬號-微信開發視訊教程3
- 微信公眾號網頁授權中轉功能-解決網頁授權域名個數限制-透過已授權的域名進行中轉網頁
- 微信公眾號投票活動製作教程 微信公眾號投票怎麼弄?
- ASP.NET微信公眾號用於給指定OpenId使用者傳送紅包ASP.NET
- 微信公眾號排版 | 彙總和實戰
- 微信公眾號開發-分享
- 微信公眾號 檢視地址
- 微信公眾號介面導讀
- .net開發微信公眾號
- 微信公眾號支付全解析