峰峦@叠嶂 2024-05-04 21:27 采纳率: 99.5%
浏览 5
已结题

调用钉钉通讯录的用户信息,请看一下;

我希望利用C#,能从钉钉通讯录调用到用户信息,代码如下,但是运行时提示“未找到用户列表”,请给看看哪里有问题,多谢了;

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using DingTalk.Api;
using DingTalk.Api.Request;
using Newtonsoft.Json.Linq;
using DingTalk.Api.Response;
using PlatBaseClass;
using Newtonsoft.Json;

namespace SalaryCount
{
    public partial class Form1 : BaseForm
    {
        private string appKey = "dingqnybw1hbp4lqyeety;
        private string appSecret = "7fbCQHDPbQZ";
        private IDingTalkClient client;
        public Form1()
        {
            InitializeComponent();
            client = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/simplelist");
            LoadData();
        }

        private void LoadData()
        {
            try
            {
                OapiUserSimplelistRequest request = new OapiUserSimplelistRequest();
                request.DepartmentId = 1L; // 部门ID,根部门ID为1
                OapiUserSimplelistResponse response = client.Execute(request, appKey, appSecret);

                JObject responseObject = JObject.Parse(response.Body);
                JArray userList = (JArray)responseObject["userlist"];

                if (userList != null)
                {
                    DataTable dt = new DataTable();
                    dt.Columns.Add("姓名");
                    dt.Columns.Add("部门");
                    dt.Columns.Add("手机号");

                    foreach (JObject user in userList)
                    {
                        dt.Rows.Add(user["name"], user["department"], user["mobile"]);
                    }

                    dataGridView1.DataSource = dt;
                }
                else
                {
                    MessageBox.Show("未找到用户列表。");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: " + ex.Message);
            }
        }
        private void Form1_Load(object sender, EventArgs e)
        {

        }
    }
}



  • 写回答

5条回答 默认 最新

  • GISer Liu 2024-05-05 00:59
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    首先,您在代码中有一个明显的错误,您在定义 appKey 变量时未正确闭合引号,这可能导致 API
    调用时无法通过认证,进而出现未找到用户列表的错误提示。
    csharp
    Copy code

    private string appKey = "dingqnybw1hbp4lqyeety; // 错误:缺少引号闭合
    private string appSecret = "7fbCQHDPbQZ";
    

    将其修正为:
    csharp
    Copy code

    private string appKey = "dingqnybw1hbp4lqyeety"; // 正确:引号闭合
    private string appSecret = "7fbCQHDPbQZ";
    

    此外,您在获取用户列表的代码中也存在一些问题。钉钉 API 返回的数据中并没有 departmentmobile
    字段,而是分别在不同的层级中。下面是相应的修改:
    csharp
    Copy code

    foreach (JObject user in userList)
    {
    // 获取用户姓名
    string name = user["name"].ToString();
    // 获取用户所属部门
    JArray departments = (JArray)user["department"];
    string departmentNames = string.Join(",", departments.Select(d => d.ToString()));
    // 获取用户手机号
    string mobile = user["mobile"].ToString();
    // 将用户信息添加到 DataTable 中
    dt.Rows.Add(name, departmentNames, mobile);
    }
    

    这样修改后,您应该能够正确获取到用户列表并显示在 DataGridView 中了。
    除此之外,确保您的应用已经具有访问通讯录的权限,并且 DepartmentId 参数指定的部门确实存在且您具有权限访问。

    如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 5月13日
  • 已采纳回答 5月5日
  • 创建了问题 5月4日

悬赏问题

  • ¥15 12864只亮屏 不显示汉字
  • ¥20 三极管1000倍放大电路
  • ¥15 vscode报错如何解决
  • ¥15 前端vue CryptoJS Aes CBC加密后端java解密
  • ¥15 python随机森林对两个excel表格读取,shap报错
  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
  • ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值
  • ¥15 VFP如何使用阿里TTS实现文字转语音?
  • ¥100 需要跳转番茄畅听app的adb命令