h5微信接入授權登錄


  https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
    • code
      • code作為換取access_token的票據,每次用戶授權帶上的code將不一樣,code只能使用一次,5分鍾未使用自動過期
      • 存在:已授權
      • 不存在:未授權,則跳轉微信授權鏈接,
    • appid(必填)
      • 公眾號的唯一標識
    • redirect_url(必填)
      • 授權成功后跳轉的地址,微信會跳轉到改鏈接,並通過?的形式拼接code,請使用urlEncode對鏈接進行處理
    • response_type(必填)
      • 返回類型,請填寫code
    • scope(必填)
      • 應用授權作用域
        • 靜默授權(scope=snsapi_base):不彈出授權頁面,直接跳轉,只能獲取用戶openid
        • 非靜默授權(scope=snsapi_userinfo):彈出授權頁面,可通過openid拿到昵稱、性別、所在地,即使在未關注的情況下,只要用戶授權,也能獲取其信息。
    • state
      • 重定向后會帶上state參數,開發者可以填寫a-zA-Z0-9的參數值,最多128字節
    • #wechat_redirect(必填)
      • 無論直接打開還是做頁面302重定向時,必須帶此參數
    • 提示
      • 若提示“該鏈接無法訪問”,請檢查參數是否填寫錯誤,是否擁有scope參數對應的授權作用域權限。

      • 由於授權操作安全等級較高,所以在發起授權請求時,微信會對授權鏈接做正則強匹配校驗,如果鏈接的參數順序不對,授權頁面將無法正常訪問。

      • 跳轉回調redirect_uri,應當使用https鏈接來確保授權code的安全性。

  • 步驟
    • 用戶同意授權,獲取code
    • 通過code換區網頁授權access_token
      • 獲取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
      •  正確返回的json數據包
        {
          "access_token":"ACCESS_TOKEN",
          "expires_in":7200,
          "refresh_token":"REFRESH_TOKEN",
          "openid":"OPENID",
          "scope":"SCOPE" 
        }
        • 參數
          • access_toke
            • 網頁授權接口調用憑證:此access_token與基礎支持的access_token不同
          • expires_in
            • 調用憑證超時時間,單位(秒)
          • refresh_token
            • 用戶刷新access_token
          • openid
            • 用戶唯一標識,請注意,在未關注公眾號時,用戶訪問公眾號的頁面,也會產生一個用戶和公眾號唯一的OpenId
          • scope
            • 用戶授權的作用於,使用逗號(,)分隔
      •  錯誤返回的json數據包
        {"errcode":40029,"errmsg":"invalid code"}
    • 刷新access_token(如果需要)
      • 較短有效期,當超時后,可以使用refresh_token進行刷新,refresh_token有效期為30天,當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參數
        • 正確返回的json數據包
          { 
            "access_token":"ACCESS_TOKEN",
            "expires_in":7200,
            "refresh_token":"REFRESH_TOKEN",
            "openid":"OPENID",
            "scope":"SCOPE" 
          }
          • 參數(參數介紹,同上)
        • 錯誤返回的json數據包
          {"errcode":40029,"errmsg":"invalid code"}
    • 拉去用戶信息(需要scope為snsapi_userinfo)

 

        https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

 

      • 參數
        • aceess_token(同上)
        • openid(同上)
        • lang
          • 返回國家地區語言版本,zh_CN簡體,zh_TW繁體,en英語
      • 正確返回的json數據包
        {   
          "openid":" OPENID",
          " nickname": NICKNAME,
          "sex":"1",
          "province":"PROVINCE",
          "city":"CITY",
          "country":"COUNTRY",
          "headimgurl":       "http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
          "privilege":[ "PRIVILEGE1" "PRIVILEGE2"     ],
          "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
        }
        • 參數
          • openid(同上)
          • nickname
            • 用戶昵稱
          • sex
            • 用戶性別,1=>男,2=>女,0=>未知
          • province
            • 用戶個人資料填寫的省份
          • city
            • 普通用戶個人資料填寫的城市
          • country
            • 國家,如中國為CN
          • headimgurl
            • 用戶頭像
          • privilege
            • 用戶特權信息
          • unionid
            • 只有在用戶將公眾號綁定到微信開放平台后,才會出現該字段
      • 錯誤返回的json數據包
        {"errcode":40003,"errmsg":" invalid openid "}

         

  • 附:檢驗授權憑證(access_token)是否有效
    https://api.weixin.qq.com/sns/auth?access_token=ACCESS_TOKEN&openid=OPENID
    • 參數
      • access_token(同上)
      • openid(同上)
    • 正確返回的json數據包
      { "errcode":0,"errmsg":"ok"}
    • 錯誤返回的json數據包
      { "errcode":40003,"errmsg":"invalid openid"}

       

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM