誰有范例嗎?

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;
}
}
}
uj5u.com熱心網友回復:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/29683.html
標籤:C#
