1. 程式人生 > >網站獲取微信授權登入功能

網站獲取微信授權登入功能

首先需要弄明白的是你是在微信服務號裡面開發的網站還是獨立的網站應用,獨立的網站獲取微信登入功能需要滿足以下條件:

1.申請微信開發者賬號

2.在微信開發者平臺管理中心申請網站應用,如下圖所示(注意正確填寫授權回撥域):

3.申請通過後會獲得該網站對應的appid以及appsecret,有了這兩個引數就可以進行網站登入授權了

第一步:請求CODE

若提示“該連結無法訪問”,請檢查引數是否填寫錯誤,如redirect_uri的域名與稽核時填寫的授權域名不一致或scope不為snsapi_login。

引數說明
引數 是否必須 說明
appid 應用唯一標識
redirect_uri 重定向地址,需要進行UrlEncode
response_type 填code
scope 應用授權作用域,擁有多個作用域用逗號(,)分隔,網頁應用目前僅填寫snsapi_login即可
state 用於保持請求和回撥的狀態,授權請求後原樣帶回給第三方。該引數可用於防止csrf攻擊(跨站請求偽造攻擊),建議第三方帶上該引數,可設定為簡單的隨機數加session進行校驗
返回說明

使用者允許授權後,將會重定向到redirect_uri的網址上,並且帶上code和state引數

redirect_uri?code=CODE&state=STATE

若使用者禁止授權,則重定向後不會帶上code引數,僅會帶上state引數

redirect_uri?state=STATE

請求示例

登入一號店網站應用

微信使用者使用微信掃描二維碼並且確認登入後,PC端會跳轉到

為了滿足網站更定製化的需求,我們還提供了第二種獲取code的方式,支援網站將微信登入二維碼內嵌到自己頁面中,使用者使用微信掃碼授權後通過JS將code返回給網站。

JS微信登入主要用途:網站希望使用者在網站內就能完成登入,無需跳轉到微信域下登入後再返回,提升微信登入的流暢性與成功率。 網站內嵌二維碼微信登入JS實現辦法:

步驟1:在頁面中先引入如下JS檔案(支援https):

<script src="http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>

步驟2:在需要使用微信登入的地方例項以下JS物件:

                          var obj = new WxLogin({

                              id:"login_container", 

                              appid: "", 

                              scope: "", 

                              redirect_uri: "",

                              state: "",

                              style: "",

                              href: ""

                            });

引數說明
引數 是否必須 說明
id 第三方頁面顯示二維碼的容器id
appid 應用唯一標識,在微信開放平臺提交應用稽核通過後獲得
scope 應用授權作用域,擁有多個作用域用逗號(,)分隔,網頁應用目前僅填寫snsapi_login即可
redirect_uri 重定向地址,需要進行UrlEncode
state 用於保持請求和回撥的狀態,授權請求後原樣帶回給第三方。該引數可用於防止csrf攻擊(跨站請求偽造攻擊),建議第三方帶上該引數,可設定為簡單的隨機數加session進行校驗
style 提供"black"、"white"可選,預設為黑色文字描述。詳見文件底部FAQ
href 自定義樣式連結,第三方可根據實際需求覆蓋預設樣式。詳見文件底部FAQ
第二步:通過code獲取access_token

通過code獲取access_token

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

引數說明
引數 是否必須 說明
appid 應用唯一標識,在微信開放平臺提交應用稽核通過後獲得
secret 應用金鑰AppSecret,在微信開放平臺提交應用稽核通過後獲得
code 填寫第一步獲取的code引數
grant_type 填authorization_code
返回說明

正確的返回:


"access_token":"ACCESS_TOKEN", 
"expires_in":7200, 
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID", 
"scope":"SCOPE",
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"}

引數 說明
access_token 介面呼叫憑證
expires_in access_token介面呼叫憑證超時時間,單位(秒)
refresh_token 使用者重新整理access_token
openid 授權使用者唯一標識
scope 使用者授權的作用域,使用逗號(,)分隔
 unionid 當且僅當該網站應用已獲得該使用者的userinfo授權時,才會出現該欄位。

錯誤返回樣例:

{"errcode":40029,"errmsg":"invalid code"}