using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Edu.Cache.User; using Edu.Common; using Edu.Common.API; using Edu.Common.Enum.Finance; using Edu.Common.Plugin; using Edu.Model.ViewModel.WeChat; using Edu.Module.QYWeChat; using Edu.Module.User; using Edu.ThirdCore.QYWinXin; using Edu.WebApi.Filter; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Cors; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json.Linq; namespace Edu.WebApi.Controllers.Finance { /// /// 企业微信接口 /// [Route("api/[controller]/[action]")] [ApiExceptionFilter] [ApiController] [EnableCors("AllowCors")] public class QYWeChatController : BaseController { /// /// 企业微信处理类对象 /// private readonly QYWeChatModule weChatModule = new QYWeChatModule(); private readonly GroupModule groupModule = new GroupModule(); #region 微信配置 /// /// 获取活动配置 /// /// [HttpPost] public ApiResult GetWeChatConfigInfo() { var userInfo = base.UserInfo; var model = weChatModule.GetWeChatConfigModel(new RB_WeChat_Config_ViewModel() { Group_Id = userInfo.Group_Id }); return ApiResult.Success("", new { model.Id, model.Name, model.WX_CorpId, model.Social_Code, model.Employee_Secret, model.Contact_Secret, model.TelEvent_CallBack, model.Token, model.Encoding_Aes_Key, model.EmpEvent_CallBack, model.UpdateBy, UpdateByName = UserReidsCache.GetUserLoginInfo(model.UpdateBy)?.AccountName ?? "", UpdateTime = model.UpdateTime.ToString("yyyy-MM-dd HH:mm") }); } /// /// 新增/修改 活动配置 /// /// [HttpPost] public ApiResult SetWeChatConfig() { var userInfo = base.UserInfo; RB_WeChat_Config_ViewModel demdoel = JsonHelper.DeserializeObject(RequestParm.Msg.ToString()); demdoel.Group_Id = userInfo.Group_Id; demdoel.CreateBy = userInfo.Id; demdoel.CreateTime = DateTime.Now; demdoel.UpdateBy = userInfo.Id; demdoel.UpdateTime = DateTime.Now; string msg = weChatModule.SetWeChatConfig(demdoel); if (msg == "") { return ApiResult.Success(); } else { return ApiResult.Failed(msg); } } #endregion #region 企业微信客户端API /// /// 获取企业微信TOKEN /// /// [HttpPost] [AllowAnonymous] public ApiResult GetWorkToken() { var referer = Request.Headers["Origin"].ToString().Replace("http://", ""); if (!string.IsNullOrEmpty(referer)) { var group = groupModule.GetGroupEntityModule(referer); if (group.GId != 0) { var query = QYWeiXinHelper.GetToken(group.GId); if (!string.IsNullOrEmpty(query)) { return ApiResult.Success(data: query); } else { return ApiResult.Failed(message: "解析用户信息失败"); } } else { return ApiResult.Failed(message: "未知的集团信息"); } } else { return ApiResult.Failed(message: "未找到域名来源"); } } /// /// 发起登录请求 /// /// [HttpPost] [AllowAnonymous] public ApiResult SetUserAutoLogin() { var referer = Request.Headers["Origin"].ToString().Replace("http://",""); if (!string.IsNullOrEmpty(referer)) { var group = groupModule.GetGroupEntityModule(referer); if (group.GId != 0) { var query = JObject.Parse(RequestParm.Msg.ToString()); var mark = query.GetStringValue("mark"); var path = new QYWeiXinHelper().GetUserAuthorizationCodePath(group.GId, mark); if (!string.IsNullOrEmpty(path)) { HttpHelper.HttpGet(path); return ApiResult.Success(data:path); } else { return ApiResult.Failed(message: "获取登录信息失败"); } } else { return ApiResult.Failed(message: "未知的集团信息"); } } else { return ApiResult.Failed(message:"未找到域名来源"); } } /// /// 获取登录信息 /// /// [HttpPost] [AllowAnonymous] public ApiResult GetLoginUserInfo() { var mark = JObject.FromObject(RequestParm.Msg).GetStringValue("mark"); mark += "_Finish"; if (UserReidsCache.Exists(mark)) { var cacheObj = UserReidsCache.Get(mark); var cacheContent = JObject.FromObject(cacheObj); return ApiResult.Success(data: cacheContent["user"].ToString()); } else { return ApiResult.Success(data:""); } } /// /// 获取用户Code /// /// [HttpGet] [AllowAnonymous] public IActionResult UserCodeCallBack() { var mark = Request.Query["state"].ToString(); var code = Request.Query["code"].ToString(); var cacheObj = UserReidsCache.Get(mark); if (cacheObj != null && !string.IsNullOrEmpty(code)) { var cacheContent = JObject.FromObject(cacheObj); var userInfo = new QYWeiXinHelper().GetLoginWorkUserInfo(cacheContent.GetInt("group_id"),code); if (userInfo.status) { cacheContent.Add("user", JObject.FromObject(userInfo.result)); UserReidsCache.Set(mark+"_Finish", cacheContent, 60); } } var redirect_url = $"{Config.WorkAPPDomain}/login?mark={mark}"; return Redirect(redirect_url); } #endregion } }