.Net调用钉钉接口,实现发送企业消息功能
我在钉钉官网上看了下,关于调用钉钉接口,发送企业消息通知,他给的核心代码总共几行。
用到的一个接口引用
TopSDK.dll 下载网址https://open-doc.dingtalk.com/doc/sdk.htm?spm=a219a.7629140.0.0.mItbfA&treeId=177&articleId=104963&docType=1 选择 .Net版本TOP接入SDK
IDingTalkClient client = new DefaultDingTalkClient("https://eco.taobao.com/router/rest");
CorpMessageCorpconversationAsyncsendRequest req = new CorpMessageCorpconversationAsyncsendRequest();
req.Msgtype = "oa";//发送消息是以oa的形式发送的,其他的还有text,image等形式
req.AgentId = ;//微应用ID
req.UseridList = "manager7626";//收信息的userId,这个是by公司来区分,在该公司内这是一个唯一标识符
req.DeptIdList = "123,456";//部门ID
req.ToAllUser = false;//是否发给所有人
//消息文本
req.Msgcontent = "{\"message_url\": \"http://dingtalk.com\",\"head\": {\"bgcolor\": \"FFBBBBBB\",\"text\": \"头部标题\"},\"body\": {\"title\": \"测试文本\",\"form\": [{\"key\": \"姓名:\",\"value\": \"张三\"},{\"key\": \"爱好:\",\"value\": \"打球、听音乐\"}],\"rich\": {\"num\": \"15.6\",\"unit\": \"元\"},\"content\": \"大段文本大段文本大段文本大段文本大段文本大段文本大段文本大段文本大段文本大段文本大段文本大段文本\",\"image\": \"@lADOADmaWMzazQKA\",\"file_count\": \"3\",\"author\": \"李四 \"}}";
CorpMessageCorpconversationAsyncsendResponse rsp = client.Execute(req, "402107cac8ff329d91baa5b2b7797068");//发送消息
这是钉钉官网上给的Demo。我把代码改copy下来以后,改成我的userid和我的access_token以后,提交的代码。执行以后,我的钉钉收到以下提示:

好了,效果达到了,接下详细说说我的代码过程。
1.创建测试企业
在钉钉上面创建一个测试企业。这是用来测试的。
2.创建微应用
在钉钉左边点击那四个正方形堆在一起的按钮==》进入应用中心==》管理应用==》进入管理后台==》工作台==》创建一个应用==》拿到AgentId.
这个值很重要,企业通知消息就是通过这个微信用发送出去的。


2.获得access_token
1>获得CorpId和CorpSecret

