在钉钉应用云开发实战营第3课的学习中,老师主要讲述了如何线上调用钉钉API,实现创建用户。那么如何将该内容应用到我们自己开发的项目中呢?下面以一个.NET示例来演示一下。核心内容是API调用和读取JSON。线上如何调用API创建用户,可以参考这篇文章钉钉应用云开发实战营第3课-新建一个企业,创建一个应用,并用这个应用的App Key和AppSecret调用创建用户接口,新建一个用户
目录
本地项目中实现API创建用户
获取Access_token
获取部门列表
创建用户
本地项目中实现API创建用户
获取Access_token
在钉钉APIExplorer中,我们只要输入AppKey和AppSecret,发起调用就可以得到access_token。而在本地化项目中,需要将发起调用以代码的形式呈现,这里以.NET代码为例。
```.net
///
/// 获取Access_token
///
private string getAccess_token(string Appkey, string Appsecret)
{
string access_token = "";
IDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
OapiGettokenRequest req = new OapiGettokenRequest();
req.Appkey = Appkey;
req.Appsecret = Appsecret;
req.SetHttpMethod("GET");
OapiGettokenResponse rsp = client.Execute(req, access_token);
string json = rsp.Body;
Access_token rt = JsonConvert.DeserializeObject
return rt.access_token;
}
```
调用钉钉API使用到了钉钉提供的TopSdk.dll动态库文件,在项目中引用该动态库文件,同时在添加如下命名空间。
```.net
using DingTalk.Api;
using DingTalk.Api.Request;
using DingTalk.Api.Response;
```
由于api调用返回的信息是json字符串,这里需要对json字符串进行解析。自定义access_token类,引用Newtonsoft.Json.dll文件,添加命名空间。
```.net
using Newtonsoft.Json;
```
自定义access_token类主要代码
···.net
public class Access_token
{
///
/// 错误码
///
public int errcode { get; set; }
///
/// Access_token
///
public string access_token { get; set; }
///
/// 错误信息
///
public string errmsg { get; set; }
///
/// 实效时间
///
public int expires_in { get; set; }
}
```
获取部门列表
由于在钉钉用户管理2.0中dept_id_list为必填项,这里需要获取到部门列表,用于给新创建的用户分配部门。
```.net
///
/// 获取部门列表
///
/// 应用Appkey
/// 应用Appsecret
private void getDeptList(string Appkey, string Appsecret)
{
string access_token = getAccess_token(Appkey, Appsecret);
IDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/listsub");
OapiV2DepartmentListsubRequest req = new OapiV2DepartmentListsubRequest();
OapiV2DepartmentListsubResponse rsp = client.Execute(req, access_token);
//Console.WriteLine(rsp.Body);
string json = rsp.Body;
DeptList rt = JsonConvert.DeserializeObject
int ct = rt.result.Count;
if (ct > 0)
{
ArrayList lists = new ArrayList();
for (int i = 0; i < ct; i++)
{
lists.Add(new SetCls(rt.result[i].dept_id.ToString(), rt.result[i].name));
}
this.combo_dept.DisplayMember = "pName";
this.combo_dept.ValueMember = "pid";
this.combo_dept.DataSource = lists;
this.combo_dept.Text = "请选择";
}
}
```
这里对获取到的部门列表,进行了json字符串解析,将获取到的部门信息,以数组的方式,添加到combo_dept下拉列表中。
自定义部门信息列表类主要代码。
```.net
public class ResultItem
{
///
/// 是否允许添加用户
///
public bool auto_add_user { get; set; }
///
/// 上级部门id
///
public int parent_id { get; set; }
///
/// 部门名称
///
public string name { get; set; }
///
/// 部门id
///
public int dept_id { get; set; }
///
/// 是否创建部门组
///
public bool create_dept_group { get; set; }
}
public class DeptList
{
///
/// 错误代码
///
public int errcode { get; set; }
///
/// 列表信息
///
public List
///
/// 错误信息
///
public string errmsg { get; set; }
///
/// 请求id
///
public string request_id { get; set; }
}
```
自定义SetCls类主要代码。
```.net
class SetCls
{
private string ID;
private string NAME;
public SetCls(string pid, string pName)
{
this.ID = pid;
this.NAME = pName;
}
public string pID
{
get { return ID; }
}
public string pName
{
get { return NAME; }
}
}
```
在创建用户之前,需要点击获取部门列表按钮,对combo_dept下拉列表初始化。
```.net
//按钮执行获取部门列表,初始化combo_dept下拉列表
private void btnGetDeptList_Click(object sender, EventArgs e)
{
string Appkey = tb_AppKey.Text;
string Appsecret = tb_AppSecret.Text;
if (string.IsNullOrEmpty(Appkey) || string.IsNullOrEmpty(Appsecret))
{
MessageBox.Show("请输入Appkey,Appsecret");
return;
}
getDeptList(Appkey, Appsecret);
}
```
创建用户
获取到了部门列表后,就可以输入用户信息,进行用户创建了。对用户输入的信息进行验证,如果验证通过,则创建用户。若创建成功,返回成功信息,若失败,返回错误代码和错误信息。
```.net
//创建用户
private void btnCreateUser_Click(object sender, EventArgs e)
{
string Appkey = tb_AppKey.Text;
string Appsecret = tb_AppSecret.Text;
if (string.IsNullOrEmpty(Appkey) || string.IsNullOrEmpty(Appsecret))
{
MessageBox.Show("请输入Appkey,Appsecret");
return;
}
string userid = tb_userid.Text.Trim();
string name = tb_name.Text.Trim();
string mobile = tb_mobile.Text.Trim();
string dept_id_list = combo_dept.SelectedValue.ToString();
if (string.IsNullOrEmpty(userid) || string.IsNullOrEmpty(name) ||
string.IsNullOrEmpty(mobile))
{
MessageBox.Show("带*号内容为必填项");
return;
}
if (string.IsNullOrEmpty(dept_id_list))
{
MessageBox.Show("请获取部门列表");
return;
}
if (dept_id_list == "请选择")
{
MessageBox.Show("请选择部门");
return;
}
string access_token = getAccess_token(Appkey, Appsecret);
IDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/create");
OapiV2UserCreateRequest req = new OapiV2UserCreateRequest();
req.Userid = userid;
req.Name = name;
req.Mobile = mobile;
req.DeptIdList = dept_id_list;
OapiV2UserCreateResponse rsp = client.Execute(req, access_token);
string json =rsp.Body;
CreateUser rt = JsonConvert.DeserializeObject
if (rt.errcode == 0)
{
MessageBox.Show("成功创建用户");
}
else
{
MessageBox.Show(String.Format("未成功创建用户,返回信息:错误代码{0},错误信息{1},部门信息{2}",
rt.errcode,rt.errmsg,dept_id_list));
}
}
```
窗体截图
同时在钉钉后台也可以看到新创建的用户信息
原创文章,禁止转载,如有疑问,欢迎留言。
CSDN同文章作者链接: https://blog.csdn.net/li375619419/article/details/116202553