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; }
}