钉钉接口 给用户发钉盘文件消息

  步骤概括:  

  1. 创建一个用于企业内部开发的H5微应用。将文件发送给指定用户,用户将收到以次应用名义发送的一条文件消息
  2. 服务端调用“单步上传文件”接口,上传文件获取mediaId
  3. 服务端调用“发送钉盘文件给指定用户”接口,把钉盘文件当做消息内容发送给用户

这里省略创建微应用的步骤。

步骤1:获取access_token  (GET)

  请求地址:https://oapi.dingtalk.com/gettoken?appkey=key&appsecret=secret

  钉钉接口 给用户发钉盘文件消息  钉盘文件上传

 

  返回说明

{
    "errcode": 0,
    "errmsg": "ok",
    "access_token": "fw8ef8we8f76e6f7s8df8s"
}

 

 

步骤2:调用“单步上传文件”接口,上传文件获取mediaId (POST)

  请求地址: 

  文件大小 取字节;

  钉钉接口 给用户发钉盘文件消息  钉盘文件上传

 

 

   返回说明

{
    "media_id": "xxxxxxxx",
    "errcode":0,
    "errmsg":"ok"
}

 

 

步骤3:发送钉盘文件给指定用户(POST)

  请求地址:https://oapi.dingtalk.com/cspace/add_to_single_chat?access_token=ACCESS_TOKEN&agent_id=AGENT_ID&userid=USERID&media_id=MEDIA_ID&file_name=FILE_NAME

  钉钉接口 给用户发钉盘文件消息  钉盘文件上传

  media_id 和file_name需要转成urlEncode格式,{"errcode":40007,"errmsg":"不合法的媒体文件id"}除了media_id 不存在、为空,还有一个原因是因为没有转格式

 

  引用 System.Web.HttpUtility;

  HttpUtility.UrlEncode(" 内容 "); 

 

   返回结果

{
    "errcode":0,
    "errmsg":"ok"
}

 

下面贴上代码:

using System.Text;
using System.IO;
using System.Data;
using System.Collections;
using TWays.Core.DBAccess;
using Newtonsoft.Json;

