C#发起钉钉审批流时增加附件的问题

C#WINFORM 中发起审批流时,需要增加附件时,得将文件上传至钉盘,将文件转存钉盘又要免登授权码。目前思路混乱的地方:不知道如何取得小程序的免登授权码。(本人没做过前端,官方文件就几句,不会通过前端取码)

img

img

小程序指的是这个:

img

我现在的问题

img

参考一下这个,一样的需求:
https://blog.csdn.net/sendless/article/details/127684750

要在 C#WINFORM 中使用钉钉小程序的免登授权码,需要完成以下步骤:

1、在钉钉开发者后台创建一个小程序,并获取到小程序的 AppID 和 AppSecret。

2、使用 AppID 和 AppSecret 调用钉钉开放平台的接口,获取到企业内部应用的 Access Token。

3、使用 Access Token 调用获取免登授权码接口,获取到免登授权码。

4、将免登授权码传递给 C#WINFORM 应用程序,在发起审批流时使用该免登授权码上传附件至钉盘并转存。

示例代码如下:

// 获取企业内部应用的 Access Token
string url = "https://oapi.dingtalk.com/gettoken?appkey=APPKEY&appsecret=APPSECRET";
url = url.Replace("APPKEY", appKey).Replace("APPSECRET", appSecret);
string response = HttpHelper.HttpGet(url);
JObject jo = JObject.Parse(response);
string accessToken = jo["access_token"].ToString();

// 获取免登授权码
url = "https://oapi.dingtalk.com/sns/get_sns_token?access_token=ACCESS_TOKEN";
url = url.Replace("ACCESS_TOKEN", accessToken);
string postData = "{\"openid\":\"OPENID\"}";
response = HttpHelper.HttpPost(url, postData);
jo = JObject.Parse(response);
string snsToken = jo["sns_token"].ToString();

// 上传附件至钉盘并转存
// TODO: 在此处添加代码

前端取码,在C#里,用HttpWebRequest 即可。

关键不会前端,不会取。可以帮我搞个DEMO吗?

你现在做到哪一步了

要在C# WinForms中获取钉钉小程序的免登授权码,需要进行以下步骤:

  1. 在钉钉开放平台创建一个小程序,并获取到小程序的AppKey和AppSecret。可以参考钉钉开放平台的文档来创建小程序。

  2. 在WinForms应用中,使用WebBrowser控件来加载钉钉的免登授权页面。可以使用WebBrowser控件导航到以下URL:

    https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=YOUR_APP_ID&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=YOUR_REDIRECT_URI
    

    其中,YOUR_APP_ID是你创建的小程序的AppKey,YOUR_REDIRECT_URI是你指定的重定向URI。

  3. 当用户在WebBrowser控件中完成免登授权后,会被重定向到YOUR_REDIRECT_URI,并带有授权码(code)参数。

  4. 在WinForms应用中,通过WebBrowser控件的DocumentCompleted事件来获取重定向的URL。可以使用DocumentCompleted事件处理程序来解析URL,提取授权码(code)。

    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        if (e.Url.AbsoluteUri.StartsWith("YOUR_REDIRECT_URI"))
        {
            string url = e.Url.AbsoluteUri;
            string code = GetAuthorizationCodeFromUrl(url);
            // 使用授权码(code)进行后续操作
            // ...
        }
    }
    
    private string GetAuthorizationCodeFromUrl(string url)
    {
        // 解析URL,提取授权码(code)
        // ...
    }
    

    GetAuthorizationCodeFromUrl方法中,你可以使用字符串处理函数或正则表达式等方式从URL中提取出授权码(code)。

  5. 获取到授权码(code)后,你可以使用该授权码来获取用户的身份信息和访问令牌等。可以通过调用钉钉开放平台的API来实现这些功能。

请注意,以上步骤中涉及到钉钉开放平台的具体接口和参数,请参考钉钉开放平台的文档和开发指南,以确保正确使用和授权流程的顺利完成。

