钉钉事件回调c#测试完成

原文:钉钉事件回调c#测试完成

做钉钉事件回调,来监测单据审批状况,钉钉给的真是一个垃圾demo,打开就报错,提交工单上去,给的也是没用的回复

折腾了好久,我终于做好了。

先说下操作流程:

网站向钉钉发出注册信息(包含相关数据,及回调的Url地址)

钉钉服务器会访问该地址,并传递相关数据,

本地网站解密数据,并返回加密的“success”

注册成功,之后可以一直接收到相关的事件信息

先注册:

protected void Button1_Click(object sender, EventArgs e)
    {
        Token _t = new Token();

        string _token = _t.GetTokens();      //获取Token

        DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/call_back/register_call_back");
        OapiCallBackRegisterCallBackRequest request = new OapiCallBackRegisterCallBackRequest();

        request.Url = "http://www.xxx.com/receive.ashx";      //回调Url

        request.AesKey = "45skhqweass5232345IUJKWEDL5251054DSFdsuhfW2";    //随机43位字符串

        request.Token = "";                      //随机填写

        List<string> _arr = new List<string>();

        _arr.Add("bpms_task_change");              //填写要监控的信息,具体填写方法看这里 https://open-doc.dingtalk.com/microapp/serverapi2/skn8ld

        _arr.Add("bpms_instance_change");

        request.CallBackTag =_arr;

        OapiCallBackRegisterCallBackResponse response = client.Execute(request, _token);

        string _str = response.Body;

        Response.Write(_str);
    }

        [HttpPost]
        public JsonResult Receive(string signature, string timestamp, string nonce, PostBody body)
        {
            //接收encrypt参数
            string encryptStr = body.encrypt.Replace("{\"encrypt\":\"", "").Replace("\"}","");
            //注册时填写的token、aes_key、suitekey
            string token = ConfigurationManager.AppSettings["SuiteToken"];
            //token = "123456";//钉钉测试文档中的token
            string aes_key = ConfigurationManager.AppSettings["Suiteaes_key"];
            //aes_key = "4g5j64qlyl3zvetqxz5jiocdr586fn2zvjpa8zls3ij";//钉钉测试文档中的aes_key
            string suitekey = ConfigurationManager.AppSettings["DD_corpid"];
            //suitekey = "suite4xxxxxxxxxxxxxxx";//钉钉测试文档中的suitekey

            #region 验证回调的url
            DingTalkCrypt dingTalk = new DingTalkCrypt(token, aes_key, suitekey);
            string sEchoStr = "";
            int ret = dingTalk.VerifyURL(signature, timestamp, nonce, encryptStr, ref sEchoStr);
            #endregion

            #region 解密接受信息,进行事件处理
            string plainText = "";
            ret = dingTalk.DecryptMsg(signature, timestamp, nonce, encryptStr, ref plainText);

            Hashtable tb = (Hashtable)JsonConvert.DeserializeObject(plainText, typeof(Hashtable));
            string eventType = tb["EventType"].ToString();
            string res = "success";
            switch (eventType)
            {
                case "user_modify_org"://用户信息修改,执行代码
                    #region 用户信息修改,执行代码

                    #endregion
                    break;
                default:
                    break;
            }

            timestamp = DateTime.Now.GetTimeStamp().ToString();
            string encrypt = "";
            string signature2 = "";
            dingTalk = new DingTalkCrypt(token, aes_key, suitekey);
            ret = dingTalk.EncryptMsg(res, timestamp, nonce, ref encrypt, ref signature2);

            Hashtable jsonMap = new Hashtable
                {
                    {"msg_signature", signature2},
                    {"encrypt", encrypt},
                    {"timeStamp", timestamp},
                    {"nonce", nonce}
                };

            return Json(jsonMap);
            #endregion
        }

需要帮助

原文地址:https://www.cnblogs.com/lonelyxmas/p/12409036.html

时间: 2024-08-28 05:27:56

钉钉事件回调c#测试完成的相关文章

钉钉中添加回调监听事件

此类是HttpRequest.java------------------------------------------------------------------------------------------------------------------------------------------------------------------------/** * get请求 * @param url 为接口地址参数 * @return */ public static JSO

钉钉自定义机器人配合SVN钩子事件进行消息的推送实践