public class DDManager
    {
        #region 公共方法

        /// <summary>
        /// 记录日志
        /// </summary>
        /// <param name="strMsg"></param>
        private void Logger(string strMsg)
        {
            string strFilePath = System.Windows.Forms.Application.StartupPath + "\\" + StaticConst.WxSendLog;
            TWays.Core.Loger.LogMessage(strFilePath, strMsg, true);
        }

        //我这里是把钉钉的一些信息存在了数据库里
        //像APP_KEY、APP_SECRET之类的,根据自己定义的类型读取信息
        private DataSet GetValue(string type)
        {
            DataSet dr = DataAdapter.Query(string.Format(SqlText.selectDDTypeValue.ToUpper(), type));

            return dr;
        }

        #endregion

        #region 获取配置信息


        /// <summary>
        /// 获取微应用名称
        /// </summary>
        /// <returns></returns>
        public string GetAppMicorName(string type)
        {
            DataSet ds = GetValue(type);
            if (ds.Tables[0].Rows.Count < 0) return null;

            return TWays.Utils.ToString(ds.Tables[0].Rows[0]["DIC_NAME"]);
        }

        /// <summary>
        /// 获取APP_KEY
        /// </summary>
        /// <returns></returns>
        public string GetDDAppKey(string type)
        {
            //return GetConfigValue(StaticConst.WX_APP_ID);
            DataSet ds = GetValue(type);
            if (ds.Tables[0].Rows.Count < 0) return null;

            return TWays.Utils.ToString(ds.Tables[0].Rows[0]["APP_KEY"]);
        }

        /// <summary>
        /// 获取APP_SECRET
        /// </summary>
        /// <returns></returns>
        public string GetDDAppSecret(string type)
        {
            //return GetConfigValue(StaticConst.WX_APP_SECRET);
            DataSet ds = GetValue(type);
            if (ds.Tables[0].Rows.Count < 0) return null;

            return TWays.Utils.ToString(ds.Tables[0].Rows[0]["APP_SECRET"]);
        }

        /// <summary>
        /// 获取微应用id AGEN_ID
        /// </summary>
        /// <returns></returns>
        public string GetDDAgenId(string type)
        {
            //return GetConfigValue(StaticConst.WX_QY_CORP_ID);
            DataSet ds = GetValue(type);
            if (ds.Tables[0].Rows.Count < 0) return null;

            return TWays.Utils.ToString(ds.Tables[0].Rows[0]["AGEN_ID"]);
        }

        /// <summary>
        /// 获取配置信息
        /// </summary>
        /// <param name="strKey"></param>
        /// <returns></returns>
        public string GetConfigValue(string strKey)
        {
            string strKeyValue = string.Empty;

            strKeyValue = TWays.Utils.ToString(System.Configuration.ConfigurationManager.AppSettings[strKey]);

            return strKeyValue;
        }

        #endregion

        #region 获取POST消息

        /// <summary>
        /// 获取post返回来的数据
        /// </summary>
        /// <returns></returns>
        public static string PostInput()
        {
            Stream s = System.Web.HttpContext.Current.Request.InputStream;
            byte[] b = new byte[s.Length];
            s.Read(b, 0, (int)s.Length);
            return Encoding.UTF8.GetString(b);
        }

        #endregion

        #region 获取企业号AccessToken

        public string GetQyAccessToken(string type)
        {
            string QY_AppKey = this.GetDDAppKey(type);//钉钉的APP_KEY
            string QY_AppSecret = this.GetDDAppSecret(type);//

            string url = string.Format("https://oapi.dingtalk.com/gettoken?appkey={0}&appsecret={1}", QY_AppKey, QY_AppSecret);
            return ToAccessTokenJson(HttpRequestUtil.GetAppPage(url, 5000, Encoding.UTF8));
        }

        public string ToAccessTokenJson(string val)
        {
            AccessToken deserializedToken = (AccessToken)JavaScriptConvert.DeserializeObject(val, typeof(AccessToken));
            return deserializedToken.access_token;
        }

        #endregion

        #region 获取MediaId

        public string GetQyMediaId(string type, decimal size, string path)
        {
            string QY_MediaId = string.Empty;

            string strAccessToken = this.GetQyAccessToken(type);
            string strAgenId = this.GetDDAgenId(type);

            string url = string.Format("https://oapi.dingtalk.com/file/upload/single?access_token={0}&agent_id={1}&file_size={2}", strAccessToken, strAgenId, size);

            QY_MediaId = ToAccessMediaId(HttpRequestUtil.HttpPosturl(path, url));

            return QY_MediaId;
        }
        public string ToAccessMediaId(string val)
        {
            ThumbMedia deserializedMediaId = (ThumbMedia)JavaScriptConvert.DeserializeObject(val, typeof(ThumbMedia));
            return deserializedMediaId.media_id;
        }


        #endregion

        #region 获取用户id(判断用户是否存在)

        public string GetQyUserId(string token, string userId)
        {
            string url = string.Format("https://oapi.dingtalk.com/user/get?access_token={0}&userid={1}", token, userId);
            return ToUserJson(HttpRequestUtil.GetAppPage(url, 5000, Encoding.UTF8));
        }

        public string ToUserJson(string val)
        {

            Hashtable t = (Hashtable)JavaScriptConvert.DeserializeObject(val, typeof(Hashtable));

            if (t["errcode"].ToString() == "0")
            {
                return t["userid"].ToString();
            }
            return "";

            //User deserializedToken = (User)JavaScriptConvert.DeserializeObject(val, typeof(User));
            //return deserializedToken.userid;
        }

        #endregion

    }    
DDManager

相关文章:

  • 2022-02-09
  • 2021-11-19
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-04-18
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-02-20
  • 2021-06-26
  • 2022-12-23
  • 2022-01-18
  • 2022-01-10
相关资源
相似解决方案