引用GPT作答:
不用非得小程序获取,在钉钉开放平台上创建一个应用,在创建应用时,选择相应的权限范围,确保你的应用有权限访问钉盘的文件上传和转存功能,编写一个前端页面,用于获取用户的免登授权码。你可以使用钉钉开放平台提供的前端SDK来简化这个过程。在你的前端页面中,使用SDK提供的方法来获取免登授权码。通常的做法是通过扫描二维码的方式获得该授权码。在C# WinForms中,使用一个web浏览器控件来加载你的前端页面,并通过与该控件进行交互的方式来获取免登授权码。你可以使用WebBrowser控件中的一些方法(如Navigate)来加载页面,然后使用JavaScript与控件进行通信来获取免登授权码

方案一
在C# WinForms中获取钉钉小程序的免登授权码,可以通过调用钉钉开放平台提供的API实现。以下是一个简单的示例:
1.首先,需要在钉钉开放平台上创建一个小程序应用,并获取到AppID和AppSecret。
2.安装钉钉SDK(DingTalk.NET):

Install-Package DingTalk.NET

3.使用以下代码获取钉钉小程序的免登授权码:
注意替换代码中的你的AppID、你的AppSecret和你的回调地址为你自己的实际值。运行程序后,控制台将输出授权码。
c#

using System;
using System.Net.Http;
using DingTalk.NET6.Apis;
using DingTalk.NET6.Models;
using DingTalk.NET6.Requests;

namespace GetMiniProgramAuthCode
{
    class Program
    {
        static async Task Main(string[] args)
        {
            var appId = "你的AppID";
            var appSecret = "你的AppSecret";
            var redirectUri = "你的回调地址";
            var code = await GetMiniProgramAuthCodeAsync(appId, appSecret, redirectUri);
            Console.WriteLine("授权码:" + code);
        }

        public static async Task<string> GetMiniProgramAuthCodeAsync(string appId, string appSecret, string redirectUri)
        {
            using var httpClient = new HttpClient();
            var urlFormat = $"https://oapi.dingtalk.com/getauthcode?appid={appId}&redirect_uri={Uri.EscapeDataString(redirectUri)}&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect";
            var request = new OapiGetAuthCodeRequest()
            {
                AppId = appId,
                RedirectUri = redirectUri,
                State = "STATE", // 可以自定义一个字符串作为state参数,用于防止跨站请求伪造攻击(CSRF)
            };
            var response = await httpClient.PostAsync(urlFormat, new StringContent(request.ToJson(), Encoding.UTF8, "application/json"));
            if (response.IsSuccessStatusCode)
            {
                var content = await response.Content.ReadAsStringAsync();
                return content;
            }
            else
            {
                throw new Exception($"获取授权码失败,错误码:{response.StatusCode},响应内容:{await response.Content.ReadAsStringAsync()}");
            }
        }
    }
}

方案二
在C# WinForms中获取钉钉小程序的免登授权码,需要使用钉钉小程序的官方API,具体步骤如下:
1.注册钉钉开发者账号并创建应用,获取应用的AppId和AppSecret。
2.在WinForms应用程序中引入钉钉小程序的SDK,可以使用官方提供的DingTalk.dll或者自己编写SDK。
3.在应用程序中创建一个新的页面,用于显示授权码。
4.在页面中添加一个按钮,当用户点击按钮时,执行以下代码:
C

private void btnGetAuthCode_Click(object sender, EventArgs e)  
{  
    // 使用AppId和AppSecret获取授权码  
    string authCode = GetAuthCode();  
    // 在页面中显示授权码  
    txtAuthCode.Text = authCode;  
}  
  
private string GetAuthCode()  
{  
    // 初始化钉钉小程序的SDK  
    DingTalkClient client = new DingTalkClient("your_app_secret");  
    // 获取授权码的URL  
    string url = client.GetAuthUrl("your_app_id");  
    // 打开钉钉小程序,用户授权后返回的授权码  
    string authCode = client.GetAuthCode();  
    // 返回授权码  
    return authCode;  
}