2>获得access_token
全部上代码了
专门用一个类来封装。
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApplication6
{
public class Class1
{ //https://oapi.dingtalk.com/gettoken?corpid=ding892914b21488a37b35c2f4657eb6378f&corpsecret=XVP6U8FCqj-9trQ8zDDCgZILXGH6Q4FXu40h4_-_MztCWy4w0KVPaP3ZIoLDuSRJ /// <summary>
/// CorpId
/// </summary>
private static string CorpId = "CorpId:ding892914b21488a37b35c2f4657eb6378f ";
/// <summary>
/// CorpSecret
/// </summary>
private static string CorpSecret = "XVP6U8FCqj-9trQ8zDDCgZILXGH6Q4FXu40h4_-_MztCWy4w0KVPaP3ZIoLDuSRJ"; private static int AgentID = ; private static DateTime GetTime { get; set; } //public DingTalkApiService()
//{
// if (string.IsNullOrEmpty(Access_Token))
// {
// GetAccessToken();//重新发送get请求获得获得access_token值
// }
//}
public Class1()
{
if (string.IsNullOrEmpty(Access_Token))
{
Access_Token = GetAccessToken();
}
} private static string Access_Token { get; set; } public string GetAccessToken()
{
//根据CorpId和CorpSecret发送get请求获得access_token
string url = "https://oapi.dingtalk.com/gettoken?corpid=" + CorpId + "&corpsecret=" + CorpSecret;
//创建请求
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); //GET请求
request.Method = "GET";
request.ReadWriteTimeout = ;
Encoding encode = Encoding.UTF8;
//request.ContentType = "text/html;charset=UTF-8";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, encode); //返回内容
string retString = myStreamReader.ReadToEnd(); JsonSerializer serializer = new JsonSerializer();
StringReader sr = new StringReader(retString);
object o = serializer.Deserialize(new JsonTextReader(sr), typeof(AccessToken));
AccessToken t = o as AccessToken; string m = t.Access_Token;
//AccessToken entity=JsonHelper
//string s= myStreamReader.ReadLineAsync();
string accessToken = retString.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)[].Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries)[].Replace("\"", "");
//string[] t = retString.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
//string s = t[1];
//string a = s.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries)[1];
return accessToken;
} //根据传进来的人获得钉钉的userid public string GetDepartment(string depName)
{
string url = "https://oapi.dingtalk.com/department/list?access_token=" + Access_Token; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
//GET请求
request.Method = "GET";
request.ReadWriteTimeout = ;
Encoding encode = Encoding.UTF8;
//request.ContentType = "text/html;charset=UTF-8";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, encode); //返回内容
string retString = myStreamReader.ReadToEnd();
//{"errcode":0,"department":[{"createDeptGroup":true,"name":"公司Test","id":1,"autoAddUser":true},{"createDeptGroup":false,"name":"运营部","id":61877829,"autoAddUser":false,"parentid":1},{"createDeptGroup":false,"name":"推广部","id":61933824,"autoAddUser":false,"parentid":1},{"createDeptGroup":false,"name":"生产部","id":61939784,"autoAddUser":false,"parentid":1},{"createDeptGroup":false,"name":"产品部","id":61943823,"autoAddUser":false,"parentid":1},{"createDeptGroup":false,"name":"物流部","id":61985767,"autoAddUser":false,"parentid":1},{"createDeptGroup":false,"name":"设计部","id":62021758,"autoAddUser":false,"parentid":1}],"errmsg":"ok"}
//var department = new { name = string.Empty, id = 0, autoAddUser = false, parentid =1};
//var tempEntity = new { errcode = string.Empty, List<department>=null, errmsg=string.Empty };
DepartmentJson dep = new DepartmentJson();
JsonSerializer serializer = new JsonSerializer();
StringReader sr = new StringReader(retString);
//tempEntity = JsonConvert.DeserializeAnonymousType(retString, tempEntity);
object o = serializer.Deserialize(new JsonTextReader(sr), typeof(DepartmentJson));
DepartmentJson t = o as DepartmentJson; List<department> s = t.department; string m = s.Where(p => p.Name == "运营部").Select(w => w.Name).ToList().ToString();
var id = s.Where(p => p.Name == "运营部").Select(x => x.id).ToList()[]; url = "https://oapi.dingtalk.com/user/simplelist?access_token=" + Access_Token + "&department_id=" + id; HttpWebRequest requestNew = (HttpWebRequest)WebRequest.Create(url);
//GET请求
requestNew.Method = "GET";
requestNew.ReadWriteTimeout = ;
//Encoding encode = Encoding.UTF8;
//request.ContentType = "text/html;charset=UTF-8";
HttpWebResponse responseNew = (HttpWebResponse)requestNew.GetResponse();
Stream myResponseStreamNew = responseNew.GetResponseStream();
StreamReader myStreamReaderNew = new StreamReader(myResponseStreamNew, encode); //返回内容
string retStringNew = myStreamReaderNew.ReadToEnd(); //{"errcode":0,"errmsg":"ok","userlist":[{"name":"张三","userid":"33333333333333333333333333"},{"name":"李四","userid":"3333333333333333"},{"name":"王五","userid":"333333333333"},{"name":"赵六","userid":"4444444444444"}]}
UserJson user = new UserJson();
//JsonSerializer serializer = new JsonSerializer();
StringReader srNew = new StringReader(retStringNew);
//tempEntity = JsonConvert.DeserializeAnonymousType(retString, tempEntity);
object oNew = serializer.Deserialize(new JsonTextReader(srNew), typeof(UserJson));
UserJson v = oNew as UserJson; List<Users> z = v.userlist; var q = z.Where(p => p.Name == "李七").Select(i => i.UserId).ToList()[];
decimal b = Convert.ToDecimal(q);
return b + "ddddd";
} }
}
里面用到的一些类都是根据返回结果封装的一些类,用于json的反序列化时存值。
这是自己写的一个小测试Demo.
一切为了测试,所以很多一些编程习惯和命名习惯都没有遵守。权当大家作一个参考!
.Net调用钉钉接口,实现发送企业消息功能的更多相关文章
- java代码实现调用短信接口,发送短信验证。
一.代码示例 package com.aaa.zxf.login; import org.apache.commons.httpclient.HttpClient; import org.apache ...
- Axis 调用.net WebServic接口出现:验证消息的安全性时错误发生
解决方法:call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP12_CONSTANTS); 參考:http://www.blogjav ...
- Go之发送钉钉和邮箱
smtp发送邮件 群发两个邮箱,一个163,一个QQ package main import ( "fmt" "net/smtp" "strings& ...
- Azure DevOps (二) 实现Git仓库和钉钉的联动
上一篇文章中我们提到了azure为我们提供了可自定的web hook,于是我打算实践一下 我假设了一种场景就是,我希望我可以及时收到团队中所有开发人员的代码提交记录,于是乎我想通过web hook打通 ...
- Python钉钉报警及Zabbix集成钉钉报警
钉钉报警设置 创建群机器人 11111 接口地址 发送短消息 发送普通消息 import requests import json url = 'https://oapi.dingtalk.com/r ...
- zabbix设置钉钉报警
1 添加机器人 在钉钉群里面添加一个机器人 会获取到一个URL: 'https://oapi.dingtalk.com/robot/send?access_token=62be1ea97b4653b8 ...
- udp发送广播消息
import socket if __name__ == '__main__': # 创建udpsocket udp_socket = socket.socket(socket.AF_INET, so ...
- 使用python对mysql主从进行监控,并调用钉钉发送报警信息
1.编写python的监控脚本 A.通过获取mysql库中的状态值来判断这个mysql主从状态是否正常 B.进行两个状态值的判断 C.进行调取钉钉机器人,发送消息 2.设置定时任务进行脚本运行 cro ...
- zabbix3.4调用钉钉报警通知(超详细)
一.备注: zabbix调用钉钉接口报警通知有两种情况: 1.通知到个人钉 2.通知到钉钉群 本文主要介绍zabbix调用钉钉接口通知到钉钉个人的方式 二.zabbix3.4调用钉钉接口报警通知到个 ...
随机推荐
- 在ASP.Net Core下,Autofac实现自动注入
之前使用以来注入的时候,都是在xml配置对应的接口和实现类,经常会出现忘了写配置,导致注入不生效,会报错,而且项目中使用的是SPA的模式,ajax报错也不容易看出问题,经常会去排查日志找问题. 于是在 ...
- hdu1556 Color the ball 线段树区间染色问题
都是老套路了,如果n=5,要把区间[1,4]染色,可以递归去染区间[1,3]和区间[4,4],如果区间相等就自加,不相等继续递归寻找对应区间. 打印结果时,把所有到达叶节点包含i的区间值相加,就是最后 ...
- javascript中快速求数组的全部元素的相加之和
js中快速求数组的全部元素的相加之和: var arr = [1,2,3,4,5];var sum = eval(arr.join('+')); console.log(sum); 运行结果: 15
- init启动进程
init启动进程需要读取()配置文件 1,启动init进程的配置文件是/etc/inittab 2,/etc/sysvinit是系统初始化用的 /sbin/init在核心完整的加载后,开始运行系统 ...
- 简单的GIT上传
简单的GIT上传 上传项目时先新建一个 文件夹 mkdir test 然后在切换到test文件夹中然后把github 中的项目拷贝下来 git glone url 然后git init 查看文件 然后 ...
- 转:20分钟教你使用hexo搭建github博客
注册Github账号 这里我们就不多讲了,小伙伴们可以点击这里,进入官网进行注册. 创建仓库 图片来自Github 登录账号后,在Github页面的右上方选择New repository进行仓库的创建 ...
- Win10电脑经常自动掉线、自动断网的解决方法
近期一客户称自己使用电脑上网的时候,过一段时间莫名其妙的出现自动掉线.自动断网的情况,那么遇到这个问题该怎么办?下面装机之家分享一下Win10电脑经常自动掉线.自动断网的解决方法,以Win7系统为例. ...
- linux 云计算Openstack搭建
Openstack 由NASA和Reckspace合作研发并发起的项目,以Apache许可证为授权 云计算三大支柱模型 IaaS:基础架构即服务 提供服务器/虚拟主机/网络等设备资源 PaaS:平台即 ...
- java 集合框架(一)概述
一.概述 Java Collection Framework (JCF) 提供给我们一系列的类和接口,方便开发者处理集合对象. 在Java 2之前,Java是没有完整的集合框架的.它只有一些简单的可以 ...
- HighGUI图形图像界面初步——滑动条的创建和使用
---恢复内容开始--- 滑动条是OpenCV动态调节参数特别好用的一种工具,它依附于窗口而存在.由于OpenCV没有实现按钮功能,所以很多时候,我们可以用仅含0-1的滑动条来实现按钮的按下于弹起效果 ...