Sfoglia il codice sorgente

bug:钉钉获取企业内部应用的access_token的参数必须是小写的appkey和appsecret

hans_wen 2 anni fa
parent
commit
4536a3b94e

+ 9 - 14
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/Job/SyncDingTalkUserJob.cs

@@ -38,12 +38,7 @@ public class SyncDingTalkUserJob : IJob
         var _dingTalkUserRepo = serviceScope.ServiceProvider.GetRequiredService<SqlSugarRepository<DingTalkUser>>();
         var _dingTalkOptions = serviceScope.ServiceProvider.GetRequiredService<IOptions<DingTalkOptions>>();
         // 获取token
-        var param = new GetDingTalkTokenInput()
-        {
-            AppKey = _dingTalkOptions.Value.ClientId,
-            AppSecret = _dingTalkOptions.Value.ClientSecret
-        };
-        var tokenRes = await _dingTalkApi.GetDingTalkToken(param);
+        var tokenRes = await _dingTalkApi.GetDingTalkToken(_dingTalkOptions.Value.ClientId, _dingTalkOptions.Value.ClientSecret);
         if (tokenRes.ErrCode != 0)
         {
             throw Oops.Oh(tokenRes.ErrMsg);
@@ -99,19 +94,19 @@ public class SyncDingTalkUserJob : IJob
         var iDingTalkUser = dingTalkUserList.Where(u => !sysDingTalkUserIdList.Any(d => d.DingTalkUserId == u.UserId));
         #region 新增钉钉用户
         var iUser = iDingTalkUser
-            .Select(res => new SysDingTalkUser
+            .Select(res => new DingTalkUser
             {
                 DingTalkUserId = res.UserId,
                 Name = res.FieldDataList
-                .Where(f => f.FieldCode == DingTalkFieldConst.NameField)
+                .Where(f => f.FieldCode == DingTalkConst.NameField)
                 .Select(f => f.FieldValueList.Select(v => v.Value).FirstOrDefault())
                 .FirstOrDefault(),
                 Mobile = res.FieldDataList
-                .Where(f => f.FieldCode == DingTalkFieldConst.MobileField)
+                .Where(f => f.FieldCode == DingTalkConst.MobileField)
                    .Select(f => f.FieldValueList.Select(v => v.Value).FirstOrDefault())
                 .FirstOrDefault(),
                 JobNumber = res.FieldDataList
-                .Where(f => f.FieldCode == DingTalkFieldConst.JobNumberField)
+                .Where(f => f.FieldCode == DingTalkConst.JobNumberField)
                   .Select(f => f.FieldValueList.Select(v => v.Value).FirstOrDefault())
                 .FirstOrDefault(),
             }).ToList();
@@ -127,20 +122,20 @@ public class SyncDingTalkUserJob : IJob
 
         #region 更新钉钉用户
         var uUser = uDingTalkUser
-        .Select(res => new SysDingTalkUser
+        .Select(res => new DingTalkUser
         {
             Id = sysDingTalkUserIdList.Where(d => d.DingTalkUserId == res.UserId).Select(d => d.Id).FirstOrDefault(),
             DingTalkUserId = res.UserId,
             Name = res.FieldDataList
-                .Where(f => f.FieldCode == DingTalkFieldConst.NameField)
+                .Where(f => f.FieldCode == DingTalkConst.NameField)
                 .Select(f => f.FieldValueList.Select(v => v.Value).FirstOrDefault())
                 .FirstOrDefault(),
             Mobile = res.FieldDataList
-                .Where(f => f.FieldCode == DingTalkFieldConst.MobileField)
+                .Where(f => f.FieldCode == DingTalkConst.MobileField)
                    .Select(f => f.FieldValueList.Select(v => v.Value).FirstOrDefault())
                 .FirstOrDefault(),
             JobNumber = res.FieldDataList
-                .Where(f => f.FieldCode == DingTalkFieldConst.JobNumberField)
+                .Where(f => f.FieldCode == DingTalkConst.JobNumberField)
                   .Select(f => f.FieldValueList.Select(v => v.Value).FirstOrDefault())
                 .FirstOrDefault(),
         }).ToList();

+ 0 - 12
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/Service/Dto/GetDingTalkToken.cs

@@ -8,18 +8,6 @@
 
 namespace Admin.NET.Plugin.DingTalk;
 
-public class GetDingTalkTokenInput
-{
-    /// <summary>
-    /// 应用的唯一标识key
-    /// </summary>
-    public string AppKey { get; set; }
-
-    /// <summary>
-    /// 应用的密钥。AppKey和AppSecret可在钉钉开发者后台的应用详情页面获取。
-    /// </summary>
-    public string AppSecret { get; set; }
-}
 
 public class GetDingTalkTokenOutput
 {

+ 3 - 3
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/Service/IDingTalkApi.cs

@@ -6,8 +6,6 @@
 //
 // 任何基于本项目二次开发而产生的一切法律纠纷和责任,均与作者无关
 
-using Furion.RemoteRequest;
-
 namespace Admin.NET.Plugin.DingTalk;
 
 public interface IDingTalkApi : IHttpDispatchProxy
@@ -15,9 +13,11 @@ public interface IDingTalkApi : IHttpDispatchProxy
     /// <summary>
     /// 获取企业内部应用的access_token
     /// </summary>
+    /// <param name="appkey">应用的唯一标识key</param>
+    /// <param name="appsecret"> 应用的密钥。AppKey和AppSecret可在钉钉开发者后台的应用详情页面获取。</param>
     /// <returns></returns>
     [Get("https://oapi.dingtalk.com/gettoken")]
-    Task<GetDingTalkTokenOutput> GetDingTalkToken([QueryString] GetDingTalkTokenInput input);
+    Task<GetDingTalkTokenOutput> GetDingTalkToken([QueryString] string appkey, [QueryString] string appsecret);
 
     /// <summary>
     /// 获取在职员工列表