捋一捋PHP第三方微信登錄
阿新 • • 發佈:2018-06-01
微信登錄 wechat login PC端掃二維碼登錄
先說步驟吧:
微信網站登錄的文檔在https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=41ab5f757248bbbdcc2aad1a6d52b49fdc19579e&lang=zh_CN
參數 是否必須 說明
appid 是 應用唯一標識
redirect_uri 是 重定向地址,需要進行UrlEncode
response_type 是 填code
scope 是 應用授權作用域,擁有多個作用域用逗號(,)分隔,網頁應用目前僅填寫snsapi_login即可
state 否 用於保持請求和回調的狀態,授權請求後原樣帶回給第三方。該參數可用於防止csrf×××(跨站請求偽造×××),建議第三方帶上該參數,可設置為簡單的隨機數加session進行校驗
把appid參數傳給開放平臺。鏈接頁面會顯示一個二維碼。
2.用戶掃碼二維碼,掃碼成功後,會跳轉回你傳的域名地址。
同時域名後面會帶有code和state參數。這個code則是我們需要拿到的鑰匙
redirect_uri?code=CODE&state=STATE
3.在redirect_uri跳轉的頁面或者控制器中,接收code值
code每次會生成一個,用後即會銷毀,也就是你不能不停跳轉。
4.通過appid、appSecret還有code值,請求open的access_token接口,獲得access_token。
{
"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授權時,才會出現該字段。
這裏解釋一下,access_token是接口憑證,請求接口需要帶上,時間為2個小時。openid是獲取用戶信息的參數,就如username。而unionid則是uid,用戶的唯一ID。
5.拿到token和openid後,可以通過UserInfo接口獲得用戶數據。https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
正確的Json返回結果:
{
"openid":"OPENID",
"nickname":"NICKNAME",
"sex":1,
"province":"PROVINCE",
"city":"CITY",
"country":"COUNTRY",
"headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
"privilege":[
"PRIVILEGE1",
"PRIVILEGE2"
],
"unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
先說步驟吧:
微信網站登錄的文檔在https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=41ab5f757248bbbdcc2aad1a6d52b49fdc19579e&lang=zh_CN
1.微信登錄請求,其實你可以當成是個url跳轉。https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
參數 是否必須 說明
appid 是 應用唯一標識
redirect_uri 是 重定向地址,需要進行UrlEncode
response_type 是 填code
scope 是 應用授權作用域,擁有多個作用域用逗號(,)分隔,網頁應用目前僅填寫snsapi_login即可
state 否 用於保持請求和回調的狀態,授權請求後原樣帶回給第三方。該參數可用於防止csrf×××(跨站請求偽造×××),建議第三方帶上該參數,可設置為簡單的隨機數加session進行校驗
把appid參數傳給開放平臺。鏈接頁面會顯示一個二維碼。
2.用戶掃碼二維碼,掃碼成功後,會跳轉回你傳的域名地址。
同時域名後面會帶有code和state參數。這個code則是我們需要拿到的鑰匙
redirect_uri?code=CODE&state=STATE
3.在redirect_uri跳轉的頁面或者控制器中,接收code值
code每次會生成一個,用後即會銷毀,也就是你不能不停跳轉。
4.通過appid、appSecret還有code值,請求open的access_token接口,獲得access_token。
{
"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授權時,才會出現該字段。
這裏解釋一下,access_token是接口憑證,請求接口需要帶上,時間為2個小時。openid是獲取用戶信息的參數,就如username。而unionid則是uid,用戶的唯一ID。
5.拿到token和openid後,可以通過UserInfo接口獲得用戶數據。https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
正確的Json返回結果:
{
"openid":"OPENID",
"nickname":"NICKNAME",
"sex":1,
"province":"PROVINCE",
"city":"CITY",
"country":"COUNTRY",
"headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
"privilege":[
"PRIVILEGE1",
"PRIVILEGE2"
],
"unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
微信網頁授權(微信瀏覽器)即H5微信登錄
網頁授權流程分為四步:
1、引導用戶進入授權頁面同意授權,獲取code
2、通過code換取網頁授權access_token(與基礎支持中的access_token不同)
3、如果需要,開發者可以刷新網頁授權access_token,避免過期
4、通過網頁授權access_token和openid獲取用戶基本信息(支持UnionID機制)
如果網頁授權作用域為snsapi_userinfo,則此時開發者可以通過access_token和openid拉取用戶信息了。
捋一捋PHP第三方微信登錄