參考文檔:
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=&lang=zh_CN
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316518&token=&lang=zh_CN
微信開放平台里面的文檔已經說明的很詳細了。這里再用實例補充下。
1.發送請求
微信登錄的請求鏈接:https://open.weixin.qq.com/connect/qrconnect?appid=12312312312312&redirect_uri=www.baidu.com&response_type=code&scope=snsapi_login&state=3072355978#wechat_redirect
參數說明:
appid:應用唯一標識,必填
redirect_uri:重定向地址,需要進行UrlEncode,必填
response_type: code,必填
scope:應用授權作用域,擁有多個作用域用逗號(,)分隔,網頁應用目前僅填寫snsapi_login即可,必填
state:用於保持請求和回調的狀態,授權請求后原樣帶回給第三方。該參數可用於防止csrf攻擊(跨站請求偽造攻擊),建議第三方帶上該參數,可設置為簡單的隨機數加session進行校驗,非必填
用戶允許授權后,將會重定向到redirect_uri的網址上,並且帶上code和state參數:www.baidu.com?code=CODE&state=STATE
若用戶禁止授權,則重定向后不會帶上code參數,僅會帶上state參數:www.baidu.com?state=STATE
第二步:通過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接口調用憑證超時時間,單位(秒)(目前為2個小時)
refresh_token: 用戶刷新access_token
openid: 授權用戶唯一標識
scope: 用戶授權的作用域,使用逗號(,)分隔
unionid: 只有在用戶將公眾號綁定到微信開放平台帳號后,才會出現該字段。
access_token是調用授權關系接口的調用憑證,由於access_token有效期(目前為2個小時)較短,當access_token超時后,可以使用refresh_token進行刷新。refresh_token擁有較長的有效期(30天),當refresh_token失效的后,需要用戶重新授權。
獲取第一步的code后,請求以下鏈接進行refresh_token:
https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
參數說明:
appid:應用唯一標識,必填
grant_type:填refresh_token,必填
refresh_token:填寫通過access_token獲取到的refresh_token參數,必填
正確的返回:
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"
}
第三步:通過access_token調用接口
獲取access_token后,進行接口調用,有以下前提:
1. access_token有效且未超時;
2. 微信用戶已授權給第三方應用帳號相應接口作用域(scope)。