You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

137 lines
5.0 KiB

1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
  1. using Shentun.WebPeis.Models;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using Volo.Abp.Application.Services;
  8. using Volo.Abp.Domain.Entities;
  9. using Volo.Abp.Domain.Repositories;
  10. using Volo.Abp.Users;
  11. using Shentun.WebPeis.Wechats;
  12. using Microsoft.Extensions.Configuration;
  13. using System.Net.Http;
  14. using System.Net;
  15. using System.Security.Claims;
  16. using System.Text.Json;
  17. using Volo.Abp.Identity;
  18. using Microsoft.AspNetCore.Identity;
  19. using OpenIddict.Server.AspNetCore;
  20. using Polly;
  21. using Volo.Abp;
  22. using Shentun.WebPeis.Enums;
  23. using System.Net.Http.Headers;
  24. using IdentityModel.Client;
  25. using static Volo.Abp.Identity.Settings.IdentitySettingNames;
  26. using Microsoft.AspNetCore.Mvc;
  27. namespace Shentun.WebPeis.Persons
  28. {
  29. public class PersonAppService : ApplicationService
  30. {
  31. private SignInManager<Volo.Abp.Identity.IdentityUser> _signInManager;
  32. private readonly IConfiguration _configuration;
  33. private readonly IRepository<Volo.Abp.Identity.IdentityUser, Guid> _identityUserRepository;
  34. private readonly IdentityUserManager _userManager;
  35. private readonly IRepository<Person> _repository;
  36. public PersonAppService(IRepository<Person> repository,
  37. IConfiguration configuration,
  38. IRepository<Volo.Abp.Identity.IdentityUser, Guid> identityUserRepository,
  39. IdentityUserManager userManager)
  40. {
  41. _repository = repository;
  42. _configuration = configuration;
  43. _identityUserRepository = identityUserRepository;
  44. _userManager = userManager;
  45. }
  46. public async Task<PersonDto> GetByIdAsync(PersonIdInputDto input)
  47. {
  48. var entity = await _repository.GetAsync(o=>o.UserId == input.PersonId);
  49. var entityDto = ObjectMapper.Map<Person, PersonDto>(entity);
  50. return entityDto;
  51. }
  52. [HttpPost("api/app/Person/GetWechatUserTokenAsync")]
  53. public async Task<UserTokenDto> GetWechatUserTokenAsync(WechatUserJsCodeInputDto input)
  54. {
  55. var wechatSession = await WeChatHelper.GetWechatSession(_configuration, input.JsCode);
  56. if (wechatSession == null)
  57. {
  58. throw new Exception("微信会话返回空值");
  59. }
  60. if (wechatSession.ErrCode != 0)
  61. {
  62. throw new Exception("微信账户登陆失败");
  63. }
  64. var client = new HttpClient();
  65. var weChatClientId = _configuration.GetSection("AuthServer").GetSection("WeChatClientId").Value;
  66. var secret = _configuration.GetSection("AuthServer").GetSection("WeChatClientSecret").Value;
  67. var dic = new Dictionary<string, object>
  68. {
  69. {"client_id",weChatClientId},
  70. {"client_secret",secret},
  71. {"grant_type",WeChatGrant.GrantType},
  72. };
  73. var tokenRequest = new TokenRequest()
  74. {
  75. ClientId = weChatClientId,
  76. ClientSecret = secret,
  77. GrantType = WeChatGrant.GrantType
  78. };
  79. var token = await client.RequestTokenAsync(tokenRequest);
  80. if (token.HttpResponse != null && token.HttpResponse.StatusCode == HttpStatusCode.OK)
  81. {
  82. var userTokenDto = new UserTokenDto
  83. {
  84. AccessToken = token.AccessToken,
  85. RefreshToken = token.RefreshToken
  86. };
  87. return userTokenDto;
  88. }
  89. else
  90. {
  91. //msg = new UserLoginDto { code = 1, msg = "登录成功", peisid = PeisId };
  92. throw new UserFriendlyException("获取token失败");
  93. }
  94. //var dicStr = dic.Select(m => m.Key + "=" + m.Value).DefaultIfEmpty().Aggregate((m, n) => m + "&" + n);
  95. //HttpContent httpContent = new StringContent(dicStr);
  96. //httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
  97. //var tokenResult = await client.PostAsync("connect/token", httpContent);
  98. //var tokenResultStr = await tokenResult.Content.ReadAsStringAsync();
  99. //if (tokenResult.IsSuccessStatusCode)
  100. //{
  101. // if (!string.IsNullOrEmpty(tokenResultStr))
  102. // {
  103. // dynamic signResult = JsonSerializer.Deserialize<object>(tokenResultStr);
  104. // }
  105. //}
  106. //else
  107. //{
  108. // if (string.IsNullOrEmpty(tokenResultStr))
  109. // throw new BusinessException(tokenResult.ReasonPhrase);
  110. //}
  111. //return tokenResultStr;
  112. }
  113. public async Task<PersonDto> CreateAsync(CreatePersonDto input)
  114. {
  115. var entity = ObjectMapper.Map<CreatePersonDto, Person>(input);
  116. var entityDto = ObjectMapper.Map<Person, PersonDto>(entity);
  117. return entityDto;
  118. }
  119. }
  120. }