谁有范例吗?
Register.html -ajax 调用 Register.ashx 注册 http://221.***.**.130:8013/Ding.ashx 接口 ,来做钉钉审批实例的处理。
点注册 返回上图错误 , 如何才能跟踪到Ding.ashx ,点注册 设断点 ,直接 Register.ashx 执行完就结束了
Register.ashx
--------
public void ProcessRequest (HttpContext context)
{
context.Response.ContentType = "text/plain";
string accToken = DingDll.SqlHelper.ReadToken(); //获取 Token
DefaultDingTalkClient client = new DefaultDingTalkClient(Urls.RegisterCallBack);
OapiCallBackRegisterCallBackRequest req = new OapiCallBackRegisterCallBackRequest();
req.Url = "http://221.**.**.130:8013/Ding.ashx";
req.AesKey = "45skhqweass5232345IUJKWEDL5251054DSFdsuhfW2"; //随机生成43位字串
req.Token = "123456"; //随机填写
List<string> arrMsg = new List<string>(); //填写要监控的信息
arrMsg.Add("bpms_task_change");
arrMsg.Add("bpms_instance_change");
req.CallBackTag = arrMsg;
OapiCallBackRegisterCallBackResponse rep = client.Execute(req, accToken);
string ss = rep.Body;
context.Response.Write( ss);
}
Ding.ashx
————————
public class Ding : IHttpHandler {
/// <summary>
/// Request.Form["EventType"]
/// </summary>
public string EventType { get; set; }
private string GetPostParam(HttpContext context)
{
if ("POST" == context.Request.RequestType)
{
Stream sm = context.Request.InputStream;//获取post正文
int len = (int)sm.Length;//post数据长度
byte[] inputByts = new byte[len];//字节数据,用于存储post数据
sm.Read(inputByts, 0, len);//将post数据写入byte数组中
sm.Close();//关闭IO流
//**********下面是把字节数组类型转换成字符串**********
string data = Encoding.UTF8.GetString(inputByts);//转为String
data = data.Replace("{\"encrypt\":\"", "").Replace("\"}","");
return data;
}
return "get方法";
}
public void ProcessRequest (HttpContext context) {
try
{
#region 获取套件配置参数
string mToken = ConfigurationManager.AppSettings["Token"];
//string mSuiteKey = "";
string mEncodingAesKey = ConfigurationManager.AppSettings["EncodingAESKey"];
string mSuiteKey = ConfigurationManager.AppSettings["corpid"];
//mSuiteKey = "suite4xxxxxxxxxxxxxxx";
#endregion
#region 获取回调URL里面的参数
//url中的签名
string msgSignature = context.Request["signature"];
//url中的时间戳
string timeStamp = context.Request["timestamp"];
//url中的随机字符串
string nonce = context.Request["nonce"];
//post数据包数据中的加密数据
string encryptStr = GetPostParam(context);
#endregion
string sEchoStr = "";
//#region 验证回调的url
//// SuiteAuth suiteAuth = new SuiteAuth();
DingDll.DingTalkCrypt ding = new DingTalkCrypt(mToken, mEncodingAesKey, mSuiteKey);
var ret = ding.VerifyURL(msgSignature, timeStamp, nonce, encryptStr, ref sEchoStr);
if (ret != 0)
{
context.Response.Write("ERR: VerifyURL fail, ret: " + ret);
return;
}
//#endregion
#region
//构造DingTalkCrypt
DingTalkCrypt dingTalk = new DingTalkCrypt(mToken, mEncodingAesKey, mSuiteKey);
string plainText = "";
dingTalk.DecryptMsg(msgSignature, timeStamp, nonce, encryptStr, ref plainText);
Hashtable tb = (Hashtable)JsonConvert.DeserializeObject(plainText, typeof(Hashtable));
string eventType = tb["EventType"].ToString();
string res = "success";
switch (eventType)
case "bpms_task_change"://审批任务开始,结束,转交
break;
case "bpms_instance_change":
break;
}
timeStamp = DingTalking.GetTimeStamp(System.DateTime.Now).ToString();
string encrypt = "";
string signature = "";
dingTalk = new DingTalkCrypt(mToken, mEncodingAesKey, mSuiteKey);
dingTalk.EncryptMsg(res, timeStamp, nonce, ref encrypt, ref signature);
Hashtable jsonMap = new Hashtable
{
{"msg_signature", signature},
{"encrypt", encrypt},
{"timeStamp", timeStamp},
{"nonce", nonce}
};
string result = JsonConvert.SerializeObject(jsonMap);
context.Response.Write(result);
#endregion
}
catch (Exception ex)
{
throw new Exception (DateTime.Now + ex.Message);
}
}
public bool IsReusable {
get {
return false;
}
}
}