.Net調用釘釘接口,實現發送企業消息功能

我在釘釘官網上看了下,關於調用釘釘接口,發送企業消息通知,他給的核心代碼總共幾行。html

用到的一個接口引用編程

TopSDK.dll 下載網址https://open-doc.dingtalk.com/doc/sdk.htm?spm=a219a.7629140.0.0.mItbfA&treeId=177&articleId=104963&docType=1 選擇 .Net版本TOP接入SDKjson

1             IDingTalkClient client = new DefaultDingTalkClient("https://eco.taobao.com/router/rest");
2             CorpMessageCorpconversationAsyncsendRequest req = new CorpMessageCorpconversationAsyncsendRequest();
3             req.Msgtype = "oa";//發送消息是以oa的形式發送的,其餘的還有text,image等形式
4             req.AgentId = 167524917;//微應用ID
5             req.UseridList = "manager7626";//收信息的userId,這個是by公司來區分,在該公司內這是一個惟一標識符
6             req.DeptIdList = "123,456";//部門ID
7             req.ToAllUser = false;//是否發給全部人
        //消息文本
8 req.Msgcontent = "{\"message_url\": \"http://dingtalk.com\",\"head\": {\"bgcolor\": \"FFBBBBBB\",\"text\": \"頭部標題\"},\"body\": {\"title\": \"測試文本\",\"form\": [{\"key\": \"姓名:\",\"value\": \"張三\"},{\"key\": \"愛好:\",\"value\": \"打球、聽音樂\"}],\"rich\": {\"num\": \"15.6\",\"unit\": \"元\"},\"content\": \"大段文本大段文本大段文本大段文本大段文本大段文本大段文本大段文本大段文本大段文本大段文本大段文本\",\"image\": \"@lADOADmaWMzazQKA\",\"file_count\": \"3\",\"author\": \"李四 \"}}"; 9 CorpMessageCorpconversationAsyncsendResponse rsp = client.Execute(req, "402107cac8ff329d91baa5b2b7797068");//發送消息

這是釘釘官網上給的Demo。我把代碼改copy下來之後,改爲個人userid和個人access_token之後,提交的代碼。執行之後,個人釘釘收到如下提示:api

效果展現

好了,效果達到了,接下詳細說說個人代碼過程。微信

 1.建立測試企業測試

在釘釘上面建立一個測試企業。這是用來測試的。url

2.建立微應用spa

在釘釘左邊點擊那四個正方形堆在一塊兒的按鈕==》進入應用中心==》管理應用==》進入管理後臺==》工做臺==》建立一個應用==》拿到AgentId.設計

這個值很重要,企業通知消息就是經過這個微信用發送出去的。rest

 

 2.得到access_token

1>得到CorpId和CorpSecret

 

 

 

 2>得到access_token

所有上代碼了

