C# 钉钉注册回调接口二开

allenfu 2020-06-19 03:41:31
谁有范例吗?


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

}
...全文
5788 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
dmankill 2020-06-21
  • 打赏
  • 举报
回复
https://developer.aliyun.com/ask/250318?spm=a2c6h.13524658 程序跟开发机没有在同一台电脑的话,用远程调试去做debug https://blog.csdn.net/zhouschina/article/details/77513235 其实错误已经很明显了说了前面参数之类的 错误,是不是没有按照文档来弄 https://ding-doc.dingtalk.com/doc#/faquestions/ltr370 他这里有sdk跟demo

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