LoginController.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. using Azure.Cosmos;
  2. using DingTalk.Api;
  3. using DingTalk.Api.Request;
  4. using DingTalk.Api.Response;
  5. using Microsoft.AspNetCore.Http;
  6. using Microsoft.AspNetCore.Mvc;
  7. using Microsoft.Extensions.Configuration;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Linq;
  11. using System.Text.Json;
  12. using System.Threading.Tasks;
  13. using TEAMModelOS.SDK.DI;
  14. using TEAMModelOS.SDK.Models;
  15. namespace TEAMModeBI.Controllers
  16. {
  17. [ProducesResponseType(StatusCodes.Status200OK)]
  18. [ProducesResponseType(StatusCodes.Status400BadRequest)]
  19. [Route("common/login")]
  20. [ApiController]
  21. public class LoginController : ControllerBase
  22. {
  23. private readonly IConfiguration _configuration;
  24. public LoginController(IConfiguration configuration)
  25. {
  26. _configuration = configuration;
  27. }
  28. /// <summary>
  29. /// 钉钉扫描登录
  30. /// </summary>
  31. /// <param name="loginTmpCode"></param>
  32. /// <returns></returns>
  33. [ProducesDefaultResponseType]
  34. [HttpGet("dingding")]
  35. public IActionResult DingDingLogin(string loginTmpCode)
  36. {
  37. string appKey = _configuration["appKey"];
  38. string appSecret = _configuration["appSecret"];
  39. string getuserinfo_bycode = _configuration["getuserinfo_bycode"];
  40. //判断参数是否为空
  41. if (string.IsNullOrEmpty(loginTmpCode))
  42. {
  43. return BadRequest("temp code error");
  44. }
  45. //获取access_token
  46. DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
  47. OapiGettokenRequest request = new OapiGettokenRequest();
  48. request.Appkey = appKey;
  49. request.Appsecret = appSecret;
  50. request.SetHttpMethod("Get");
  51. OapiGettokenResponse response = client.Execute(request);
  52. if (response.IsError)
  53. {
  54. return BadRequest();
  55. }
  56. string access_token = response.AccessToken;
  57. //获取临时授权码 获取授权用户的个人信息
  58. DefaultDingTalkClient client1 = new DefaultDingTalkClient("https://oapi.dingtalk.com/sns/getuserinfo_bycode");
  59. OapiSnsGetuserinfoBycodeRequest bycodeRequest = new OapiSnsGetuserinfoBycodeRequest()
  60. {
  61. //通过扫描二维码,跳转到指定的Url后,向Url中追加Code临时授权码
  62. TmpAuthCode = loginTmpCode
  63. };
  64. OapiSnsGetuserinfoBycodeResponse bycodeResponse = client1.Execute(bycodeRequest, appKey, appSecret);
  65. if (bycodeResponse.IsError)
  66. {
  67. return BadRequest();
  68. }
  69. //根据unionid获取userid
  70. string unionid = bycodeResponse.UserInfo.Unionid;
  71. DefaultDingTalkClient clientDingTalkClient = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/user/getbyunionid");
  72. OapiUserGetbyunionidRequest byunionidRequest = new OapiUserGetbyunionidRequest()
  73. {
  74. Unionid = unionid
  75. };
  76. OapiUserGetbyunionidResponse byunionidResponse = clientDingTalkClient.Execute(byunionidRequest, access_token);
  77. if (byunionidResponse.IsError)
  78. {
  79. return BadRequest();
  80. }
  81. string userid = byunionidResponse.Result.Userid;
  82. //根据userId获取用户信息
  83. DefaultDingTalkClient clientDingTalkClient2 = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/get");
  84. OapiV2UserGetRequest getRequest = new OapiV2UserGetRequest()
  85. {
  86. Userid = userid,
  87. Language="zh_CN"
  88. };
  89. getRequest.SetHttpMethod("Get");
  90. OapiV2UserGetResponse getResponse = clientDingTalkClient2.Execute(getRequest, access_token);
  91. if (getResponse.IsError)
  92. {
  93. return BadRequest();
  94. }
  95. return Ok(getResponse);
  96. }
  97. }
  98. }