1、设置基本信息
string AesKey = ConfigurationManager.AppSettings["AesKey"];//43位随机,由事件订阅页面自动生成
string Token = ConfigurationManager.AppSettings["Token"];//加解密需要用到的token,由事件订阅页面自动生成
string appKey = ConfigurationManager.AppSettings["appKey"];// 应用凭证中的appKey
var dingTalkEncryptor = new DingTalkEncryptor(Token, AesKey, appKey);
2、接收钉钉推送的信息
string msg_signature = context.Request["msg_signature"];//解密用
string timestamp = context.Request["timestamp"];//解密用
string nonce = context.Request["nonce"];//解密用
Stream stream = context.Request.InputStream;
if (stream.Length!=0)
{
StreamReader streamReader = new StreamReader(stream);
string json = streamReader.ReadToEnd();//获取到的消息体
JObject jo = (JObject)JsonConvert.DeserializeObject(json);
string encrypt = jo["encrypt"].ToString();//消息体内的加密信息
//对消息进行解密
string EventType = dingTalkEncryptor.getDecryptMsg(msg_signature, timestamp, nonce, encrypt);
DingDingAction dingDingAction = new DingDingAction();
Hashtable tb = (Hashtable)JsonConvert.DeserializeObject(EventType, typeof(Hashtable));
string eventType = tb["EventType"].ToString();//事件类型
switch (eventType)
{
case "bpms_task_change"://审批任务开始、结束、转交
//解析tb,数据处理
break;
case "bpms_instance_change"://审批实例开始、结束
//解析tb,数据处理
break;
default:
//解析tb,数据处理
break;
}
}
3、返回信息
#region 加密返回数据,必须要有,无需修改
Dictionary<String, String> resultMap = dingTalkEncryptor.getEncryptedMap("success");//加密success,返回信息中必须要有,否则钉钉默认调取失败
DingDingBack back = new DingDingBack();
back.msg_signature = resultMap["msg_signature"];
back.encrypt = resultMap["encrypt"];
back.timeStamp = resultMap["timeStamp"];
back.nonce = resultMap["nonce"];
string backmsg = JsonConvert.SerializeObject(back);
context.Response.Write(backmsg);
#endregion
4、返回信息类
public class DingDingBack {
public string msg_signature { get; set; }
public string encrypt { get; set; }
public string timeStamp { get; set; }
public string nonce { get; set; }
}