微信公众平台开发--微信网页授权
在微信公眾號開發(fā)中實(shí)現(xiàn)微信用戶自動登陸第三方的功能:
條件:
1.公眾號必須為微信認(rèn)證服務(wù)號;
2.在公眾號接口權(quán)限->網(wǎng)頁賬號 網(wǎng)頁授權(quán)獲取用戶基本信息 修改需要OAuth2.0鑒權(quán)的域名;
?
關(guān)于網(wǎng)頁授權(quán)的兩種scope的區(qū)別說明
以snsapi_base為scope發(fā)起的網(wǎng)頁授權(quán),靜默授權(quán),不彈出授權(quán)頁面,只能獲取微信用戶的openid。
以snsapi_userinfo為scope發(fā)起的網(wǎng)頁授權(quán),彈出授權(quán)頁面,可通過openid拿到昵稱、性別、所在地。并且,即使在未關(guān)注的情況下,只要用戶授權(quán),也能獲取其信息。
用戶管理類接口中的“獲取用戶基本信息接口”,是在用戶和公眾號產(chǎn)生消息交互或關(guān)注后事件推送后,才能根據(jù)用戶OpenID來獲取用戶基本信息。包括其他微信接口,都是需要該用戶(即openid)關(guān)注了公眾號后,才能調(diào)用成功的。
?
關(guān)于網(wǎng)頁授權(quán)access_token和普通access_token的區(qū)別
在用戶同意授權(quán)后獲取的access_token是針對于用戶的,可以說是微信用戶給第三方網(wǎng)站的授權(quán)碼一樣。
而普通access_token則類似于公眾平臺給于第三方網(wǎng)站調(diào)用接口的憑借。
?
根據(jù)官網(wǎng)的步驟:
第一步 獲取code:
需要第三方網(wǎng)站進(jìn)行重定向到包裝后的授權(quán)地址 如下
$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".WxPayConfig::APPID."&redirect_uri=".$redirect_uri."&response_type=code&scope=snsapi_userinfo&state=success#wechat_redirect"; header("Location:".$url);appid? 為微信公眾平臺提供的
redirect_ur?? 是用戶同意授權(quán)后進(jìn)入的頁面
scope ?為上面所提的兩種scope 若是需要微信用戶的其他資料需要snsapi_userinfo類型(不管用戶是否關(guān)注公眾號都可以獲得資料,可以用來第三方平臺的用戶資料保留和填充)? 若只是希望得到openid則可以使用snsapi_base類型
state? 其他攜帶的參數(shù)
第二步 將利用第一步獲取的code換取該用戶授權(quán)的access_token:
$code = $_GET['code']; $url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code"; //通過get發(fā)送 $token_data = file_get_contents($token_url); $token_arr = json_decode($token_data,true);appid ? 為微信公眾平臺提供的APPID
secret? 為微信公眾平臺提供的APPSECRET
code? 第一步獲取的code
獲取到的參數(shù) 進(jìn)行json_decode轉(zhuǎn)化成數(shù)組 返回的數(shù)據(jù)如下
access_token?? ? 網(wǎng)頁授權(quán)接口調(diào)用憑證,注意:此access_token與基礎(chǔ)支持的access_token不同
expires_in?? ?????? access_token接口調(diào)用憑證超時(shí)時(shí)間,單位(秒)
refresh_token??? 用戶刷新access_token
openid?? ? ? ? ? ?? 用戶唯一標(biāo)識,請注意,在未關(guān)注公眾號時(shí),用戶訪問公眾號的網(wǎng)頁,也會產(chǎn)生一個(gè)用戶和公眾號唯一的OpenID
scope?? ??????????? 用戶授權(quán)的作用域,使用逗號(,)分隔
?
第四步:拉取用戶信息(需scope為 snsapi_userinfo)
$url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token."&openid=".$openid."&lang=zh_CN"; $resdata = file_get_contents($url); $data = json_decode($resdata,true);此處于第二步做法一致?
access_token? 第二步獲取的access_token
openid?第二步獲取的openid
獲取到的參數(shù) 進(jìn)行json_decode轉(zhuǎn)化成數(shù)組 返回的數(shù)據(jù)如下
openid?? ?用戶的唯一標(biāo)識
nickname?? ?用戶昵稱
sex?? ?用戶的性別,值為1時(shí)是男性,值為2時(shí)是女性,值為0時(shí)是未知
province?? ?用戶個(gè)人資料填寫的省份
city?? ?普通用戶個(gè)人資料填寫的城市
country?? ?國家,如中國為CN
headimgurl?? ?用戶頭像,最后一個(gè)數(shù)值代表正方形頭像大小(有0、46、64、96、132數(shù)值可選,0代表640*640正方形頭像),用戶沒有頭像時(shí)該項(xiàng)為空。若用戶更換頭像,原有頭像URL將失效。
privilege?? ?用戶特權(quán)信息,json 數(shù)組,如微信沃卡用戶為(chinaunicom)
unionid?? ?只有在用戶將公眾號綁定到微信開放平臺帳號后,才會出現(xiàn)該字段。
到此便可以獲得了授權(quán)的用戶的資料了 至于該用戶是否已關(guān)注該微信公眾平臺 需要用戶管理類接口中的“獲取用戶基本信息接口” 去獲得。
官網(wǎng)還提供了 刷新access_token的接口 和 檢查access_token是否有效的接口,其調(diào)用方法與第二三步一致。
?
轉(zhuǎn)載于:https://www.cnblogs.com/LzayCat/p/5495596.html
總結(jié)
以上是生活随笔為你收集整理的微信公众平台开发--微信网页授权的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ARP数据报格式
- 下一篇: 趁有空,再了解一下GROOVY中关于类的