You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求C#版DocuSign邮件签署API的最简独立控制器实现示例

DocuSign eSignature 邮件签署 C# 最简单Controller实现

前置依赖

  • 安装官方NuGet包:Install-Package DocuSign.eSign
  • 提前准备以下固定值(均从DocuSign开发者后台/授权流程获取):
    • 授权后生成的AccessToken(DocuSign返回,有效期8小时)
    • 你的DocuSign账户AccountId(后台「我的账户」页面可查)
    • 集成密钥(Integration Key,后台创建应用时生成)
    • 待签署的本地测试文档路径(仅支持PDF/Word/HTML等DocuSign兼容格式)
    • 签署人姓名、邮箱地址

最简Controller实现

所有逻辑均封装在单个动作方法内,无外部DI依赖、无Session/User等辅助类依赖:

using Microsoft.AspNetCore.Mvc;
using DocuSign.eSign.Api;
using DocuSign.eSign.Client;
using DocuSign.eSign.Model;
using System.IO;

[ApiController]
[Route("[controller]")]
public class DocusignTestController : ControllerBase
{
    [HttpGet("SendSignRequest")]
    public IActionResult SendSignRequest()
    {
        // -------------------------- 请修改以下配置为你自己的参数 --------------------------
        const string accessToken = "你的DocuSign AccessToken";
        const string accountId = "你的DocuSign AccountId";
        const string signerName = "张三";
        const string signerEmail = "zhangsan@example.com";
        const string documentPath = @"C:\test\test.pdf";
        const string docName = "测试合同.pdf";
        // DocuSign请求地址,沙箱环境用https://demo.docusign.net/restapi,生产环境用对应区域地址
        const string basePath = "https://demo.docusign.net/restapi";
        // --------------------------------------------------------------------------------

        // 1. 初始化DocuSign API客户端
        var apiClient = new ApiClient(basePath);
        apiClient.Configuration.AddDefaultHeader("Authorization", "Bearer " + accessToken);
        var envelopesApi = new EnvelopesApi(apiClient);

        // 2. 读取待签署文档并构造文档对象
        byte[] fileBytes = System.IO.File.ReadAllBytes(documentPath);
        var document = new Document
        {
            DocumentBase64 = System.Convert.ToBase64String(fileBytes),
            Name = docName,
            FileExtension = Path.GetExtension(documentPath).TrimStart('.'),
            DocumentId = "1" // 多文档时按顺序编号即可
        };

        // 3. 构造签署人信息与签署位置
        var signer = new Signer
        {
            Email = signerEmail,
            Name = signerName,
            RecipientId = "1", // 多签署人时按顺序编号
            RoutingOrder = "1" // 签署顺序,单签署人固定为1即可
        };

        // 配置签署位置:这里指定在文档第1页距离左上角100px、100px的位置加签署框
        var signHere = new SignHere
        {
            XPosition = "100",
            YPosition = "100",
            DocumentId = "1",
            PageNumber = "1"
        };

        signer.Tabs = new Tabs { SignHereTabs = new List<SignHere> { signHere } };
        var recipients = new Recipients { Signers = new List<Signer> { signer } };

        // 4. 构造信封对象,状态设为sent直接发送,设为created则为草稿
        var envelopeDefinition = new EnvelopeDefinition
        {
            EmailSubject = "请签署测试合同",
            Documents = new List<Document> { document },
            Recipients = recipients,
            Status = "sent"
        };

        // 5. 调用API发送签署请求
        EnvelopeSummary result = envelopesApi.CreateEnvelope(accountId, envelopeDefinition);

        return Ok(new { EnvelopeId = result.EnvelopeId, Msg = "签署请求已发送至签署人邮箱" });
    }
}

核心逻辑说明

官方示例中的User、Session、RequestItems等均为Demo封装的通用辅助类,不属于API调用的必要依赖。核心必填参数仅为AccessToken、AccountId、文档信息、签署人信息四类,其余所有封装逻辑均可根据业务需求自行实现。

内容的提问来源于stack exchange,提问作者Manish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 00:03:02