c# - DocuSign API:在同一个信封中发送多个文档的签名问题
问题描述
使用 C#、DocuSign API SDK 4.5.2。
我要在同一个信封中发送 3 个签名文件。每个文档都将使用相同的服务器模板(它只是使用锚标记将签名元素放在文档上)。我可以寄出信封,然后我会从 DocuSign 收到电子邮件以查看/签署文件。
我遇到的问题是,当我去签名时,我必须在每个文件上签名 3 次——总共 9 次——然后我才被允许单击“完成”按钮。每个文件只有一个签名的地方,但我必须点击签名按钮 3 次才能被接受。如果我有 2 个收件人,那么每个收件人都是一样的。如果我将代码更改为仅发送 1 个文档,则它可以正常工作,因此很明显在信封请求中没有正确生成某些内容。
即使只有 2 个角色和 2 个不同的姓名/电子邮件地址,我也尝试为每个收件人提供不同的 ID 号。
就在我调用 API 以实际发送文档之前,我捕获了 JSON 用于调试目的:
{
"compositeTemplates": [
{
"compositeTemplateId": "1",
"document": {
"documentBase64": "---Document 1 Bytes---",
"documentId": "1",
"fileExtension": "pdf",
"name": "MultiDocument1"
},
"inlineTemplates": [
{
"recipients": {
"signers": [
{
"email": "client@gmail.com",
"name": "Client Name",
"recipientId": "1",
"roleName": "Signer1"
},
{
"email": "advisor@gmail.com",
"name": "Advisor Name",
"recipientId": "2",
"roleName": "Advisor"
}
]
},
"sequence": "2"
}
],
"serverTemplates": [
{
"sequence": "1",
"templateId": "99321CB1-A3E8-44A0-BDF4-D4F20069BC7B"
}
]
},
{
"compositeTemplateId": "2",
"document": {
"documentBase64": "---Document 2 Bytes---",
"documentId": "2",
"fileExtension": "pdf",
"name": "MultiDocument2"
},
"inlineTemplates": [
{
"recipients": {
"signers": [
{
"email": "client@gmail.com",
"name": "Client Name",
"recipientId": "1",
"roleName": "Signer1"
},
{
"email": "advisor@gmail.com",
"name": "Advisor Name",
"recipientId": "2",
"roleName": "Advisor"
}
]
},
"sequence": "2"
}
],
"serverTemplates": [
{
"sequence": "1",
"templateId": "99321CB1-A3E8-44A0-BDF4-D4F20069BC7B"
}
]
},
{
"compositeTemplateId": "3",
"document": {
"documentBase64": "---Document 3 Bytes---",
"documentId": "3",
"fileExtension": "pdf",
"name": "MultiDocument3"
},
"inlineTemplates": [
{
"recipients": {
"signers": [
{
"email": "client@gmail.com",
"name": "Client Name",
"recipientId": "1",
"roleName": "Signer1"
},
{
"email": "advisor@gmail.com",
"name": "Advisor Name",
"recipientId": "2",
"roleName": "Advisor"
}
]
},
"sequence": "2"
}
],
"serverTemplates": [
{
"sequence": "1",
"templateId": "99321CB1-A3E8-44A0-BDF4-D4F20069BC7B"
}
]
}
],
"emailSubject": "Multiple Documents for Signature",
"status": "Sent"
}
这是我正在使用的文件之一。其他两个类似——不同的文本,但使用相同的锚标记。
我还尝试替换我在测试文档 1 时成功使用的另一个文档——它完全不同,但仍然使用相同的锚标记。我得到了相同的结果——每个签名都要签名 3 次。
谁能看到我做错了什么?如果您需要更多信息,请告诉我。
谢谢,兰迪
更新:根据 Inbar 和 Larry 的建议,我联系了 DocuSign 支持,并将“锚点人口范围”设置从“信封”更改为“文档”。不幸的是,这让事情变得更糟。我仍然需要多次单击签名元素才能签名,但只能签名第一个文档。其他文件没有附加任何签名元素。
更新#2: 我想知道我使用模板的方式是否会令人困惑并导致这些问题。我可能应该更清楚地解释自己。我正在使用的服务器模板有一个“虚拟”Word 文档,其中只包含一组用于签名和日期的通用锚标记。我将它作为模板上传,并将签名和日期 UI 元素分配给锚标记。但是当我从我的应用程序发送请求时,我使用的是我在运行时选择/生成的不同文档。该文档替换了模板中的虚拟 Word 文档,但具有相同的锚标记,因此所有签名和日期元素都可以在真实文档中找到它们的位置。这在仅发送 1 个文档时效果很好,但我不能让事情超过一个。
更新#3:要求——我们正在向我们的网站(ASP.NET、WinForms)添加数字签名功能。我们已经有一个页面,顾问可以在该页面上打印出物理签名文档或使用 DocuSign 启动数字签名过程。我们所有的文档都来自 MS Report Server,因为它们需要包含来自我们数据库的客户数据。我们目前不发送任何静态文件。在页面后面的代码中,我从 Report Server 获取 PDF 字节并将其(作为文档)添加到要发送到 DocuSign 的复合模板中。它还包含对我的 Word 文档帐户(见下文)的服务器模板的引用,该文档包含要覆盖在报表服务器文档上的锚标记和签名元素(在更新 #2 中提到)。发生的情况是 Report Server 文档替换了 Word 模板的文本(如表单背景),并且因为我使用与锚标记相同的文本,Word 模板上的签名元素在 Report Server 文档中找到它们的匹配项并移动到他们在文件上的位置。我最后包括 1 个或多个客户的姓名/电子邮件地址,通常还有 2 个其他必需的签名者(顾问和经理)。然后将其发送到 DocuSign (SDK API) 以启动签名过程。使用单个文档,这运行良好。我们正在准备何时需要向客户发送超过 1 个文档,并且我们希望在单个请求中执行此操作。如果您需要更多信息,请告诉我。Word 模板上的签名元素在报表服务器文档中找到它们的匹配项并移动到它们在文档中的位置。我最后包括 1 个或多个客户的姓名/电子邮件地址,通常还有 2 个其他必需的签名者(顾问和经理)。然后将其发送到 DocuSign (SDK API) 以启动签名过程。使用单个文档,这运行良好。我们正在准备何时需要向客户发送超过 1 个文档,并且我们希望在单个请求中执行此操作。如果您需要更多信息,请告诉我。Word 模板上的签名元素在报表服务器文档中找到它们的匹配项并移动到它们在文档中的位置。我最后包括 1 个或多个客户的姓名/电子邮件地址,通常还有 2 个其他必需的签名者(顾问和经理)。然后将其发送到 DocuSign (SDK API) 以启动签名过程。使用单个文档,这运行良好。我们正在准备何时需要向客户发送超过 1 个文档,并且我们希望在单个请求中执行此操作。如果您需要更多信息,请告诉我。这运作良好。我们正在准备何时需要向客户发送超过 1 个文档,并且我们希望在单个请求中执行此操作。如果您需要更多信息,请告诉我。这运作良好。我们正在准备何时需要向客户发送超过 1 个文档,并且我们希望在单个请求中执行此操作。如果您需要更多信息,请告诉我。
解决方案
DocuSign 客户服务让我联系了一位非常耐心和乐于助人的开发人员支持代表。我解释了我正在尝试做的事情,他能够提出一个非常容易集成到我现有代码库中的解决方案。
要让它工作,你需要 2 块拼图。上面提到了第一项:您必须将帐户中的 Anchor Population Scope 值设置为“文档”。这必须由 DocuSign 客户服务代表完成,因为用户无法访问该设置。
第二项是导致签名标签全部堆叠在第一个文档上的原因。在您的复合模板中,内部模板的序号必须为“1”,而服务器模板的序号必须为“2”。一旦这两个项目都到位,我可以将多个文档发送给单个信封中的多个签名者,每个文档都使用相同的服务器模板(用于定义 AutoPlace 标记和角色)。
这是适用于我的示例 JSON:
{
"compositeTemplates": [
{
"compositeTemplateId": "1",
"inlineTemplates": [
{
"documents": [
{
"documentBase64": "<PDF Bytes>",
"documentId": "1",
"fileExtension": "PDF",
"name": "MultiDocument1"
}
],
"recipients": {
"signers": [
{
"email": "client@email.com",
"name": "Client Name",
"recipientId": "1",
"roleName": "Signer1"
},
{
"email": "advisor@email.com",
"name": "Advisor Name",
"recipientId": "2",
"roleName": "Advisor"
}
]
},
"sequence": "1"
}
],
"serverTemplates": [
{
"sequence": "2",
"templateId": "1234xxxx-xxxx-xxxx-xxxx-xxxxxxxx5678"
}
]
},
{
"compositeTemplateId": "2",
"inlineTemplates": [
{
"documents": [
{
"documentBase64": "<PDF Bytes>",
"documentId": "2",
"fileExtension": "PDF",
"name": "MultiDocument2"
}
],
"recipients": {
"signers": [
{
"email": "client@email.com",
"name": "Client Name",
"recipientId": "1",
"roleName": "Signer1"
},
{
"email": "advisor@email.com",
"name": "Advisor Name",
"recipientId": "2",
"roleName": "Advisor"
}
]
},
"sequence": "1"
}
],
"serverTemplates": [
{
"sequence": "2",
"templateId": "1234xxxx-xxxx-xxxx-xxxx-xxxxxxxx5678"
}
]
},
{
"compositeTemplateId": "3",
"inlineTemplates": [
{
"documents": [
{
"documentBase64": "<PDF Bytes>",
"documentId": "3",
"fileExtension": "PDF",
"name": "MultiDocument3"
}
],
"recipients": {
"signers": [
{
"email": "client@email.com",
"name": "Client Name",
"recipientId": "1",
"roleName": "Signer1"
},
{
"email": "advisor@email.com",
"name": "Advisor Name",
"recipientId": "2",
"roleName": "Advisor"
}
]
},
"sequence": "1"
}
],
"serverTemplates": [
{
"sequence": "2",
"templateId": "1234xxxx-xxxx-xxxx-xxxx-xxxxxxxx5678"
}
]
}
],
"emailSubject": "Multiple Documents for Signatures",
"status": "Sent"
}
如果您有任何问题,请告诉我。感谢 Larry K 和 Inbar Gazit 的协助!
推荐阅读
- python - 如何在代码中构建循环,直到输入预期的输入?
- simulation - 如何将托勒密模型导出为 FMU?
- php - 多控制器中的一个 __construct (Codeigniter 3)
- java - Java:数据同步问题
- r - 如何在 rgl 图中去除/减少球体的光泽
- python - 无法使用 Python 通过 socks5 代理发送请求
- amazon-web-services - 直接或通过 AWS Glue 数据目录将 Redshift Spectrum/AWS EMR 与 Hudi 连接
- helmfile - Helmfile - “需要”关键字没有效果
- ssh - 使用 ssh-copy-id 复制您的公钥
- android - 有谁知道 Android Studio 无法识别布局属性的常见原因?