5.在应用程序中添加一个监听器,用于监听授权码的过期时间,当授权码过期时,重新获取授权码。
6.在应用程序中添加一个按钮,当用户点击按钮时,执行以下代码:
C

private void btnLogin_Click(object sender, EventArgs e)  
{  
    // 使用授权码登录钉钉小程序  
    string accessToken = LoginWithAuthCode("your_auth_code");  
    // 在页面中显示登录成功信息  
    MessageBox.Show("登录成功!");  
}  
  
private string LoginWithAuthCode(string authCode)  
{  
    // 初始化钉钉小程序的SDK  
    DingTalkClient client = new DingTalkClient("your_app_secret");  
    // 使用授权码换取access_token的API接口地址  
    string url = client.LoginWithAuthCode(authCode);  
    // 解析API接口返回的JSON数据,获取access_token  
    string accessToken = Regex.Match(url, "\"access_token\":\"([^\"]*)").Groups[1].Value;  
    // 返回access_token  
    return accessToken;  
}

以上就是在C# WinForms中获取钉钉小程序的免登授权码的简单步骤。需要注意的是,在使用钉钉小程序的API接口时,需要确保AppId和AppSecret的保密性,避免泄露给第三方。

提供一些思路,如何有帮助,还忘采纳

采用chatgpt:
在C# WinForms中获取钉钉小程序的免登授权码需要使用钉钉开放平台的API进行认证和授权操作。下面是一个示例代码,演示如何使用C#发起授权请求以获取免登授权码:

using System;
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Text;
using System.Web;
using System.Windows.Forms;

namespace DingTalkAuthExample
{
    public partial class Form1 : Form
    {
        // 钉钉开放平台应用信息
        private const string AppId = "YOUR_APP_ID";
        private const string AppSecret = "YOUR_APP_SECRET";

        // 回调URL,用于接收授权码
        private const string RedirectUri = "http://localhost:8080/callback";

        public Form1()
        {
            InitializeComponent();
        }

        private void btnAuthorize_Click(object sender, EventArgs e)
        {
            // 构造授权请求URL
            string authorizeUrl = $"https://oapi.dingtalk.com/connect/qrconnect?appid={AppId}&response_type=code&scope=snsapi_login&state=STATE&redirect_uri={HttpUtility.UrlEncode(RedirectUri)}";

            // 在浏览器中打开授权页面
            Process.Start(authorizeUrl);
        }

