《微信開發日志》之OAuth2驗證接口


OAuth2接口說明:

企業應用中的URL鏈接(包括自定義菜單或者消息中的鏈接),可以通過OAuth2.0驗證接口來獲取員工的身份信息。

 

通過此接口獲取用戶身份會有一定的時間開銷。對於頻繁獲取用戶身份的場景,建議采用如下方案:

1、企業應用中的URL鏈接直接填寫企業自己的頁面地址

2、用戶跳轉到企業頁面時,企業校驗是否有代表用戶身份的cookie,此cookie由企業生成

3、如果沒有獲取到cookie,重定向到OAuth驗證鏈接,獲取用戶身份后,由企業生成代表用戶身份的cookie

4、根據cookie獲取用戶身份,進入相應的頁面

 

注意,此URL的域名,必須完全匹配企業應用設置項中的'可信域名',否則獲取用戶信息時會返回50001錯誤碼。

 

企業獲取code

企業如果需要員工在跳轉到企業網頁時帶上員工的身份信息,需構造如下的鏈接:

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

  • 參數說明
    參數 必須 說明
    appid 企業的CorpID
    redirect_uri 授權后重定向的回調鏈接地址,請使用urlencode對鏈接進行處理
    response_type 返回類型,此時固定為:code
    scope 應用授權作用域,此時固定為:snsapi_base
    state 重定向后會帶上state參數,企業可以填寫a-zA-Z0-9的參數值
    #wechat_redirect 微信終端使用此參數判斷是否需要帶上身份信息

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

     

    根據code獲取成員信息

  • 請求說明

     

    Https請求方式:GET

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

    • 參數說明
    參數 必須 說明
    access_token 調用接口憑證
    code 通過員工授權獲取到的code,每次員工授權帶上的code將不一樣,code只能使用一次,5分鍾未被使用自動過期
    agentid 跳轉鏈接時所在的企業應用ID
    • 權限說明

    管理員須擁有agent的使用權限;agentid必須和跳轉鏈接時所在的企業應用ID相同。

    • 返回結果

    a)正確時返回示例如下:

    { "UserId":"USERID", "DeviceId":"DEVICEID" } 
    參數 說明
    UserId 員工UserID
    DeviceId 手機設備號(由微信在安裝時隨機生成)

    出錯時返回示例如下:

    { "errcode": "40029", "errmsg": "invalid code" }

     

     

    --實例

    代碼如下:

    protected void Page_Load(object sender, EventArgs e)
            {
                //return;
                if (!this.IsPostBack)
                {
                    BLL = new bllWX();
    
                    //從數據庫中獲取配置信息
                    DataTable dt = BLL.GetWXConfig();
                    string CorpToken = ConvertEx.ToString(dt.Rows[0][tb_WXConfig.CorpToken]);
                    string CorpID = ConvertEx.ToString(dt.Rows[0][tb_WXConfig.CorpID]);
                    string EncodingAESKey = ConvertEx.ToString(dt.Rows[0][tb_WXConfig.EncodingAESKey]);
                    string Secret = ConvertEx.ToString(dt.Rows[0][tb_WXConfig.Secret]);
                    string AccessToken = ConvertEx.ToString(dt.Rows[0][tb_WXConfig.AccessToken]);
    
                    CorpCommonData data = CorpCommonData.IniCorpCommonData(AccessToken, CorpID, Secret, "1");
    
                    data.accesstokenChanged += data_accesstokenChanged;
    
                    string code = Request["code"];
                    handle = new ActiveMessageHandler();
                    //根據Code參數獲得用戶ID
                    var userid = handle.OAuth2_GetUserInfo(code, null, null);
                    if (ConvertEx.ToInt(userid.errcode, 0) == 0)//獲取成功
                    {
                        //根據用戶ID獲得用戶信息
                        var UserModel = handle.GetUserModel(userid.UserId, null);
                        //var UserModel = handle.GetUserModel("zgs", null);
                        UserName = UserModel.name;
                    }
    
                }
            }
    
            /// <summary>
            /// 將新的AccessToken寫入數據庫
            /// </summary>
            /// <param name="AccessToken"></param>
            void data_accesstokenChanged(string AccessToken)
            {
                BLL.UpdateAccessToken(AccessToken);
            }
    UserModel是用戶信息格式:
    /// <summary>
        /// 企業員工信息
        /// </summary>
        public class ModelUser
        {
            /// <summary>
            /// 員工UserID 
            /// </summary>
            public string userid { get; set; }
            /// <summary>
            /// 成員名稱 
            /// </summary>
            public string name { get; set; }
            /// <summary>
            /// 成員所屬部門id列表 
            /// </summary>
            public string department { get; set; }
            /// <summary>
            /// 職位信息
            /// </summary>
            public string position { get; set; }
            /// <summary>
            /// 手機號碼
            /// </summary>
            public string mobile { get; set; }
            /// <summary>
            /// 性別。gender=0表示男,=1表示女 
            /// </summary>
            public string gender { get; set; }
            /// <summary>
            /// 辦公電話 
            /// </summary>
            public string tel { get; set; }
            /// <summary>
            /// 郵箱 
            /// </summary>
            public string email { get; set; }
            /// <summary>
            /// 微信號 
            /// </summary>
            public string weixinid { get; set; }
            /// <summary>
            /// 頭像url。注:如果要獲取小圖將url最后的"/0"改成"/64"即可 
            /// </summary>
            public string avatar { get; set; }
            /// <summary>
            /// 關注狀態: 1=已關注,2=已凍結,4=未關注 
            /// </summary>
            public string status { get; set; }
            /// <summary>
            /// 擴展屬性 
            /// </summary>
            public string extattr { get; set; }
    
        }
     

    效果:

    imageimage

     

    這時候已經完成了OAuth2接口,我們可以根據不同用戶展示不同

     

    其中用到自己寫的微信開發API

    image

     

    因為剛開始做微信,API功能還在不斷完善中,所以還沒開源,等功能都實現了再放出來開源

    如果有需要,請留言聯系!!!!

     

    本節結束


    免責聲明!

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



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