OAuth2接口說明:
企業應用中的URL鏈接(包括自定義菜單或者消息中的鏈接),可以通過OAuth2.0驗證接口來獲取員工的身份信息。
通過此接口獲取用戶身份會有一定的時間開銷。對於頻繁獲取用戶身份的場景,建議采用如下方案:
1、企業應用中的URL鏈接直接填寫企業自己的頁面地址
2、用戶跳轉到企業頁面時,企業校驗是否有代表用戶身份的cookie,此cookie由企業生成
3、如果沒有獲取到cookie,重定向到OAuth驗證鏈接,獲取用戶身份后,由企業生成代表用戶身份的cookie
4、根據cookie獲取用戶身份,進入相應的頁面
注意,此URL的域名,必須完全匹配企業應用設置項中的'可信域名',否則獲取用戶信息時會返回50001錯誤碼。
企業獲取code
企業如果需要員工在跳轉到企業網頁時帶上員工的身份信息,需構造如下的鏈接:
參數 | 必須 | 說明 |
---|---|---|
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
- 參數說明
參數 | 必須 | 說明 |
---|---|---|
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); }
/// <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; } }
效果:
這時候已經完成了OAuth2接口,我們可以根據不同用戶展示不同
其中用到自己寫的微信開發API
因為剛開始做微信,API功能還在不斷完善中,所以還沒開源,等功能都實現了再放出來開源
如果有需要,請留言聯系!!!!
本節結束