專門用一個類來封裝。

  1 using Newtonsoft.Json;
  2 using System;
  3 using System.Collections.Generic;
  4 using System.IO;
  5 using System.Linq;
  6 using System.Net;
  7 using System.Text;
  8 using System.Threading.Tasks;
  9 
 10 
 11 
 12 namespace ConsoleApplication6
 13 {
 14     public class Class1
 15     {
 16 
 17         //https://oapi.dingtalk.com/gettoken?corpid=ding892914b21488a37b35c2f4657eb6378f&corpsecret=XVP6U8FCqj-9trQ8zDDCgZILXGH6Q4FXu40h4_-_MztCWy4w0KVPaP3ZIoLDuSRJ
 18 
 19         /// <summary>
 20         /// CorpId
 21         /// </summary>
 22         private static string CorpId = "CorpId:ding892914b21488a37b35c2f4657eb6378f ";
 23         /// <summary>
 24         /// CorpSecret
 25         /// </summary>
 26         private static string CorpSecret = "XVP6U8FCqj-9trQ8zDDCgZILXGH6Q4FXu40h4_-_MztCWy4w0KVPaP3ZIoLDuSRJ";
 27 
 28         private static int AgentID = 167524917;
 29 
 30 
 31 
 32         private static DateTime GetTime { get; set; }
 33 
 34         //public DingTalkApiService()
 35         //{
 36         //    if (string.IsNullOrEmpty(Access_Token))
 37         //    {
 38         //        GetAccessToken();//從新發送get請求得到得到access_token值
 39         //    }
 40         //}
 41         public Class1()
 42         {
 43             if (string.IsNullOrEmpty(Access_Token))
 44             {
 45                 Access_Token = GetAccessToken();
 46             }
 47         }
 48 
 49 
 50         private static string Access_Token { get; set; }
 51 
 52         public string GetAccessToken()
 53         {
 54             //根據CorpId和CorpSecret發送get請求得到access_token
 55             string url = "https://oapi.dingtalk.com/gettoken?corpid=" + CorpId + "&corpsecret=" + CorpSecret;
 56             //建立請求
 57             HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
 58 
 59             //GET請求
 60             request.Method = "GET";
 61             request.ReadWriteTimeout = 5000;
 62             Encoding encode = Encoding.UTF8;
 63             //request.ContentType = "text/html;charset=UTF-8";
 64             HttpWebResponse response = (HttpWebResponse)request.GetResponse();
 65             Stream myResponseStream = response.GetResponseStream();
 66             StreamReader myStreamReader = new StreamReader(myResponseStream, encode);
 67 
 68             //返回內容
 69             string retString = myStreamReader.ReadToEnd();
 70 
 71             JsonSerializer serializer = new JsonSerializer();
 72             StringReader sr = new StringReader(retString);
 73             object o = serializer.Deserialize(new JsonTextReader(sr), typeof(AccessToken));
 74             AccessToken t = o as AccessToken;
 75 
 76             string m = t.Access_Token;
 77             //AccessToken entity=JsonHelper
 78             //string s=    myStreamReader.ReadLineAsync();
 79             string accessToken = retString.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)[1].Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries)[1].Replace("\"", "");
 80             //string[] t = retString.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
 81             //string s = t[1];
 82             //string a = s.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries)[1];
 83             return accessToken;
 84         }
 85 
 86         //根據傳進來的人得到釘釘的userid
 87 
 88         public string GetDepartment(string depName)
 89         {
 90             string url = "https://oapi.dingtalk.com/department/list?access_token=" + Access_Token;
 91 
 92             HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
 93             //GET請求
 94             request.Method = "GET";
 95             request.ReadWriteTimeout = 5000;
 96             Encoding encode = Encoding.UTF8;
 97             //request.ContentType = "text/html;charset=UTF-8";
 98             HttpWebResponse response = (HttpWebResponse)request.GetResponse();
 99             Stream myResponseStream = response.GetResponseStream();
100             StreamReader myStreamReader = new StreamReader(myResponseStream, encode);
101 
102             //返回內容
103             string retString = myStreamReader.ReadToEnd();
104             //{"errcode":0,"department":[{"createDeptGroup":true,"name":"公司Test","id":1,"autoAddUser":true},{"createDeptGroup":false,"name":"運營部","id":61877829,"autoAddUser":false,"parentid":1},{"createDeptGroup":false,"name":"推广部","id":61933824,"autoAddUser":false,"parentid":1},{"createDeptGroup":false,"name":"生產部","id":61939784,"autoAddUser":false,"parentid":1},{"createDeptGroup":false,"name":"產品部","id":61943823,"autoAddUser":false,"parentid":1},{"createDeptGroup":false,"name":"物流部","id":61985767,"autoAddUser":false,"parentid":1},{"createDeptGroup":false,"name":"設計部","id":62021758,"autoAddUser":false,"parentid":1}],"errmsg":"ok"}
105             //var department = new { name = string.Empty, id = 0, autoAddUser = false, parentid =1};
106             //var tempEntity = new { errcode = string.Empty, List<department>=null, errmsg=string.Empty };
107             DepartmentJson dep = new DepartmentJson();
108             JsonSerializer serializer = new JsonSerializer();
109             StringReader sr = new StringReader(retString);
110             //tempEntity = JsonConvert.DeserializeAnonymousType(retString, tempEntity);
111             object o = serializer.Deserialize(new JsonTextReader(sr), typeof(DepartmentJson));
112             DepartmentJson t = o as DepartmentJson;
113 
114             List<department> s = t.department;
115 
116             string m = s.Where(p => p.Name == "運營部").Select(w => w.Name).ToList().ToString();
117             var id = s.Where(p => p.Name == "運營部").Select(x => x.id).ToList()[0];
118 
119 
120             url = "https://oapi.dingtalk.com/user/simplelist?access_token=" + Access_Token + "&department_id=" + id;
121 
122             HttpWebRequest requestNew = (HttpWebRequest)WebRequest.Create(url);
123             //GET請求
124             requestNew.Method = "GET";
125             requestNew.ReadWriteTimeout = 5000;
126             //Encoding encode = Encoding.UTF8;
127             //request.ContentType = "text/html;charset=UTF-8";
128             HttpWebResponse responseNew = (HttpWebResponse)requestNew.GetResponse();
129             Stream myResponseStreamNew = responseNew.GetResponseStream();
130             StreamReader myStreamReaderNew = new StreamReader(myResponseStreamNew, encode);
131 
132             //返回內容
133             string retStringNew = myStreamReaderNew.ReadToEnd();
134 
135             //{"errcode":0,"errmsg":"ok","userlist":[{"name":"張三","userid":"33333333333333333333333333"},{"name":"李四","userid":"3333333333333333"},{"name":"王五","userid":"333333333333"},{"name":"趙六","userid":"4444444444444"}]}
136             UserJson user = new UserJson();
137             //JsonSerializer serializer = new JsonSerializer();
138             StringReader srNew = new StringReader(retStringNew);
139             //tempEntity = JsonConvert.DeserializeAnonymousType(retString, tempEntity);
140             object oNew = serializer.Deserialize(new JsonTextReader(srNew), typeof(UserJson));
141             UserJson v = oNew as UserJson;
142 
143             List<Users> z = v.userlist;
144 
145 
146             var q = z.Where(p => p.Name == "李七").Select(i => i.UserId).ToList()[0];
147             decimal b = Convert.ToDecimal(q);
148             return b + "ddddd";
149         }
150 
151     }
152 }

裏面用到的一些類都是根據返回結果封裝的一些類,用於json的反序列化時存值。

這是本身寫的一個小測試Demo.

一切爲了測試,因此不少一些編程習慣和命名習慣都沒有遵照。權當你們做一個參考!

相關文章
相關標籤/搜索