企業號OAuth2.0驗證企業用戶接口

業務需求:
php

        企業號微信端綁定一個應用,此應用可見範圍爲添加的企業受權員工(非微信裏受權的員工之外人員不可訪問)。html

問題:後端

        當員工分享出去後,別的人也能夠打開訪問,如今須要進行驗證,打開連接時判斷是否爲企業受權人員 ,不是則不能訪問。
api

解決策略:
微信

        經過OAuth2.0驗證接口來獲取成員的身份信息session

注意,此URL的域名,必須徹底匹配企業應用設置項中的'可信域名'(若是你的redirect_uri有端口號,那'可信域名'也必須加上端口號),不然跳轉時會提示redirect_uri參數錯誤。app

可信域名必須爲備案後的域名或二級域名(我就遇到此問題,提示 redirect_uri參數錯誤)curl

1.在微信公衆號應用裏綁定域名和連接 微信斷打開獲取微信用戶code參數函數

企業若是須要員工在跳轉到企業網頁時帶上員工的身份信息,需構造以下的連接:url

https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect


此爲未備案 的域名



FOCUS:

        員工點擊後,頁面將跳轉至 redirect_uri/?code=CODE&state=STATE,企業可根據code參數得到員工的userid。

js可經過url獲取code參數

function getParameterByName(name){
    var values = decodeURIComponent((location.search.match(RegExp("[?|&]" + name + '=([^\&]+)'))||[,null])[1]);
    return  values == "" || values == "null" ? "" : values;
};
傳入參數 name='code'

2.根據code獲取訪問成員信息

  • 請求說明

Https請求方式:GET

https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE

3.獲取微信企業應用參數信息,獲得應用的人員信息

  • 接口說明

該API用於獲取企業號某個應用的基本信息,包括頭像、暱稱、賬號類型、認證類型、可見範圍等信息

  • 請求說明

Https請求方式: GET

https://qyapi.weixin.qq.com/cgi-bin/agent/get?access_token=ACCESS_TOKEN&agentid=AGENTID

4.根據2得到的 微信用戶信息與3獲得的企業人員用戶進行 匹配判斷  分配權限

5.經過HTML5,把員工信息保留session 對每一個頁面進行權限判斷

      

   sessionStorage.setItem("access",datas.code);
   sessionStorage.getItem("access") == null

PS: AccessToken

AccessToken是企業號的全局惟一票據,調用接口時需攜帶AccessToken。

AccessToken須要用CorpID和Secret來換取,正常狀況下AccessToken有效期爲7200秒,有效期內重複獲取返回相同結果,並自動續期。

因爲獲取access_token的api調用次數很是有限,建議應用存儲與更新access_token,頻繁刷新access_token會致使api調用受限,影響自身業務。

  • 請求說明

Https請求方式: GET

https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=id&corpsecret=secrect


開發中遇到的問題:

    1.code只能經過微信客戶端得到,需經過js從回調的url 截取 後alert(code)進行查看 

    2.後端php訪問微信接口

        剛開始使用 file_get_contents方式   延時 訪問失敗 ,得不到數據

        使用curl 函數 訪問https 成功

function getHTTPS($url) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_REFERER, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        $result = curl_exec($ch);
        curl_close($ch);
        return $result;
    }
相關文章
相關標籤/搜索