using System; using System.Collections.Generic; using System.Text; using System.Web; using Edu.Cache.User; using Edu.Cache.WeChat; using Edu.Common.Plugin; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Senparc.Weixin.Work; using Senparc.Weixin.Work.AdvancedAPIs; using Senparc.Weixin.Work.AdvancedAPIs.OAuth2; using Senparc.Weixin.Work.Containers; namespace Edu.ThirdCore.QYWinXin { /// <summary> /// 企业微信处理 /// </summary> public class QYWeiXinHelper { #region 全局静态 private static string WORK_KEY = string.Empty; #endregion #region 令牌 public static string GetToken(int groupId,bool newToken=false) { var config = WeChatReidsCache.GetWorkChatConfig(groupId); if (config != null) { var token = AccessTokenContainer.GetTokenAsync(config.WX_CorpId, config.Employee_Secret, newToken); return token.Result; } else { return string.Empty; } } #endregion /// <summary> /// 解析用户信息 /// </summary> /// <param name="groupId"></param> /// <param name="code"></param> /// <returns></returns> public (bool status, GetUserInfoResult result) GetLoginWorkUserInfo(int groupId,string code) { var token = GetToken(groupId); if (!string.IsNullOrEmpty(token)) { var result = Senparc.Weixin.Work.AdvancedAPIs.OAuth2Api.GetUserId(token, code); return (true, result); } else { return (false, null); } } /// <summary> /// 组装跳转地址 /// </summary> /// <param name="groupId">集团编号</param> /// <param name="mark">唯一标识</param> /// <returns></returns> public string GetUserAuthorizationCodePath(int groupId, string mark) { var config = WeChatReidsCache.GetWorkChatConfig(groupId); var token = GetToken(groupId); if (!string.IsNullOrEmpty(token)) { string redirect_uri = $"http://mobileapis.kookaku.com/api/QYWeChat/UserCodeCallBack"; string state = mark; JObject cacheContent = new JObject(); cacheContent.Add("group_id",groupId); UserReidsCache.Set(mark, cacheContent, 60); return Senparc.Weixin.Work.AdvancedAPIs.OAuth2Api.GetCode(config.WX_CorpId, redirect_uri, state, "1000004"); } else { return string.Empty; } } /// <summary> /// 获取token /// </summary> /// <returns></returns> public static Senparc.Weixin.Work.Entities.AccessTokenResult GetToken(string corpId, string corpSecret) { return Senparc.Weixin.Work.CommonAPIs.CommonApi.GetToken(corpId, corpSecret); } /// <summary> /// 获取部门列表 /// </summary> /// <param name="token"></param> /// <returns></returns> public static object GetDepartmentList(string token) { return Senparc.Weixin.Work.AdvancedAPIs.MailListApi.GetDepartmentList(token); } } }