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
}
}