问题描述
使用 C#,DocuSign API SDK 4.5.2。
我将在同一个信封中发送 3 份签名文件。每个文档都将使用相同的服务器模板(它只是使用锚标记将签名元素放在文档上)。我可以发送信封,然后从 DocuSign 收到电子邮件以查看/签署文件。
我遇到的问题是,当我去签名时,我必须在每个文档上签名 3 次——总共 9 次——然后我才能点击“完成”按钮。每个文件只有 1 个地方可以签名,但我必须点击 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": "[email protected]","name": "Client Name","recipientId": "1","roleName": "Signer1"
},{
"email": "[email protected]","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","name": "MultiDocument2"
},{
"compositeTemplateId": "3","document": {
"documentBase64": "---Document 3 Bytes---","documentId": "3","name": "MultiDocument3"
},"templateId": "99321CB1-A3E8-44A0-BDF4-D4F20069BC7B"
}
]
}
],"emailSubject": "Multiple Documents for Signature","status": "Sent"
}
这是我正在使用的文档之一。其他 2 个相似——不同的文本,但使用相同的锚标记。
我还尝试用我在测试中成功使用的另一个文档替换文档 1——它完全不同,但仍然使用相同的锚标记。我得到了相同的结果 - 每个签名必须签名 3 次。
谁能看出我做错了什么?如果您需要更多信息,请告诉我。
谢谢, 兰迪
更新:根据 Inbar 和 Larry 的建议,我联系了 DocuSign 支持并将“锚定人口范围”设置从“信封”更改为“文档”。不幸的是,这让事情变得更糟。我还是要多次点击签名元素才能签名,但是只有第一个文档可以签名。其他文件没有附加任何签名元素。
更新 #2: 我想知道我使用模板的方式是否会造成混淆并导致这些问题。我可能应该更清楚地解释自己。我使用的服务器模板有一个“虚拟”Word 文档,它只包含一组用于签名和日期的通用锚标记。我将其作为模板上传,并将签名和日期 UI 元素分配给锚标记。但是,当我从应用程序发送请求时,我使用的是在运行时选择/生成的不同文档。该文档替换了模板中的虚拟 Word 文档,但具有相同的锚标记,因此所有签名和日期元素都可以在真实文档中找到它们的位置。这在仅发送 1 个文档时效果很好,但我无法让多个文档工作。
更新 #3: 要求 -- 我们正在向我们的网站(ASP.NET、WinForms)添加数字签名功能。我们已经有一个页面,顾问可以在其中打印出用于物理签名的文档或使用 DocuSign 启动数字签名过程。我们所有的文档都来自 MS 报表服务器,因为它们需要包含来自我们数据库的客户端数据。我们目前不发送任何静态文件。在页面后面的代码中,我从报表服务器获取 PDF 字节并将其(作为文档)添加到要发送到 DocuSign 的复合模板中。它还包含对我的 Word 文档(见下文)帐户中的服务器模板的引用,其中包含要覆盖在报表服务器文档上的锚标记和签名元素(在更新 #2 中提到)。发生的情况是报表服务器文档替换了 Word 模板的文本(如表单背景),并且因为我使用相同的文本作为锚标记,Word 模板上的签名元素在报表服务器文档上找到它们的匹配项并移动到他们在文件上的位置。我最后包括 1 个或多个客户的姓名/电子邮件地址,通常还有 2 个其他必需的签名者(顾问和经理)。然后将其发送到 DocuSign (SDK API) 以启动签名过程。使用单个文档,这运行良好。我们正在准备何时需要向客户发送 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": "[email protected]","name": "Client Name","recipientId": "1","roleName": "Signer1"
},{
"email": "[email protected]","name": "Advisor Name","recipientId": "2","roleName": "Advisor"
}
]
},"sequence": "1"
}
],"serverTemplates": [
{
"sequence": "2","templateId": "1234xxxx-xxxx-xxxx-xxxx-xxxxxxxx5678"
}
]
},{
"compositeTemplateId": "2","documentId": "2","name": "MultiDocument2"
}
],{
"compositeTemplateId": "3","documentId": "3","name": "MultiDocument3"
}
],"templateId": "1234xxxx-xxxx-xxxx-xxxx-xxxxxxxx5678"
}
]
}
],"emailSubject": "Multiple Documents for Signatures","status": "Sent"
}
如果您有任何问题,请告诉我。感谢 Larry K 和 Inbar Gazit 的协助!