0
点赞
收藏
分享

微信扫一扫

API ASMX获取钉钉人员权限(案例)

程序员伟杰 2022-02-16 阅读 91
c#api

在学习创建API时以此为案例,仅仅为经验交流。

一、项目建立

1、建立一个asp.net Web应用程序

2、添加新项-》添加Web服务(asmx)文件

3、为API(.asmx)添加一个程序控制类,用来处理 返回结果格式和入参格式内容的校验

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace DingdingAPIdemo
{
    public class DingdingAPIProcessing
    {
        #region 单实例
        static DingdingAPIProcessing InterFace = null;
        public static DingdingAPIProcessing Getinfo()
        {
            if(InterFace == null)
            {
                InterFace = new DingdingAPIProcessing();
            }
            return InterFace;
        }
        #endregion

        #region 统一输出格式 

        public string GetSuccessResponseJsonstr(string strReturn)
        {
            /*
             {
                "Name" : "DingdingInterface",
                "key" : "1",
                "title":"返回成功",
                "word":"" 这里是返回结果
              }
             */

            strReturn = "{ " +
                        "\"Name\":\"ThirdInterface\"," +
                        "\"key\":\"1\"," +
                        "\"title\":\"返回成功\"," +
                        "\"word\":\"" + strReturn + "\""
                        + "}";
            return strReturn;
        }

        public string GetErrorResponseJsonstr(string strReturn)
        {
            /*
             {
                "Name" : "ThirdInterface",
                "key" : "9",
                "title":"返回失败",
                "error":"" 这里是返回结果
              }
             */

            strReturn = "{ " +
                        "\"Name\":\"ThirdInterface\"," +
                        "\"key\":\"9\"," +
                        "\"title\":\"返回失败\"," +
                        "\"error\":\"" + strReturn + "\""
                        + "}";
            return strReturn;
        }

        #endregion

        public string ThridToDingding(string type,string strXml)
        {
            switch (type)
            {
                case "GetUser":
                    string strReturn = DingdingType.Getinfo().GetUser(strXml);;
                    return GetSuccessResponseJsonstr(strReturn);
                default:
                    string strErorr = "当前【" + type + "】功能缺失";
                    return GetErrorResponseJsonstr(strErorr);
            }
        }

    }

}

4、创建一个钉钉接口类,用来调用钉钉的接口。

(1)添加引用 Newtonsoft.Json 用来处理返回结果提取Token。

 (2)添加一个GET请求与获取结果的类,如果自己有就用自己的,没有的可以参考我的。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Specialized;
using System.Net;
using System.IO;
namespace BaseFuction
{
    public class HttpNew
    {
        public static byte[] Post(string uri, NameValueCollection pairs)
        {
            byte[] response = null;
            using (WebClient client = new WebClient())
            {
                response = client.UploadValues(uri, pairs);
            }
            return response;
        }

        /// <summary>
        /// GET请求与获取结果
        /// </summary>
        public static string HttpGet(string Url, string postDataStr)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url + (postDataStr == "" ? "" : "?") + postDataStr);
            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.UTF8);
            string retString = myStreamReader.ReadToEnd();
            myStreamReader.Close();
            myResponseStream.Close();

            return retString;
        }
    }
}

(3)添加钉钉接口类:

using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Web;
using System.Xml;

namespace DingdingAPIdemo
{
    public class DingdingType
    {
        #region 单实例
        static DingdingType m_dingdingType = null;
        public static DingdingType Getinfo()
        {
            if(m_dingdingType == null)
            {
                m_dingdingType = new DingdingType();
            }
            return m_dingdingType;
        }
        #endregion

        /// <summary>
        /// get方式获取请求结果
        /// </summary>
        /// <param name="url"></param>
        /// <param name="encoding"></param>
        /// <returns></returns>
        public string SendRequest(string url, Encoding encoding)
        {
            if(encoding == null){
                encoding = Encoding.UTF8;
            }

            HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
            webRequest.Method = "GET";
            HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
            StreamReader sr = new StreamReader(webResponse.GetResponseStream(), encoding);
            string str = sr.ReadToEnd();
            return str;
        }


        //声明appid和secret 用来获取token
        static string appid = "《你的appid》";
        static string appsecret = "《secret》";
        public string GetToken()
        {
            string url = "https://oapi.dingtalk.com/gettoken?appkey=" + appid + "&appsecret=" + appsecret;
            string tokenlink = SendRequest(url, null);
            //返回结果:{ "errcode":0,"access_token":"946e8613614d335d81fc1dd87621971f","errmsg":"ok","expires_in":7200}
            JObject Jobj = JObject.Parse(tokenlink); //将Json格式转换
            string access_Token = Jobj["access_token"].ToString();//提取access_token 
            return access_Token;
        }

        public string GetUser( string strXml)
        {
            /*
             * 传入的参数格式:<Request>  
             *                   <UserId>001</UserId> 
             *                 </Request> 
             * 
             *
             *
             * 
             */

            //
            XmlDocument xml = new XmlDocument();
            xml.LoadXml(strXml);

            string userId = xml.SelectSingleNode("Request/UserId").InnerText;
            string url = "https://oapi.dingtalk.com/topapi/v2/user/get?access_token=" + GetToken();
            NameValueCollection nameValue = new NameValueCollection();
            nameValue.Add("language", "zh_CN");
            nameValue.Add("userid", userId);
            byte[] vs = HttpNew.Post(url, nameValue);
            //具体业务
            return System.Text.Encoding.UTF8.GetString(vs);

        }
    }
}

二、项目运行

 

 

举报

相关推荐

0 条评论