1. 程式人生 > >微信公眾號開發之網頁授權(獲取使用者資訊兩種方式)

微信公眾號開發之網頁授權(獲取使用者資訊兩種方式)

  這次暑假留在學校參與工作室的專案,對微信公眾號比較感興趣,所以參與這方面的學習研究。

昨天完成了關於網頁授權,獲取使用者資訊方面的功能,所以乘熱打鐵,寫上一篇。實現本篇涉及的

功能,還需要完成一些基礎。在寫完這篇部落格後,我會盡快補上。

-------------------------廢話不多說直入正題

需要的工具:

微信公眾號(可以申請,但做開發的,可以申請測試號,申請詳細不多說了)

伺服器(可以自行購買,我使用的是新浪的sae。)

編輯器(隨意,不做推薦)

微信公眾號開發文件(地址

-------------------------官方文件解讀(只說我讀到的資訊)

!!!!!完成基本配置後才能進行一下工作,配置資訊在這。(稍後補上)

你要完成網頁授權,並獲取使用者資訊要完成一下3步驟。

-1-使用者授權並獲取code

-2-使用code換取access_token

-3-使用access_token獲取使用者資訊

--------------------使用者授權並獲取code

引數說明
appid=APPID(公眾號唯一標識)
redirect_uri=REDIRECT_URI(授權後重定向的回撥連結地址)
response_type=code(返回型別,無需更改)
scope=SCOPE(snsapi_base ,不彈出授權頁面,直接跳轉,只能獲取使用者openid),snsapi_userinfo 彈出授權頁面,可通過openid拿到暱稱、性別、所在地。)
state=STATE(重定向後會帶上state引數,開發者可以填寫任意引數值)
#wechat_redirect(無需更改)

地址例項(雖是測試號,但我還是隱藏部分資訊)紅色字型需要根據實際更改。
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxe5809c42e6c00d22&redirect_uri=http://dingcanphp.applinzi.com/getUserInfo.php&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect

返回結果(code的值,不一定是顯示在瀏覽器介面上的,具體看你的redirect_uri中的檔案)
061h4k8Z1G7AhY0025bZ1nbh8Z1h4k8Q

-----------------使用code換取access_token

引數說明
appid=APPID(公眾號唯一標識)
secret=SECRET(公眾號的appsecret)
code=CODE(第一步獲取的code引數)
grant_type=authorization_code(無需更改)


地址例項(雖是測試號,但我還是隱藏部分資訊)紅色字型需要根據實際更改。
https://api.weixin.qq.com/sns/oauth2/access_token?appid=wxe5809c42e6c00d22&secret=5444ba1b31666f6052e9c703f906368b&code=061h4k8Z1G7AhY0025bZ1nbh8Z1h4k8Q&grant_type=authorization_code

返回結果(json格式資料)
{
"access_token": "e1nYJFpZuehfQH1buzHFZLb7onqs_wT1cudSdy9HRlnaMXFtFpRMNFOA0euK6UxPcItrSNbAQVcXDdthbLJYX0MdH1p7-tkZSKuGqBCxVc0",
"expires_in": 7200,
"refresh_token": "0iVsXn4O1rBCASbO7hx8VNVUVFM1RP2Q4xS0giegd4jlIsJYOjTJNZ0b4Dsh_xcoB02ZZ3bt0WH0a47LvjIEPjWUnESJCZyl6EtY_xYZdVs",
"openid": "o47Fa0mp9SRTf3eiKmqWm69BjG_8",
"scope": "snsapi_userinfo"
}

結果解釋
access_token 網頁授權介面呼叫憑證,注意:此access_token與基礎支援的access_token不同
expires_in access_token介面呼叫憑證超時時間,單位(秒)
refresh_token 使用者重新整理access_token
openid 使用者唯一標識,請注意,在未關注公眾號時,使用者訪問公眾號的網頁,也會產生一個使用者和公眾號唯一的OpenID
scope 使用者授權的作用域,使用逗號(,)分隔

-----------------使用access_token獲取使用者資訊

引數說明
access_token=ACCESS_TOKEN(第2步獲取的access_token引數,此access_token與基礎支援的access_token不同)
openid=OPENID(第2步獲取的openid引數)
langlang=zh_CN 返回國家地區語言版本,zh_CN 簡體,zh_TW 繁體,en 英語

地址例項(雖是測試號,但我還是隱藏部分資訊)紅色字型需要根據實際更改。
https://api.weixin.qq.com/sns/userinfo?access_token=e1nYJFpZuehfQH1buzHFZLb7onqs_wT1cudSdy9HRlnaMXFtFpRMNFOA0euK6UxPcItrSNbAQVcXDdthbLJYX0MdH1p7-tkZSKuGqBCxVc0&openid=o47Fa0mp9SRTf3eiKmqWm69BjG_8&lang=zh_CN

返回結果(json格式資料)
{
"openid": "o47Fa0mp9SRTf3eiKmqWm69BjG_8",
"nickname": "齊齊",
"sex": 0,
"language": "zh_CN",
"city": "Shaoxing",
"province": "Zhejiang",
"country": "CN",
"headimgurl": "http://wx.qlogo.cn/mmhead/Q3auHgzwzM6kqfcibzzVc8MDGBch53mIgJjWrbKSwkBnzcsWBOMOGlg/0",
"privilege": []
}

結果解釋
openid 使用者的唯一標識
nickname 使用者暱稱
sex 使用者的性別,值為1時是男性,值為2時是女性,值為0時是未知
province 使用者個人資料填寫的省份
city 普通使用者個人資料填寫的城市
country 國家,如中國為CN
headimgurl 使用者頭像,最後一個數值代表正方形頭像大小(有0、46、64、96、132數值可選,0代表640*640正方形頭像),使用者沒有頭像時該項為空
privilege 使用者特權資訊,json 陣列,如微信沃卡使用者為(chinaunicom)

---------------------------------程式碼實現

解讀完文件,理解實現的步驟、過程,那就開始具體的程式碼實現。

接觸過php,但是沒系統性的學習一下,所以程式碼實現的時候有些困難,如果不懂phpd的可以看這

直接上程式碼,在需要的地方我以註釋的形式說明。

命名為login.php放在伺服器根目錄。