目前很多公司还是使用SVN(TortoiseSVN)进行版本控制,使用简单,适合管理一般项目.协同办公软件目前钉钉比较成熟,阿里也一直在宣传推广,这两年公司也在使用,主要用于信息的沟通,其它的绩效.考勤.日志.审批等都是挂载的我们公司内部的系统,很方便,之后钉钉推出了钉钉机器人,一开始觉得没用,也就一直没关注,但是最近我看了钉钉自定义机器人,觉得这个可以好好利用起来,看到网上也有这方面的应用说明,看着很简单,但是按照流程操作起来各种坑,而且相关知识过于碎片化,今天我在这里进行一下简单的整合,梳理

钉钉审批流回调

原文:钉钉审批流回调 先注册回调接口(只需要调用注册回调接口一次), using Newtonsoft.Json; 1 public void DingdingTest() 2 { 3 string accessToken = dingApp.getAccessToken(); 4 5 string code = "jiangxiaobai";//@NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode; 6 var use

Java钉钉开发_02_免登授权(身份验证)(附源码)

源码已上传GitHub: https://github.com/shirayner/DingTalk_Demo 一.本节要点 1.免登授权的流程 (1)签名校验 (2)获取code,并传到后台 (3)根据code获取userid (4)根据userid获取用户信息,(此处可进行相应业务处理) (5)将用户信息传到前端,前端拿到用户信息,并做相应处理 2.计算签名信息(signature) 2.1 待签名参数 ticket jsapi_ticket nonceStr        随机字符串,随机

钉钉扫码登录网站(两种方式实现)

原文:钉钉扫码登录网站(两种方式实现) 钉钉扫码登录网站(两种方式实现)# 效果:# 源代码地址:https://github.com/jellydong/DingQrCodeLogin 动手敲代码!# 第一步,钉钉后台配置 参考链接:获取appId及appSecret. 点击进入钉钉开发者平台 的页面,点击左侧菜单的[移动接入应用-登录],然后点击右上角的[创建扫码登录应用授权],创建用于免登过程中验证身份的appId及appSecret,创建后即可看到appId和appSecret. 这里因

js api 实现钉钉免登

js api 实现钉钉免登,用于从钉钉微应用跳转到企业内部的oa,erp等,我刚刚实施完了我公司的这个功能,钉钉用起来还不错. 1 js api 实现钉钉免登,页面配置. <title>利用jsapi实现免登</title>     <script type="text/javascript" src="https://g.alicdn.com/ilw/ding/0.7.5/scripts/dingtalk.js" ></s

[转] 钉钉的H5性能优化方案

对于一个H5的产品,功能无疑很重要,但是性能同样是用户体验中不可或缺的一环.原本H5的渲染性能就不及native的app,如果不把性能优化做起来,将极大地影响用户使用产品的积极性. 用户感受 当用户能够在1-2秒内打开H5页面,看到信息的展示,或者能够开始进行下一步的操作,用户会感觉速度还好,可以接受:而页面如果在2-5秒后才进入可用的状态,用户的耐心会逐渐丧失:而如果一个界面超过5秒甚至更久才能显示出来,这对用户来说基本是无法忍受的,也许有一部分用户会退出重新进入,但更多的用户会直接放弃使用.

基于AccessibilityService制作的钉钉自动签到程序

标签: 移动开发安卓自动化操作 2015-12-03 09:56 1736人阅读 评论(10) 收藏 举报 分类: Android(3) 版权声明:本文为博主原创文章,未经博主允许不得转载. 前两天公司开始宣布要使用阿里钉钉来签到啦!!!~~这就意味着,我必须老老实实每天按时签到上班下班了,这真是一个悲伤的消息,可是!!!!那么机智(lan)的我,怎么可能就这么屈服!!!阿里钉钉签到,说到底不就是手机软件签到吗?我就是干移动开发的,做一个小应用每天自动签到不就行了:) 说干就干,首先分析一下,阿

钉钉开发笔记(4) 签名验证问题的处理

忙了一天竟然在一个以前自认为,很基础的问题上卡顿了,为了防止以后出现类似错误,决定还是记录下来,顺便整理下思路! 钉钉开发中有PC和移动之分,这个已经讲过,其中最基础也是最重要的当属其中的签名验证了,也只有这个步骤成功了你才可以调取JSAPI文档中的一些组件的接口.(不用钉钉组件的童鞋可以无视我这句  -.-) 其中PC版的签名验证算法如图: 1 JS-API权限签名算法 2 3 如果开发者想使用钉钉容器开放的jsapi接口,需要经过以下流程: 4 5 首先需要获取jsapi_ticket. 6