C#-钉钉事件订阅-接口回调

简介: C#-钉钉事件订阅-接口回调

最做一个项目要应用到钉钉的事件订阅这个功能,然后根据它文档中的操作来进行配置,期间也出来很多问题。

下面给大家展示一下该怎么正确的进行一个事件订阅。

钉钉官方的配置事件订阅的过程

首先我们要先建立一个web api的程序

具体建立这个web api应用的操作可以在网上搜有很多。

建立成功以后

是这个样子的,咱们是要在这个方法下进行操作的,这么做是为了简单,你也可以自己去写一个方法,比如这个样子



这个就是我这边写的钉钉订阅事件回调的接口方法,参数有3个是通过 这是钉钉调用咱们要传过来的,因为传过来的数据解密后对应的是你具体触发的事件,这是我具体的回调接口中的代码,可以分为三部分来看,第一部分是解密传进来的json串,第二部分是根据第一部分传解密后的值判断事件类型也就是你具体的业务了,第三部分是要给钉钉返回一个加密json串。


首先这个回调方法中涉及到的加解密类:

https://github.com/open-dingtalk/dingtalk-callback-Crypto?spm=ding_open_doc.document.0.0.1c9f70088ZsInrd

https://github.com/open-dingtalk/dingtalk-callback-Crypto?spm=ding_open_doc.document.0.0.1c9f70088ZsInr

[HttpPost]
        public DingDingBack dingding(string signature, string timestamp, string nonce)
        {
            //第一部分
            //这两句代码是为了接收body体中传入的加密json串
            Request.Content.ReadAsStreamAsync().Result.Seek(0, System.IO.SeekOrigin.Begin);
            string content = Request.Content.ReadAsStringAsync().Result;
            //反序列化json串拿去加密字符串
            JToken json = JToken.Parse(content);
            string ever = json["encrypt"].ToString();
            //实例化钉钉解密类构造参数为对应的 应用中的token、aes_key、AppKey值
            DingTalkEncryptor dingTalkEncryptor = new DingTalkEncryptor("token", "aes_key", "appkey");
            //定义字符串接收解密后的值
            string text = dingTalkEncryptor.getDecryptMsg(signature, timestamp, nonce, ever);
            JToken jToken = JToken.Parse(text);
            //取出事件类型字段
            string EventType = jToken["EventType"].ToString();
            第二部分
            //  { //判断事件类型是否是日程事件
            if ("calendar_event_change" == EventType)
            {
            }
            //第三部分
            //返回加密字符串          
            var msg = dingTalkEncryptor.getEncryptedMap("success");
            DingDingBack back = new DingDingBack();
            back.msg_signature = msg["msg_signature"];
            back.encrypt = msg["encrypt"];
            back.timeStamp = msg["timeStamp"];
            back.nonce = msg["nonce"];
            return back;
        }

因为钉钉是要请求咱们这边的接口,还有传值进来,我们要做的是根据它传入的值进行一个解密,然后再返回一个加密的字符串,



最后碰到的问题汇总:关于超时类型的问题,可能是你的这个接口调用时间太长,超时以后钉钉这边就认为调用失败。


还有返回200的码表示正常,这种问题就是你接口的返回值不是json格式的,你直接返回实体到就可以解决这个问题。


还有最重要的就是你的接口一定要是公网可访问的。


相关文章
|
19天前
|
C#
c# Gridview 点击checkbox 触发的事件
c# Gridview 点击checkbox 触发的事件
|
1月前
|
IDE C# 开发工具
C#系列之接口介绍
C#系列之接口介绍
|
2月前
|
JSON 数据格式 开发者
钉钉事件订阅的订阅规则可以在钉钉开放平台进行设置
【2月更文挑战第7天】钉钉事件订阅的订阅规则可以在钉钉开放平台进行设置
48 1
|
3月前
|
达摩院 Linux API
阿里达摩院MindOpt求解器V1.1新增C#接口
阿里达摩院MindOpt求解器发布最新版本V1.1,增加了C#相关API和文档。优化求解器产品是求解优化问题的专业计算软件,可广泛各个行业。阿里达摩院从2019年投入自研MindOpt优化求解器,截止目前经历27个版本的迭代,取得了多项国内和国际第一的成绩。就在上个月,2023年12月,在工信部产业发展促进中心等单位主办的首届能源电子产业创新大赛上,MindOpt获得电力用国产求解器第一名。本文将为C#开发者讲述如何下载安装MindOpt和C#案例源代码。
140 3
阿里达摩院MindOpt求解器V1.1新增C#接口
|
3月前
|
编译器 C# 开发者
C# 11.0中的新特性:覆盖默认接口方法
C# 11.0进一步增强了接口的灵活性,引入了覆盖默认接口方法的能力。这一新特性允许类在实现接口时,不仅可以提供接口中未实现的方法的具体实现,还可以覆盖接口中定义的默认方法实现。本文将详细介绍C# 11.0中接口默认方法覆盖的工作原理、使用场景及其对现有代码的影响,帮助开发者更好地理解和应用这一新功能。
|
3月前
|
运维 监控 安全
调用钉钉机器人API接口将堡垒机安全运维告警单发给运维人员
调用钉钉机器人API接口将堡垒机安全运维告警单发给运维人员
85 0
|
19天前
|
C#
C# Dev解决gridview1_SelectionChanged和gridview1_RowCellClick事件触发两次等问题
C# Dev解决gridview1_SelectionChanged和gridview1_RowCellClick事件触发两次等问题
C# Dev解决gridview1_SelectionChanged和gridview1_RowCellClick事件触发两次等问题
|
2月前
|
JSON 数据安全/隐私保护 数据格式
钉钉事件订阅的地址需要在钉钉开放平台进行配置
【2月更文挑战第7天】钉钉事件订阅的地址需要在钉钉开放平台进行配置
36 6
|
3月前
|
运维 监控 安全
【优化篇】调用钉钉机器人API接口将堡垒机安全运维告警单发给运维人员
【优化篇】调用钉钉机器人API接口将堡垒机安全运维告警单发给运维人员
71 0
|
3月前
|
C# 开发者 索引
C# 11.0中的所需成员:强化接口与抽象类的约束
【1月更文挑战第24天】C# 11.0引入了所需成员(Required members)的概念,这一新特性允许在接口和抽象类中定义必须被实现的成员,包括方法、属性、索引器和事件。通过所需成员,C# 强化了对接口实现和抽象类继承的约束,提高了代码的一致性和可维护性。本文将详细探讨C# 11.0中所需成员的工作原理、使用场景及其对现有编程模式的影响。