1、.0
OAuth(開放授權)是一個開放標準,容許用戶讓第三方應用訪問該用戶在某一網站上儲存的私密的資源(如相片,視頻,聯系人列表),而無需將用戶名和密碼提供給第三方應用。
容許用戶提供一個令牌,而不是用戶名和密碼來訪問她們儲存在特定服務提供者的數據。每一個令牌授權一個特定的網站(比如,視頻編輯網站)在特定的時段(比如,接出來的2小時內)內訪問特定的資源(比如僅僅是某一相冊中的視頻)。這樣,OAuth容許用戶授權第三方網站訪問她們存貯在另外的服務提供者上的信息,而不須要分享她們的訪問許可或她們數據的所有內容。
2、目標
我們這兒主要模擬使用.0,用戶通過掃描我們網頁應用的二維碼并進行授權登陸來獲取用戶的基本信息的過程。詳盡的插口相關信息可以在微信開放平臺上查看:
3、前期打算(獲取微信開發者權限)
我們這兒主要講的是網站(Web)應用,網站應用微信登陸是基于.0合同標準建立的微信.0授權登入系統(即前面的合同)。在微信顧客端授權登陸(獲取用戶信息)的可以查看:
在進行微信.在進行微信.0授權登陸接入之前,在微信開放平臺注冊開發者賬號,并擁有一個已初審通過的網站應用,并獲得相應的AppID和微信掃碼點單,申請微信登陸且通過初審后,可開始接入流程。
3.1、注冊開發者帳號
可以在這兒申請開發的帳號。因為是騰訊的網頁,這兒可以直接通過QQ號進行登陸。
3.2、提交網站應用初審
在早已登陸的界面中選擇“管理中心”——》網站應用——》創建網站應用
將會彈出下邊的界面
填寫之后,還有有一個頁面須要填寫,遞交一份紙質版申請書掃描件(會提供模板,我們下載再來填寫后,需簽章,簽名),配置反彈域名(掃碼登陸后會跳轉的頁面)等。
然后遞交初審即可,等微信初審通過,我們即可獲得我們須要的網頁應用的appid和,并配置后反彈的域名了(這三樣是我們開發所必須的)。
3.3、開發者資質認證
因為我們這兒要使用微信登陸的插口,所以我們還須要向微信提出認證微信掃碼點單,只有認證了能夠使用微信這些中級的插口。未認證的如右圖所示
認證以后是這樣子的:
我如今暫時沒有找到可以向公眾帳號那樣子的測試帳號的申請。假如有曉得怎樣可以申請到測試帳號的前輩,希望能指點一下。
接出來,我們就可以開始我們的網頁微信掃碼登陸開發了。
4、授權流程說明
微信.0授權登陸讓微信用戶使用微信身分安全登陸第三方應用或網站,在微信用戶授權登陸已接入微信.0的第三方應用后,第三方可以獲取到用戶的插口調用賬簿(),通過可以進行微信開放平臺授權關系插口調用,因而可實現獲取微信用戶基本開放信息和幫助用戶實現基礎開放功能等。
微信.0授權登陸目前支持模式,適用于擁有端的應用授權。該模式整體流程為:
1.?第三方發起微信授權登錄請求,微信用戶允許授權第三方應用后,微信會拉起應用或重定向到第三方網站,并且帶上授權臨時票據code參數;2.?通過code參數加上AppID和AppSecret等,通過API換取access_token;3.?通過access_token進行接口調用,獲取用戶基本數據資源或幫助用戶實現基本操作。
獲取時序圖:
5、獲取網頁的二維碼
當我們通過微信的認證,獲取到了appid和,并配置了反彈的域名。我們就早已可以獲取屬于我們網頁的二維碼了,獲取的方法很簡單,只需打開一個微信的鏈接,加上我們的appid和反彈域名即可在網頁里面打開二維碼,用戶用微信顧客端掃碼并授權登陸以后即會跳轉到我們配置的反彈域名下。
注意:
1、這里填寫的是域名(是一個字符串),而不是URL,因此請勿加http://等協議頭;2、授權回調域名配置規范為全域名,比如需要網頁授權的域名為:www.qq.com,配置以后此域名下面的頁面http://www.qq.com/music.html?、?http://www.php.cn/?都可以進行OAuth2.0鑒權。但http://pay.qq.com?、?http://www.php.cn/?、?http://www.php.cn/無法進行OAuth2.0鑒權
5.1、請求url說明
第三方使用網站應用授權登陸前請注意已獲取相應網頁授權作用域(scope=),則可以通過在PC端打開以下鏈接:
https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
參數說明
參數是否必須說明
appid
是
應用惟一標示(后面認證網頁應用中獲得)
是
重定向地址,須要進行(后面認證網頁應用中獲得)
是
填code
scope
是
應用授權作用域,擁有多個作用域用冒號(,)分隔,網頁應用目前僅填寫即可
state
否
用于保持懇求和反彈的狀態,授權懇求后原貌帶回給第三方。該參數可用于避免csrf功擊(跨站懇求偽造功擊),建議第三方帶上該參數,可設置為簡單的隨機數加進行校準
返回說明
用戶準許授權后,將會重定向到的網址上,而且帶上code和state參數
redirect_uri?code=CODE&state=STATE
若用戶嚴禁授權,則重定向后不會帶上code參數,僅會帶上state參數
redirect_uri?state=STATE
5.2、事例:
一號店的微信二維碼鏈接如下:
https://open.weixin.qq.com/connect/qrconnect?appid=wxbdc5610cc59c1631&redirect_uri=https%3A%2F%2Fpassport.yhd.com%2Fwechat%2Fcallback.do&response_type=code&scope=snsapi_login&state=3d6be0a4035d839573b04816624a415e#wechat_redirect
將其復制到瀏覽器中打開即可獲得一號店的二維碼,二維碼頁面如下:
通過使用微信顧客端的掃一掃功能,掃描該二維碼,即會跳轉到里面填寫所在的地址上。如果用戶同意授權,這兒就獲得了微信返回的code參數了。
6、獲取用戶信息
如果后面早已獲得code。我們可以通過code參數去獲取用戶和,從而獲得用戶的信息。
6.1、通過code參數獲取
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
參數說明
參數是否必須說明
appid
是
應用惟一標示,在微信開放平臺遞交應用初審通過后獲得
是
應用秘鑰,在微信開放平臺遞交應用初審通過后獲得
code
是
填寫第一步獲取的code參數
是
填
返回說明
正確的返回:
{? "access_token":"ACCESS_TOKEN",? "expires_in":7200,? "refresh_token":"REFRESH_TOKEN","openid":"OPENID",? "scope":"SCOPE","unionid":?"o6_bmasdasdsad6_2sgVt7hMZOPfL"}
參數說明
插口調用賬簿
插口調用賬簿超時時間,單位(秒)
用戶刷新
授權用戶惟一標示
scope
用戶授權的作用域,使用冒號(,)分隔
當且僅當該網站應用已獲得該用戶的授權時,就會出現該數組。
錯誤返回樣例:
{"errcode":40029,"errmsg":"invalid?code"}
注意:
6.2、通過獲取用戶的基本信息
獲取的前提條件
對于插口作用域(scope),能調用的插口有以下:
授權作用域(scope)插口插口說明
/sns//
通過code換取、和已授權scope
/sns//
刷新或續期使用
/sns/auth
檢測有效性
/sns/
獲取用戶個人信息
使用作用域的授權是掃碼以后無需用戶點擊授權,掃碼后直接跳轉,用戶覺得不到授權了,但這些授權形式能獲取的數據量有限,這兒我們要獲取用戶的基本信息,我們須要使用授權。使用授權,掃碼后出現類似于下邊的授權界面
此插口用于獲取用戶個人信息。開發者可通過來獲取用戶基本信息。非常須要注意的是,假如開發者擁有多個聯通應用、網站應用和公眾賬號,可通過獲取用戶基本信息中的來分辨用戶的惟一性,由于只要是同一個微信開放平臺賬號下的聯通應用、網站應用和公眾賬號,用戶的是惟一的。換句話說,同一用戶,對同一個微信開放平臺下的不同應用,是相同的。請注意,在用戶更改微信頭像后,舊的微信頭像URL將會失效,因而開發者應當自己在獲取用戶信息后,將頭像圖片保存出來,防止微信頭像URL失效后的異常情況。
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
參數說明
參數是否必須說明
是
調用賬簿(上一個懇求中獲得)
是
普通用戶的標示,對當前開發者賬號惟一(上一個懇求中獲得)
lang
否
國家地區語言版本,zh_CN繁體,zh_TW簡體,en英文,默認為zh-CN
返回說明
正確的Json返回結果:
{? "openid":"OPENID","nickname":"NICKNAME","sex":1,"province":"PROVINCE","city":"CITY","country":"COUNTRY","headimgurl":?"http://www.php.cn/","privilege":["PRIVILEGE1",? "PRIVILEGE2"],"unionid":?"?o6_bmasdasdsad6_2sgVt7hMZOPfL"}
參數說明
普通用戶的標示,對當前開發者賬號惟一
普通用戶愛稱
sex
普通用戶性別,1為女性,2為男性
普通用戶個人資料填寫的省份
city
普通用戶個人資料填寫的城市
國家,如中國為CN
用戶頭像,最后一個數值代表正圓形頭像大小(有0、46、64、96、132數值可選,0代表640*640正圓形頭像),用戶沒有頭像時該項為空
用戶特權信息,json鏈表,如微信沃卡用戶為()
用戶統一標示。針對一個微信開放平臺賬號下的應用,同一用戶的是惟一的。
錯誤的Json返回示例:
{? "errcode":40003,"errmsg":"invalid?openid"}
7、總結
近來著手開發了微信網頁掃碼登陸和公眾號授權登陸收獲甚微,二者的開發很類似。以下是我個人摸索過程中發覺的二者的優缺:
公眾帳號授權登陸:
微信公眾號群發消息:
更多微信開放平臺開發——網頁微信掃碼登陸(.0)相關文章請關注PHP英文網!
免責聲明:部分文章信息來源于網絡以及網友投稿,本站只負責對文章進行整理、排版、編輯,出于傳遞更多信息之目的,并不意味著贊同其觀點或證實其內容的真實性,如本站文章和轉稿涉及版權等問題,請作者在及時聯系本站,我們會盡快為您處理。