        private void btnGetAccessToken_Click(object sender, EventArgs e)
        {
            // 从回调URL中获取授权码
            string authCode = txtAuthCode.Text.Trim();

            // 构造获取访问令牌的请求URL
            string accessTokenUrl = $"https://oapi.dingtalk.com/sns/gettoken?appid={AppId}&appsecret={AppSecret}";

            try
            {
                // 发起获取访问令牌的请求
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(accessTokenUrl);
                request.Method = "GET";

                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    using (Stream stream = response.GetResponseStream())
                    {
                        using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
                        {
                            string result = reader.ReadToEnd();

                            // 解析返回的JSON数据,获取访问令牌
                            string accessToken = ParseAccessToken(result);

                            // 使用授权码和访问令牌获取免登授权码
                            string loginToken = GetLoginToken(authCode, accessToken);

                            // 在这里可以将免登授权码传递给后端进行进一步的处理
                            MessageBox.Show("Login Token: " + loginToken);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: " + ex.Message);
            }
        }

        private string GetLoginToken(string authCode, string accessToken)
        {
            // 构造获取免登授权码的请求URL
            string loginTokenUrl = $"https://oapi.dingtalk.com/sns/get_persistent_code?access_token={accessToken}";

            try
            {
                // 构造POST请求的参数
                string postData = $"{{ \"tmp_auth_code\": \"{authCode}\" }}";

                // 发起获取免登授权码的请求
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(loginTokenUrl);
                request.Method = "POST";
                request.ContentType = "application/json";

                byte[] data = Encoding.UTF8.GetBytes(postData);
                using (Stream stream = request.GetRequestStream())
                {
                    stream.Write(data, 0, data.Length);
                }

                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    using (Stream stream = response.GetResponseStream())
                    {
                        using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
                        {
                            string result = reader.ReadToEnd();

                            // 解析返回的JSON数据,获取免登授权码
                            string loginToken = ParseLoginToken(result);
                            return loginToken;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: " + ex.Message);
                return null;
            }
        }

        private string ParseAccessToken(string response)
        {
            // 解析JSON数据,获取访问令牌
            // 这里使用一个简单的字符串截取的方式,请根据实际情况使用合适的JSON解析库进行处理
            int startIndex = response.IndexOf("\"access_token\":\"") + 16;
            int endIndex = response.IndexOf("\"", startIndex);
            string accessToken = response.Substring(startIndex, endIndex - startIndex);
            return accessToken;
        }

        private string ParseLoginToken(string response)
        {
            // 解析JSON数据,获取免登授权码
            // 这里使用一个简单的字符串截取的方式,请根据实际情况使用合适的JSON解析库进行处理
            int startIndex = response.IndexOf("\"persistent_code\":\"") + 18;
            int endIndex = response.IndexOf("\"", startIndex);
            string loginToken = response.Substring(startIndex, endIndex - startIndex);
            return loginToken;
        }
    }
}

上述代码中,你需要替换以下部分:

YOUR_APP_ID:你的钉钉开放平台应用ID
YOUR_APP_SECRET:你的钉钉开放平台应用密钥
此示例代码仅用于演示如何使用C# WinForms获取钉钉小程序的免登授权码。在实际应用中,你可能需要进一步处理免登授权码并将其传递给后端进行后续的操作。

首先在钉钉开放平台创建小程序,获得 AppKey 和 AppSecret,然后调用钉钉开放平台的获取免登授权码 API,传入 AppKey 和 AppSecret,获得免登授权码(临时授权码),将免登授权码返回给你的 C# 程序,然后用你的C# 程序调用钉钉开放平台文件存储 API 进行上传,传入免登授权码进行授权就可以了

附件具体什么类型文档

具体步骤如下:

1.注册小程序并获取AppId和AppSecret: 在钉钉开放平台注册一个小程序,并获取到分配给你的AppId和AppSecret。

2.获取临时授权码: 在C# Winform中编写代码,发送GET请求到钉钉开放平台的 https://oapi.dingtalk.com/connect/oauth2/sns_authorize 接口,传入以下参数:

appid:小程序的AppId
response_type:固定值code
scope:授权范围,可以是snsapi_base(静默授权)或snsapi_login(用户授权)
redirect_uri:授权回调URL,用户授权后会重定向到该URL,并携带授权码
state:用于保持请求和回调的状态,可自定义
用户在授权页面授权后,会重定向到指定的回调URL,并携带授权码(code)。

3.换取免登授权码: 在C# Winform中编写代码,发送GET请求到钉钉开放平台的 https://oapi.dingtalk.com/sns/get_sns_token 接口,传入以下参数:

appid:小程序的AppId
appsecret:小程序的AppSecret
access_token:临时授权码
persistent_code:固定值sns_token
成功换取免登授权码后,会返回JSON数据,其中包含免登授权码(sns_token),该免登授权码可以用于后续操作。

通过以上步骤,你可以获取到小程序的免登授权码,从而可以在C# Winform中发起审批流并上传附件至钉盘。请注意,具体代码实现需根据你使用的HTTP请求库和JSON解析库进行相应的调用和解析。

C#后端封装获取钉钉免登录码接口,前端调用,然后再去调用保存文件的接口

请根据您的具体情况进行适当的修改和调整。

  1. 获取免登授权码:

在前端页面中,您需要实现获取免登授权码的逻辑。这通常涉及到钉钉提供的前端 SDK 和相应的回调函数。以下是一个示例代码片段,展示了如何使用钉钉前端 SDK 获取免登授权码:

// 引入钉钉前端 SDK
import { config, auth } from 'dingtalk-jsapi';

// 配置免登授权参数
config({
  agentId: 'YOUR_AGENT_ID',
  corpId: 'YOUR_CORP_ID',
  // 其他配置参数...
});

// 调用免登授权方法
auth({
  onSuccess: function(result) {
    // 获取免登授权码
    var authCode = result.code;
    // 将免登授权码发送到后端进行处理
    // ...
  },
  // 其他回调函数...
});
  1. C# WinForms中处理回调页面:

在C# WinForms应用程序中,您需要创建一个回调页面来处理钉钉回调,解析URL参数并提取免登授权码。以下是一个示例代码片段,展示了如何在C# WinForms中处理回调页面:

// 在回调页面的加载事件中获取URL参数
private void CallbackPage_Load(object sender, EventArgs e)
{
    // 获取回调URL中的参数
    string queryString = this.webBrowser.Url.Query;
    var parameters = HttpUtility.ParseQueryString(queryString);
    string authCode = parameters["authCode"];

    // 将免登授权码传递到应用程序其他部分进行处理
    // ...
}
  1. 文件上传和转存:

使用钉盘的API进行文件上传和转存需要发送HTTP请求,并在请求中包含免登授权码和文件数据。以下是一个示例代码片段,展示了如何使用C#进行文件上传和转存的简化过程:

// 引入必要的命名空间
using System.Net;
using System.IO;

// 文件上传
string filePath = "path/to/file.txt";
string uploadUrl = "https://钉盘上传接口URL";
string accessToken = "您的免登授权码";
string boundary = "----BOUNDARY----";

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uploadUrl);
request.Method = "POST";
request.ContentType = "multipart/form-data; boundary=" + boundary;

using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
    // 写入免登授权码和文件数据
    streamWriter.WriteLine("--" + boundary);
    streamWriter.WriteLine("Content-Disposition: form-data; name=\"access_token\"");
    streamWriter.WriteLine();
    streamWriter.WriteLine(accessToken);

    streamWriter.WriteLine("--" + boundary);
    streamWriter.WriteLine("Content-Disposition: form-data; name=\"media\"; filename=\"file.txt\"");
    streamWriter.WriteLine("Content-Type: application/octet-stream");
    streamWriter.WriteLine();

    using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
    {
        byte[] buffer = new byte[4096];
        int bytesRead = 0;
        while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
        {
            streamWriter.BaseStream.Write(buffer, 0, bytesRead);
        }
    }

    streamWriter.WriteLine();
    streamWriter.WriteLine("--" + boundary + "--");
}

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

// 解析响应并进行转存等操作
// ...

请注意,以上代码仅提供了一种示例,并不包含完整的错误处理和边界情况处理。

调用webapi接口 获取

