using Azure.Cosmos;
using DingTalk.Api;
using DingTalk.Api.Request;
using DingTalk.Api.Response;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using System.Threading.Tasks;
using TEAMModelOS.SDK.DI;
using TEAMModelOS.SDK.Models;
namespace TEAMModeBI.Controllers
{
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[Route("common/login")]
[ApiController]
public class LoginController : ControllerBase
{
private readonly IConfiguration _configuration;
public LoginController(IConfiguration configuration)
{
_configuration = configuration;
}
///
/// 钉钉扫描登录
///
///
///
[ProducesDefaultResponseType]
[HttpGet("dingding")]
public IActionResult DingDingLogin(string loginTmpCode)
{
string appKey = _configuration["appKey"];
string appSecret = _configuration["appSecret"];
string getuserinfo_bycode = _configuration["getuserinfo_bycode"];
//判断参数是否为空
if (string.IsNullOrEmpty(loginTmpCode))
{
return BadRequest("temp code error");
}
//获取access_token
DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
OapiGettokenRequest request = new OapiGettokenRequest();
request.Appkey = appKey;
request.Appsecret = appSecret;
request.SetHttpMethod("Get");
OapiGettokenResponse response = client.Execute(request);
if (response.IsError)
{
return BadRequest();
}
string access_token = response.AccessToken;
//获取临时授权码 获取授权用户的个人信息
DefaultDingTalkClient client1 = new DefaultDingTalkClient("https://oapi.dingtalk.com/sns/getuserinfo_bycode");
OapiSnsGetuserinfoBycodeRequest bycodeRequest = new OapiSnsGetuserinfoBycodeRequest()
{
//通过扫描二维码,跳转到指定的Url后,向Url中追加Code临时授权码
TmpAuthCode = loginTmpCode
};
OapiSnsGetuserinfoBycodeResponse bycodeResponse = client1.Execute(bycodeRequest, appKey, appSecret);
if (bycodeResponse.IsError)
{
return BadRequest();
}
//根据unionid获取userid
string unionid = bycodeResponse.UserInfo.Unionid;
DefaultDingTalkClient clientDingTalkClient = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/user/getbyunionid");
OapiUserGetbyunionidRequest byunionidRequest = new OapiUserGetbyunionidRequest()
{
Unionid = unionid
};
OapiUserGetbyunionidResponse byunionidResponse = clientDingTalkClient.Execute(byunionidRequest, access_token);
if (byunionidResponse.IsError)
{
return BadRequest();
}
string userid = byunionidResponse.Result.Userid;
//根据userId获取用户信息
DefaultDingTalkClient clientDingTalkClient2 = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/get");
OapiV2UserGetRequest getRequest = new OapiV2UserGetRequest()
{
Userid = userid,
Language="zh_CN"
};
getRequest.SetHttpMethod("Get");
OapiV2UserGetResponse getResponse = clientDingTalkClient2.Execute(getRequest, access_token);
if (getResponse.IsError)
{
return BadRequest();
}
return Ok(getResponse);
}
}
}