class DingDingHelper
{
//免登必需参数
private static string appid = "";
//免登必需参数
private static string appsecret = "";
//其他操作必需参数
private static string corpid = "";//应用id
//其他操作必需参数
private static string corpsecret = "";
//获取应用token
public AccessTokenResult GetAccessToken0()
{
string url = "https://oapi.dingtalk.com/gettoken?corpid=" + corpid + "&corpsecret=" + corpsecret;
try
{
var response = ApiRequest.HttpGet(url);
var result = Newtonsoft.Json.JsonConvert.DeserializeObject<AccessTokenResult>(response);
return result;
}
catch (Exception ex)
{
//Log.LogMsg("DingDing_GetAccessToken0_Exception", DateTime.Now, ex.Message);
throw new Exception(ex.Message);
}
}
//根据手机号获取用户UserID
public string UserID(string DDToken, string phone)
{
// 通过手机号获取 userId
string url = string.Format("https://oapi.dingtalk.com/user/get_by_mobile?access_token={0}&mobile={1}", DDToken, phone);
string userid = "找不到用户id";//用户企业内部id
var requestResult = ApiRequest.HttpGet(url);
// JToken json = requestResult;
// JToken json = JToken.Parse(HttpUtiy.HttpGet(url));
//if (json["errmsg"].ToString() != "找不到该用户")
//{
// userid = json["userid"].ToString();
//}
var result = Newtonsoft.Json.JsonConvert.DeserializeObject<getUser>(requestResult);
userid = result.userid;
if (userid == null)
{
userid = "找不到用户id";
}
return userid;
}
/// <summary>
/// 创建群会话
/// </summary>
/// <param name="phone1">手机号</param>
/// <param name="phone2">手机号</param>
/// <param name="Chatidname">群名称</param>
public createResult Creatchatid(string phone1, string phone2, string Chatidname, string DDToken)
{
#region 获取用户企业内部id
//获取值班人员企业userid
string userid = UserID(DDToken, phone1);//获取用户userId(第一个人作为群主)
string userid2 = UserID(DDToken, phone2);
//用户id添加到,成员数组。
string[] Chatiduseridlist = new string[] { userid, userid2 };//添加到群成员列表里
bool flagid;
#endregion
//判断是否正确获得用户企业id
if (userid.Trim() == "找不到用户id" || userid2.Trim() == "找不到用户id")
{
flagid = false;//获取用户id失败
return null;
}
else
{
#region 创建群会话
string MessageUrl = string.Format("https://oapi.dingtalk.com/chat/create?access_token={0}", DDToken);
var json_req = new
{
name = Chatidname, // 群名称
owner = userid, // 群主id
useridlist = Chatiduseridlist
};
string jsonRequest = JsonConvert.SerializeObject(json_req);//将对象转换为字符串类型
var response = ApiRequest.HttpPost(MessageUrl, jsonRequest);
var result = Newtonsoft.Json.JsonConvert.DeserializeObject<createResult>(response);
// JToken json = JToken.Parse(HttpUtiy.HttpPost(MessageUrl, jsonRequest));//返回值转换为JToken格式 //赋值给成员变量,避免多次创建群。
string getchatid = result.chatid;//json["chatid"].ToString();
return result;
#endregion
}
}
//创建群会话2
public createResult GetcreateChart(string accessToken)
{
try
{
string url = "https://oapi.dingtalk.com/chat/create?access_token=" + accessToken;
string param = "{\"name\": \"系统异常处理群\",\"owner\": \"1010\",\"useridlist\": [\"1155\",\"1010\"],\"showHistoryType\": \"1\"," +
"\"searchable\": \"1\",\"validationType\": \"0\",\"mentionAllAuthority\": \"0\",\"managementType\": \"1\",\"chatBannedType\": \"0\"}";
var response = ApiRequest.HttpPost(url, param);
//Log.LogMsg("DingDing_GetSnsToken", DateTime.Now, response);
var result = Newtonsoft.Json.JsonConvert.DeserializeObject<createResult>(response);
return result;
}
catch (Exception ex)
{
//Log.LogMsg("DingDing_GetSnsToken_Exception", DateTime.Now, ex.Message);
throw new Exception(ex.Message);
}
}
//发送群消息 --文本
public SendResult SendTxtChart(string accessToken, string chatid, string text)
{
try
{
//MessageResult mr = new MessageResult() { chatId = chatid, msg = new Msg { msgType = "text", text = new Text { content = text } } };
//string param = JsonConvert.SerializeObject(mr);
//string url = "https://connector.dingtalk.com/webhook/trigger/data/sync?webhookId=101fe8af288b212b796c0004";
//var response = ApiRequest.HttpPost(url, param);
//发送群消息
string MessageUrl = string.Format("https://oapi.dingtalk.com/chat/send?access_token={0}", accessToken);
var json_req = new
{
chatid = chatid,//获取群会话id
msg = new
{
msgtype = "text",
text = new
{
content = text
}
}
};
string jsonRequest = JsonConvert.SerializeObject(json_req);//将json转字符串
var response = ApiRequest.HttpPost(MessageUrl, jsonRequest);//{"errcode":0,"errmsg":"ok","messageId":"msguvjcIlESCBcRlbgWkrVvYw=="}
//Log.LogMsg("DingDing_GetSnsToken", DateTime.Now, response);
var result = Newtonsoft.Json.JsonConvert.DeserializeObject<SendResult>(response);
return result;
}
catch (Exception ex)
{
return null;
// throw new Exception(ex.Message);
}
}
//钉钉发送消息到个人--文本
public SendResult SendTxtUserChart(string accessToken, string UserList, string text)
{
try
{
string MessageUrl = "https://oapi.dingtalk.com/message/send?access_token=" + accessToken;
var json_req = new
{
touser = UserList,// "10110|10110", //接受推送userid,不同用户用|分割
toparty = "", //接受推送部门id
agentid = "225253872",
msgtype = "text", //推送类型
text = new
{
content = text
}
};
string jsonRequest = JsonConvert.SerializeObject(json_req);//将对象转换为json
var response = ApiRequest.HttpPost(MessageUrl, jsonRequest);
var result = Newtonsoft.Json.JsonConvert.DeserializeObject<SendResult>(response);
return result;
}
catch (Exception ex)
{
return null;
// MessageBox.Show(ex.ToString());
}
}
//发送图片
public SendResult SendImageChart(string accessToken, string chatid, string media_ids)
{
try
{
//发送群消息
string MessageUrl = string.Format("https://oapi.dingtalk.com/chat/send?access_token={0}", accessToken);
var json_req = new
{
chatid = chatid,//群会话id
msg = new
{
msgtype = "image",
image = new
{
media_id = media_ids
}
}
};
string jsonRequest = JsonConvert.SerializeObject(json_req);//将json转字符串
var response = ApiRequest.HttpPost(MessageUrl, jsonRequest);
var result = Newtonsoft.Json.JsonConvert.DeserializeObject<SendResult>(response);
return result;
}
catch (Exception ex)
{
return null;
}
}
/// <summary>
/// 钉钉上传媒体文件获取 media_id
/// </summary>
/// <param name="url">API地址</param>
/// <param name="fileWithPath">文件或图片本地路径</param>
/// <returns></returns>
public static UPmediaResult PostFile(string url, string fileWithPath)
{//"media_id":"@lAPPDfJ6bxHyx8rMs8yo"
try
{
// var url = " https://oapi.dingtalk.com/media/upload?access_token=" + DDToken + "&type=image";
// var fileName = @"d:\a.jpg";
// var requestResult = PostFile(url, fileName);//调用方式
var result = string.Empty;
var request = (HttpWebRequest)WebRequest.Create(url);
var boundary = "----------" + DateTime.Now.Ticks.ToString("x");
request.ContentType = "multipart/form-data; boundary=" + boundary;
request.Method = "POST";
using (Stream requestStream = request.GetRequestStream())
{
byte[] boundarybytes = Encoding.UTF8.GetBytes("--" + boundary + "\r\n");
byte[] trailer = Encoding.UTF8.GetBytes("\r\n--" + boundary + "–-\r\n");
var filename = Path.GetFileName(fileWithPath);
using (FileStream fs = new FileStream(fileWithPath, FileMode.Open, FileAccess.Read))
{
byte[] bArr = new byte[fs.Length];
fs.Read(bArr, 0, bArr.Length);
requestStream.Write(boundarybytes, 0, boundarybytes.Length);
var header = $"Content-Disposition:form-data;name=\"media\";filename=\"{filename}\"\r\nfilelength=\"{fs.Length}\"\r\nContent-Type:application/octet-stream\r\n\r\n";
byte[] postHeaderBytes = Encoding.UTF8.GetBytes(header.ToString());
requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
fs.Close();
requestStream.Write(bArr, 0, bArr.Length);
requestStream.Write(trailer, 0, trailer.Length);
}
}
var response = (HttpWebResponse)request.GetResponse();
var responseStream = response.GetResponseStream();
using (var streamReader = new StreamReader(response.GetResponseStream()))
{
result = streamReader.ReadToEnd();
}
var media = Newtonsoft.Json.JsonConvert.DeserializeObject<UPmediaResult>(result);
return media;
}
catch (Exception)
{
return null;
//throw;
}
}
get请求
//public static string HttpGet(string url)
//{
// HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
// request.Method = "GET";
// request.ContentType = "text/html;charset=UTF-8";
// HttpWebResponse response = (HttpWebResponse)request.GetResponse();
// Stream myResponseStream = response.GetResponseStream();
// StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
// string retString = myStreamReader.ReadToEnd();
// myStreamReader.Close();
// myResponseStream.Close();
// return retString;
//}
post请求
//public static string HttpPost(string url, string body)
//{
// //ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
// Encoding encoding = Encoding.UTF8;
// HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
// request.Method = "POST";
// request.Accept = "text/html, application/xhtml+xml, */*";
// request.ContentType = "application/json";
// byte[] buffer = encoding.GetBytes(body);
// request.ContentLength = buffer.Length;
// request.GetRequestStream().Write(buffer, 0, buffer.Length);
// HttpWebResponse response = (HttpWebResponse)request.GetResponse();
// using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
// {
// return reader.ReadToEnd();
// }
//}
}
public class MessageResult
{
public string chatId { get; set; }
public Msg msg { get; set; }
}
public class Msg
{
public string msgType { get; set; }
public Text text { get; set; }
}
public class Images
{
public string media_id { get; set; }
}
public class Text
{
public string content { get; set; }
}
public class AccessTokenResult
{
public string access_token { get; set; }
public int errcode { get; set; }
public string errmsg { get; set; }
}
public class createResult
{
public int errcode { get; set; }
public string errmsg { get; set; }
public string chatid { get; set; }
public string openConversationId { get; set; }
public int conversationTag { get; set; }
}
public class SendResult
{
public int errcode { get; set; }
public string errmsg { get; set; }
public string messageId { get; set; }
}
public class UPmediaResult
{
public int errcode { get; set; }
public string errmsg { get; set; }
public string media_id { get; set; }
public string created_at { get; set; }
public string type { get; set; }
}
public class getUser
{
public int errcode { get; set; }
public string errmsg { get; set; }
public string userid { get; set; }
}