  1. 在钉钉开放平台注册您的小程序。
  2. 在 C# WinForms 应用程序中实现必要的身份验证和授权流程,以获得必要的凭据。
  3. 使用获取到的凭据对您的应用程序进行身份验证和授权,以访问钉钉API并获取SSO授权码。
  4. 获得SSO授权码后,您可以使用它来将文件传输到钉盘。
    请参阅钉钉开放平台文档或开发者文档

调用dd.getAuthCode接口获取小程序免登授权码。

免登是指用户进入应用后,无需输入钉钉用户名和密码,应用程序可自动获取当前用户身份登录系统的流程。企业应用和个人应用的免登授权码均可通过该JSAPI获取。


```bash

dd.getAuthCode({
    success:function(res){
        /*{
            authCode: 'hYLK98jkf0m' //string authCode
        }*/
    },
    fail:function(err){
    }
});

```

authCode

授权码。有效期5分钟,且只能使用一次,使用后会失效。

在前端,你可以使用钉钉开放平台提供的 JavaScript API,调用 dd.ready 函数来获取前端的免登授权码。具体实现可以参考钉钉开放平台的文档和示例代码。

在 C# WinForms 应用程序中,你可以使用 WebBrowser 控件来集成钉钉的前端页面,并通过调用 WebBrowser.Document.InvokeScript 方法来执行 JavaScript 代码。

在前端获取到免登授权码后,可以通过向后端发送 HTTP 请求,将该授权码传递到后端。

在后端,你可以使用该免登授权码,结合钉钉开放平台的身份验证接口,进行授权验证,以获取用户的身份信息。

获取到用户身份信息后,你可以调用钉钉开放平台提供的接口,将文件上传到钉盘,并获取上传后的文件信息(比如文件 ID 等)。

参考这个 http://t.csdn.cn/a7vMf

解决了?你可以钉钉开放平台提供的api文档看看

以下内容引用自GPT,有用望采纳:
要获取钉钉小程序的免登授权码,您可以按照以下步骤操作:

