Browse Source

老系统微信登录调用新系统接口

qinchaoyue 1 week ago
parent
commit
43fefcda41

+ 14 - 0
src/Hotline.Api/Controllers/IdentityController.cs

@@ -121,6 +121,20 @@ jxrWXHbT1FB6DqkdOnBbQqS1Azqz5HxLlSyEK3F60e3SgB5iZsDZ
     public async Task<Dictionary<string, object>> GetThirdTokenAsync([FromBody] ThirdTokenInDto dto)
         => await _identityAppService.GetThredTokenAsync(dto, HttpContext.RequestAborted);
 
+
+    /// <summary>
+    /// 第三方登录
+    /// </summary>
+    /// <param name=""></param>
+    /// <param name="_identityAppService"></param>
+    /// <param name=""></param>
+    /// <param name=""></param>
+    /// <returns></returns>
+    [AllowAnonymous]
+    [HttpPost("third/login")]
+    public async Task<Dictionary<string, object>> GetThirdLoginAsync([FromBody] ThirdOpenIdInDto dto)
+            => await _identityAppService.GetThredTokenAsync(dto, HttpContext.RequestAborted);
+
     /// <summary>
     /// 根据OpenId刷新令牌
     /// </summary>

+ 8 - 0
src/Hotline.Application/Identity/IIdentityAppService.cs

@@ -22,6 +22,14 @@ namespace Hotline.Application.Identity
         /// <exception cref="UserFriendlyException"></exception>
         Task<Dictionary<string, object>> GetThredTokenAsync(ThirdTokenInDto dto, CancellationToken token);
 
+        /// <summary>
+        /// 第三方登录
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <param name="token"></param>
+        /// <returns></returns>
+        Task<Dictionary<string, object>> GetThredTokenAsync(ThirdOpenIdInDto dto, CancellationToken token);
+
         /// <summary>
         /// 根据OpenId刷新令牌
         /// </summary>

+ 16 - 3
src/Hotline.Application/Identity/IdentityAppService.cs

@@ -336,14 +336,27 @@ public class IdentityAppService : IIdentityAppService, IScopeDependency
         thirdDto = await _thirdAccountDomainFactory.GetThirdParameterAsync(thirdDto, token);
         var thirdToken = await _thirdIdentiyFactory.GetTokenAsync(thirdDto, token);
         var phone = await _thirdIdentiyFactory.GetPhoneNumberAsync(thirdDto, token);
-        var thirdAccount = await _thirdAccountRepository.GetByOpenIdAsync(thirdToken.OpenId, token);
+
+        var inDto = new ThirdOpenIdInDto
+        { 
+            OpenId = thirdToken.OpenId,
+            UnionId = thirdToken.UnIonId,
+            AppType = dto.AppType,
+            ThirdType = dto.ThirdType,
+            PhoneNumber = phone.PhoneNumber
+        };
+        return await GetThredTokenAsync(inDto, token);
+    }
+
+    public async Task<Dictionary<string, object>> GetThredTokenAsync(ThirdOpenIdInDto dto, CancellationToken token)
+    {
+        var thirdAccount = await _thirdAccountRepository.GetByOpenIdAsync(dto.OpenId, token);
 
         // 新用户注册
         if (thirdAccount is null)
         {
             thirdAccount = dto.Adapt<ThirdAccount>();
-            thirdToken.Adapt(thirdAccount);
-            thirdAccount.PhoneNumber = phone.PhoneNumber;
+            thirdAccount.PhoneNumber = dto.PhoneNumber;
             thirdAccount.Id = await _thirdAccountRepository.AddAsync(thirdAccount);
             await _thirdAccountDomainFactory.RegisterAsync(thirdAccount, token);
             thirdAccount = await _thirdAccountRepository.GetAsync(thirdAccount.Id, token);

+ 37 - 0
src/Hotline.Share/Dtos/Snapshot/ThirdTokenDto.cs

@@ -6,6 +6,43 @@ using System.ComponentModel.DataAnnotations;
 
 namespace Hotline.Share.Dtos.Snapshot;
 
+public class ThirdOpenIdInDto
+{
+    /// <summary>
+    /// OpenId
+    /// </summary>
+    public string OpenId { get; set; }
+
+    /// <summary>
+    /// UnionId
+    /// </summary>
+    public string UnionId { get; set; }
+
+    /// <summary>
+    /// 第三方平台类型(不传默认微信)
+    /// 0: 微信
+    /// </summary>
+    public EThirdType ThirdType { get; set; } = EThirdType.WeChat;
+
+    /// <summary>
+    /// 登录app(不传默认随手拍)
+    /// 1: 随手拍
+    /// 2: 部门办件app
+    /// 3: 市民办件app
+    /// </summary>
+    public EAppType AppType { get; set; } = EAppType.Snapshot;
+
+    /// <summary>
+    /// 接口地址前缀
+    /// </summary>
+    public string? WebApiHost { get; set; }
+
+    /// <summary>
+    /// 电话号码
+    /// </summary>
+    public string? PhoneNumber { get; set; }
+}
+
 public class ThirdTokenInDto
 {
     /// <summary>