Przeglądaj źródła

Merge branch 'v2' of https://gitee.com/zuohuaijun/Admin.NET into v2

Cyrus Zhou 11 miesięcy temu
rodzic
commit
8dc5b7c03f

+ 0 - 33
Admin.NET/Admin.NET.Core/Job/WechatAccessTokenCheckJob.cs

@@ -1,33 +0,0 @@
-// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
-//
-// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
-//
-// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
-
-namespace Admin.NET.Core;
-
-/// <summary>
-/// 微信AccessToken有效性检查作业任务
-/// </summary>
-[JobDetail("job_WechatAccessTokenCheckJob", Description = "微信AccessToken有效性检查", GroupName = "default", Concurrent = false)]
-[PeriodSeconds(60, TriggerId = "trigger_WechatAccessTokenCheckJob", Description = "微信AccessToken有效性检查", RunOnStart = true)]
-public class WechatAccessTokenCheckJob : IJob
-{
-    private readonly IServiceScopeFactory _scopeFactory;
-    private readonly ILogger _logger;
-
-    public WechatAccessTokenCheckJob(IServiceScopeFactory scopeFactory, ILoggerFactory loggerFactory)
-    {
-        _scopeFactory = scopeFactory;
-        _logger = loggerFactory.CreateLogger(nameof(WechatAccessTokenCheckJob));
-    }
-
-    public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
-    {
-        using var serviceScope = _scopeFactory.CreateScope();
-
-        var factory = serviceScope.ServiceProvider.GetService<WechatApiClientFactory>();
-        await factory.CheckWechatAccessTokenAsync();
-        await factory.CheckWxOpenAccessTokenAsync();
-    }
-}

+ 2 - 1
Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs

@@ -308,13 +308,14 @@ public class SysFileService : IDynamicApiController, ITransient
 
         var sysUserRep = _sysFileRep.ChangeRepository<SqlSugarRepository<SysUser>>();
         var user = await sysUserRep.GetByIdAsync(_userManager.UserId);
+        await sysUserRep.UpdateAsync(u => new SysUser() { Avatar = sysFile.Url }, u => u.Id == user.Id);
         // 删除已有头像文件
         if (!string.IsNullOrWhiteSpace(user.Avatar))
         {
             var fileId = Path.GetFileNameWithoutExtension(user.Avatar);
             await DeleteFile(new DeleteFileInput { Id = long.Parse(fileId) });
         }
-        await sysUserRep.UpdateAsync(u => new SysUser() { Avatar = sysFile.Url }, u => u.Id == user.Id);
+
         return sysFile;
     }
 

+ 1 - 17
Admin.NET/Admin.NET.Core/Service/Wechat/SysWechatService.cs

@@ -16,7 +16,6 @@ public class SysWechatService : IDynamicApiController, ITransient
 	private readonly SysConfigService _sysConfigService;
 	private readonly WechatApiClientFactory _wechatApiClientFactory;
 	private readonly WechatApiClient _wechatApiClient;
-	private readonly SysCacheService _sysCacheService;
 
 	public SysWechatService(SqlSugarRepository<SysWechatUser> sysWechatUserRep,
 		SysConfigService sysConfigService,
@@ -27,7 +26,6 @@ public class SysWechatService : IDynamicApiController, ITransient
 		_sysConfigService = sysConfigService;
 		_wechatApiClientFactory = wechatApiClientFactory;
 		_wechatApiClient = wechatApiClientFactory.CreateWechatClient();
-		_sysCacheService = sysCacheService;
 	}
 
 	/// <summary>
@@ -199,20 +197,6 @@ public class SysWechatService : IDynamicApiController, ITransient
 	[NonAction]
 	public async Task<string> GetCgibinToken()
 	{
-		// 先从缓存中取 AccessToken
-		var wx_accessToken = _sysCacheService.Get<string>("sys_wx_accessToken");
-		if (!string.IsNullOrWhiteSpace(wx_accessToken))
-		{
-			return wx_accessToken;
-		}
-
-		// 若缓存没有则从微信公众号重新获取 AccessToken
-		var reqCgibinToken = new CgibinTokenRequest();
-		var resCgibinToken = await _wechatApiClient.ExecuteCgibinTokenAsync(reqCgibinToken);
-		if (resCgibinToken.ErrorCode != (int)WechatReturnCodeEnum.请求成功)
-			throw Oops.Oh(resCgibinToken.ErrorMessage + " " + resCgibinToken.ErrorCode);
-
-		_sysCacheService.Set("sys_wx_accessToken", resCgibinToken.AccessToken, TimeSpan.FromSeconds(resCgibinToken.ExpiresIn)); // 缓存 AccessToken
-		return resCgibinToken.AccessToken;
+		return await _wechatApiClientFactory.TryGetWechatAccessTokenAsync();
 	}
 }

+ 3 - 5
Admin.NET/Admin.NET.Core/Service/Wechat/SysWxOpenService.cs

@@ -16,6 +16,7 @@ public class SysWxOpenService : IDynamicApiController, ITransient
     private readonly SysConfigService _sysConfigService;
     private readonly WechatApiClient _wechatApiClient;
     private readonly SysFileService _sysFileService;
+    private readonly WechatApiClientFactory _wechatApiClientFactory;
 
     public SysWxOpenService(SqlSugarRepository<SysWechatUser> sysWechatUserRep,
         SysConfigService sysConfigService,
@@ -26,6 +27,7 @@ public class SysWxOpenService : IDynamicApiController, ITransient
         _sysConfigService = sysConfigService;
         _wechatApiClient = wechatApiClientFactory.CreateWxOpenClient();
         _sysFileService = sysFileService;
+        _wechatApiClientFactory = wechatApiClientFactory;
     }
 
     /// <summary>
@@ -402,10 +404,6 @@ public class SysWxOpenService : IDynamicApiController, ITransient
     /// </summary>
     private async Task<string> GetCgibinToken()
     {
-        var reqCgibinToken = new CgibinTokenRequest();
-        var resCgibinToken = await _wechatApiClient.ExecuteCgibinTokenAsync(reqCgibinToken);
-        if (resCgibinToken.ErrorCode != (int)WechatReturnCodeEnum.请求成功)
-            throw Oops.Oh(resCgibinToken.ErrorMessage + " " + resCgibinToken.ErrorCode);
-        return resCgibinToken.AccessToken;
+        return await _wechatApiClientFactory.TryGetWxOpenAccessTokenAsync();
     }
 }

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/Wechat/WechatApiHttpClient.cs

@@ -132,7 +132,7 @@ public partial class WechatApiClientFactory : ISingleton
 
 		var req = new CgibinOpenApiQuotaGetRequest
 		{
-			AccessToken = await TryGetWxOpenAccessTokenAsync(),
+			AccessToken = await TryGetWechatAccessTokenAsync(),
 			CgiPath = "/cgi-bin/token"
 		};
 		var client = CreateWechatClient();