  1. 在钉钉开发者后台创建一个小程序,并设置好相关权限。
  2. 在您的C# WinForms应用程序中,使用WebBrowser控件嵌入一个Web页面,让用户登录他们的钉钉账号。
  3. 在WebBrowser控件中,监听回调URL,当用户登录成功后,钉钉会重定向到您指定的回调URL,并将免登授权码添加到URL中。
  4. 在您的WinForms应用程序中,通过检测WebBrowser控件URL中的返回参数获取免登授权码。

以下是示例代码,展示了如何实现获取免登授权码的思路:

using System;
using System.Windows.Forms;

namespace WinFormsApp
{
    public partial class Form1 : Form
    {
        // 定义回调URL,需要在钉钉开发者后台配置该URL
        private string callbackUrl = "http://localhost:8080/callback";

        public Form1()
        {
            InitializeComponent();

            // 在WebBrowser控件中加载钉钉登录页面
            webBrowser1.Url = new Uri("https://login.dingtalk.com/login/index.htm");
            webBrowser1.Navigated += webBrowser1_Navigated;
        }

        private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
        {
            // 检查是否是回调URL
            if (e.Url.AbsoluteUri.StartsWith(callbackUrl))
            {
                // 解析URL获取免登授权码
                string authCode = GetAuthCodeFromUrl(e.Url);

                // 在这里使用获取到的免登授权码进行其他操作
                // ...

                // 可以关闭WebBrowser控件或者跳转到其他页面
            }
        }

