DocuSign API:在同一个信封中发送多个文档时出现签名问题
DocuSign API: Signing issues with sending multiple documents in the same envelope
使用 C#,DocuSign API SDK 4.5.2。
我要在同一个信封中发送 3 份文件以供签名。每个文档都将使用相同的服务器模板(它只是使用锚标记将签名元素放置在文档上)。我可以寄出信封,然后从 DocuSign 收到电子邮件以 view/sign 文件。
我遇到的问题是,当我去签名时,我必须在每个文档上签名 3 次——总共 9 次——然后我才能单击“完成”按钮。每份文件只有 1 个地方可以签名,但我必须点击签名按钮 3 次才能被接受。如果我有 2 个收件人,则每个收件人都一样。如果我更改代码以仅发送 1 个文档,它工作正常,所以很明显在信封请求中没有正确生成某些内容。
我也试过给每个收件人一个不同的 ID 号,即使只有 2 个角色和 2 个不同的 names/email 地址。
就在我调用 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"
}
这是我正在使用的文档之一。其他 2 个相似 -- 不同的文本,但使用相同的锚标记。
我还尝试用我在测试文档 1 时成功使用的另一个文档替换它——它完全不同,但仍然使用相同的锚标记。我得到了相同的结果 -- 每个签名都必须签名 3 次。
谁能看出我做错了什么?如果您需要更多信息,请告诉我。
谢谢,
兰迪
更新: 根据 Inbar 和 Larry 的建议,我联系了 DocuSign 支持并将“锚定人口范围”设置从“信封”更改为“文档”。不幸的是,这让事情变得更糟。我仍然必须多次单击签名元素才能签名,但只能对第一个文档进行签名。其他文档没有附加任何签名元素。
更新 #2: 我想知道我使用模板的方式是否会造成混淆并导致这些问题。我可能应该更清楚地解释自己。我使用的服务器模板有一个“虚拟”Word 文档,其中仅包含一组用于签名和日期的通用锚标记。我将其作为模板上传,并将签名和日期 UI 元素分配给锚标签。但是当我从我的应用程序发送请求时,我在运行时使用了不同的文档 choose/generate。该文档取代了模板中的虚拟 Word 文档,但具有相同的锚标记,因此所有签名和日期元素都可以在真实文档中找到它们的位置。这在仅发送 1 个文档时效果很好,但我无法让事情处理多个文档。
更新 #3: 要求 -- 我们正在为我们的网站添加数字签名功能(ASP.NET,WinForms)。我们已经有一个页面,顾问可以在其中打印出用于物理签名的文档或使用 DocuSign 启动数字签名过程。我们所有的文档都来自 MS Report Server,因为它们需要包含我们数据库中的客户数据。我们目前不发送任何静态文件。在页面后面的代码中,我从报表服务器获取 PDF 字节并将其(作为文档)添加到要发送到 DocuSign 的复合模板。它还包含对我的 Word 文档帐户中的服务器模板的引用(见下文),其中包含要覆盖在报表服务器文档上的锚标记和签名元素(在更新 #2 中提到)。发生的事情是报表服务器文档替换了 Word 模板的文本(如表单背景),因为我使用相同的文本作为锚标记,Word 模板上的签名元素在报表服务器文档上找到它们的匹配项并移动他们在文档中的位置。我最后包括 1 个或多个 names/email 个客户地址,通常还有 2 个其他必需的签名者(顾问和经理)。然后将其发送到 DocuSign (SDK API) 以开始签名过程。使用单个文档,效果很好。我们正在准备何时需要向客户发送多于 1 个文档,我们希望在单个请求中完成。如果您需要更多信息,请告诉我。
我认为问题在于您的帐户已设置为定位标签定位适用于信封中的所有文档,而不仅仅是您应用模板的文档。
所以您最终得到了三个签名字段,它们直接位于另一个之上。
修复建议:
- 只应用最后一个模板。
- 或者更改您的帐户,使锚定位仅影响应用模板的文档。
DocuSign 客户服务让我与一位非常耐心且乐于助人的开发人员支持代表取得联系。我解释了我正在尝试做的事情,他能够想出一个非常容易集成到我现有代码库中的解决方案。
要让它发挥作用,您需要 2 块拼图。上面提到了第一项:您必须将帐户中的 Anchor Population Scope 值设置为“Document”。这必须由 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 的协助!
使用 C#,DocuSign API SDK 4.5.2。
我要在同一个信封中发送 3 份文件以供签名。每个文档都将使用相同的服务器模板(它只是使用锚标记将签名元素放置在文档上)。我可以寄出信封,然后从 DocuSign 收到电子邮件以 view/sign 文件。
我遇到的问题是,当我去签名时,我必须在每个文档上签名 3 次——总共 9 次——然后我才能单击“完成”按钮。每份文件只有 1 个地方可以签名,但我必须点击签名按钮 3 次才能被接受。如果我有 2 个收件人,则每个收件人都一样。如果我更改代码以仅发送 1 个文档,它工作正常,所以很明显在信封请求中没有正确生成某些内容。
我也试过给每个收件人一个不同的 ID 号,即使只有 2 个角色和 2 个不同的 names/email 地址。
就在我调用 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"
}
这是我正在使用的文档之一。其他 2 个相似 -- 不同的文本,但使用相同的锚标记。
我还尝试用我在测试文档 1 时成功使用的另一个文档替换它——它完全不同,但仍然使用相同的锚标记。我得到了相同的结果 -- 每个签名都必须签名 3 次。
谁能看出我做错了什么?如果您需要更多信息,请告诉我。
谢谢, 兰迪
更新: 根据 Inbar 和 Larry 的建议,我联系了 DocuSign 支持并将“锚定人口范围”设置从“信封”更改为“文档”。不幸的是,这让事情变得更糟。我仍然必须多次单击签名元素才能签名,但只能对第一个文档进行签名。其他文档没有附加任何签名元素。
更新 #2: 我想知道我使用模板的方式是否会造成混淆并导致这些问题。我可能应该更清楚地解释自己。我使用的服务器模板有一个“虚拟”Word 文档,其中仅包含一组用于签名和日期的通用锚标记。我将其作为模板上传,并将签名和日期 UI 元素分配给锚标签。但是当我从我的应用程序发送请求时,我在运行时使用了不同的文档 choose/generate。该文档取代了模板中的虚拟 Word 文档,但具有相同的锚标记,因此所有签名和日期元素都可以在真实文档中找到它们的位置。这在仅发送 1 个文档时效果很好,但我无法让事情处理多个文档。
更新 #3: 要求 -- 我们正在为我们的网站添加数字签名功能(ASP.NET,WinForms)。我们已经有一个页面,顾问可以在其中打印出用于物理签名的文档或使用 DocuSign 启动数字签名过程。我们所有的文档都来自 MS Report Server,因为它们需要包含我们数据库中的客户数据。我们目前不发送任何静态文件。在页面后面的代码中,我从报表服务器获取 PDF 字节并将其(作为文档)添加到要发送到 DocuSign 的复合模板。它还包含对我的 Word 文档帐户中的服务器模板的引用(见下文),其中包含要覆盖在报表服务器文档上的锚标记和签名元素(在更新 #2 中提到)。发生的事情是报表服务器文档替换了 Word 模板的文本(如表单背景),因为我使用相同的文本作为锚标记,Word 模板上的签名元素在报表服务器文档上找到它们的匹配项并移动他们在文档中的位置。我最后包括 1 个或多个 names/email 个客户地址,通常还有 2 个其他必需的签名者(顾问和经理)。然后将其发送到 DocuSign (SDK API) 以开始签名过程。使用单个文档,效果很好。我们正在准备何时需要向客户发送多于 1 个文档,我们希望在单个请求中完成。如果您需要更多信息,请告诉我。
我认为问题在于您的帐户已设置为定位标签定位适用于信封中的所有文档,而不仅仅是您应用模板的文档。
所以您最终得到了三个签名字段,它们直接位于另一个之上。
修复建议:
- 只应用最后一个模板。
- 或者更改您的帐户,使锚定位仅影响应用模板的文档。
DocuSign 客户服务让我与一位非常耐心且乐于助人的开发人员支持代表取得联系。我解释了我正在尝试做的事情,他能够想出一个非常容易集成到我现有代码库中的解决方案。
要让它发挥作用,您需要 2 块拼图。上面提到了第一项:您必须将帐户中的 Anchor Population Scope 值设置为“Document”。这必须由 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 的协助!