        private string GetAuthCodeFromUrl(Uri url)
        {
            // 解析URL参数
            string queryString = url.Query;
            string[] paramPairs = queryString.TrimStart('?').Split('&');
            
            // 遍历参数对,找到code参数并返回对应的值
            foreach (string paramPair in paramPairs)
            {
                string[] keyValue = paramPair.Split('=');
                if (keyValue.Length == 2 && keyValue[0] == "code")
                {
                    return keyValue[1];
                }
            }

            // 如果未找到code参数,返回空值或者抛出异常
            // TODO: 可根据实际情况进行处理
            return null;
        }
    }
}

在以上示例代码中,我们在Form1的构造函数中将webBrowser1控件加载了钉钉登录页面,用户登录成功后会重定向到指定的回调URL。我们通过监听webBrowser1Navigated事件,检查URL是否是回调URL,并通过解析URL参数获取免登授权码。

GetAuthCodeFromUrl方法中,我们通过解析URL参数获取免登授权码。如果存在code参数,则返回对应的值,否则返回空值或者采取其他处理方法。

请注意,上述代码只提供了获取免登授权码的基本思路和示例代码。具体实现还需根据您的具体情况进行调整和补充,并确保正确配置回调URL和其他相关权限。

非要自动的?

参考gpt:
根据我的搜索结果,钉盘免登授权码是指用户在第三方网站上使用钉钉扫码登录的功能,需要通过一系列的接口调用来获取用户的身份信息。您可以参考以下的流程和代码示例来实现这个功能:
结合我的语言组织如下:
1.用户点击Web网站上钉钉图标,展示二维码
2.用户使用钉钉app,扫码授权
3.钉钉服务器往回调地址发送code和state
4.在回调地址的action中,由appid,appSecret获取accessToken
5.由4中的code和4中的accessToken获取持久授权码persistent_code
6.由accessToken和5中得到的persistent_code和openid获取用户授权的sns_token
7.再由6中的sns_token获取钉钉用户信息

C#,对接钉钉OA审批流程
给你找了一个,可以看看

一、需求
钉钉提供微应用、小程序、宜搭等等,但我的需求就是把业务系统的操作信息同步发送到钉钉上。
二、操作
主要参考https://blog.csdn.net/u011871201/article/details/103733078?spm=1001.2014.3001.5501。
坑:必须要创建微应用/小程序,才能取得配置参数。
1 注册钉钉,身份注册成企业管理员(一点也不复杂,不认证也可以测试开发)。
2 创建审批模板,在钉钉电脑端OA审批中,管理后台里可以创建(这个管理后台不像微信公众平台,有单独的网页,必须先登录钉钉电脑端,然后才能进入)。管理后台——工作台——OA审批。创建以后,在网址里找到ProcessCode=,记下这个参数。
3 创建个微应用,取得关键参数,AgentId,AppKey,AppSecret。这些操作在钉钉开发者后台,https://open-dev.dingtalk.com/?spm=ding_open_doc.index.0.0.48134a97ANOEEs#/index,
应用开发,微应用,凭证与基础信息。
**在开发管理里,绑定服务器出口IP(这步十分关键)。
**在权限管理里,添加工作流、通讯录等权限。
4 码代码,开发。官网下载SDK,https://open-dev.dingtalk.com/apiExplorer#/?devType=org&api=dingtalk.oapi.processinstance.create,右侧有sdk下载链接。
//获得token
public static string getAccessToken(ref string errMsg)
{
if (Access_token != “null”&&Access_token!="")
{
TimeSpan ts = DateTime.Now.Subtract(Dt_token);
if (ts.Hours <= 2)
return Access_token;
}

        IDingTalkClient client = new DefaultDingTalkClient(Urls.gettoken);
        OapiGettokenRequest req = new OapiGettokenRequest();
        req.Appkey = appkey;
        req.Appsecret = appsecret;
        req.SetHttpMethod("GET");
        try
        {
            OapiGettokenResponse rsp = client.Execute(req, Access_token);
            rsp = client.Execute(req);

            if (rsp.Errcode == 0)
            {
                Access_token = rsp.AccessToken;
                Dt_token = DateTime.Now;
            }
            else
            {
                Access_token = "";
                errMsg = rsp.Errmsg;
            }
        }
        catch (Exception e)
        {
            // TODO Auto-generated catch block
            errMsg = e.Message;
        }
        if (errMsg != "")
            MessageBox.Show(errMsg);
        return Access_token;
    }

能看懂这个的话,应该基本就可以开发了。
5 具体实现过程(发起审批实例):
https://developers.dingtalk.com/document/app/initiate-approval
1 获取部门列表
2 根据部门获取人员列表
3 封装参数信息
4 发送。


三 示例


先要去钉钉平台申请权限。然后,安装JS SDK插件, 引入钉钉统一授权套件SDK, 添加onAuthAppBack调用。
然后, 在小程序需要授权的页面,使用授权SDK, 引入插件,定义唤起套件的方法。 使用page.onShow方法调用disposeAuthData处理授权后的结果。

具体操作步骤可以参考:
钉钉小程序免登录授权:https://blog.csdn.net/Dark_programmer/article/details/125297110