【问题标题】:DocuSign - View Form DataDocuSign - 查看表单数据
【发布时间】:2020-08-03 23:45:27
【问题描述】:

与我们合作的另一家公司通过这些客户填写的 DocuSign 信封向我们发送新的客户信息。我正在尝试通过 PDF 或通过 DocuSign API 从文档中提取表单数据。 PDF 似乎只嵌入了信封 ID。当我将我的帐户添加为抄送收件人并尝试在 DocuSign 控制台中查看表单数据时,我收到一条错误消息:

此外,我无法通过 DocuSign API 查看表单数据。

{
  errorCode: "USER_LACKS_PERMISSIONS",
  message: "This user lacks sufficient permissions to access this resource."
}

我尝试通过 API 访问:

  • /v2/accounts/{accountId}/envelopes/{envelopeId}/recipients/{recipientId}/tabs
  • /v2/accounts/{accountId}/envelopes/{envelopeId}/documents/{documentId}/fields

问题:

  1. 是否可以让不在发件人租户中的用户查看信封表单数据?
  2. DocuSign 有没有办法将标签数据嵌入到 PDF 中进行提取?
  3. 我没有考虑其他方法吗?

【问题讨论】:

  • 嗨@charis,查看此支持博客文章以解决问题:support.docusign.com/en/articles/…
  • 嗨@sssurii - 当时用户确实拥有适当的权限。如果在 DocuSign API 方面发生了一些变化,现在有了该权限就允许这样做,那就太好了。由于这个问题早已过去,我目前还没有准备好再次检查它,我能够使用 SOAP API 解决它。谢谢!

标签: docusignapi


【解决方案1】:

如果用户使用与其帐户相同的 userId 和电子邮件组合抄送信封,则该用户也可以使用 API 获取帐户信息。 (帐号就是你所说的“租户”。)

如果用户不在信封上,而您只是通过其他方式接收 PDF,则您无法使用 API 获取有关信封的信息,因为这仅限于信封的收件人。

【讨论】:

  • 抱歉,如果我没有非常简洁地说明它,但这就是我所说的“当我将我的帐户添加为抄送收件人并尝试在 DocuSign 控制台中查看表单数据时,我收到一个错误信息。”我可以通过 API 获取信封属性,但我无法通过 API 或 Web 应用程序读取表单字段数据。
  • 您如何“将我的帐户添加为抄送收件人”?仅添加电子邮件地址是不够的。名称必须完全匹配和/或您需要在收件人信息中指定 userId (GUID)。
  • 我将该用户的电子邮件添加为抄送收件人,并且名称和电子邮件完全匹配。我确信它的添加正是因为它显示在该用户的 Web 控制台中(在管理选项卡下)。
  • 好的,如果它显示在该用户的 Web 应用程序中 - 这表明用户具有访问权限。那么您是否仍然收到错误消息说您没有权限?对于完全相同的用户?
  • 是的。我进入信封,然后单击更多 > 表单数据。它适用于发送帐户,但不适用于抄送收件人。它也不能通过上述 API 方法工作。我注意到在帐户设置中有一个名为“允许发件人下载表单数据”的选项(在本例中被选中),但没有收件人等效项。看来这是设计使然。我可以想到原因,但这很不方便,我希望有一个解决方法。在这个阶段,我认为不会,我们要么必须让合作伙伴代表我们实施 Connect,要么使用 OCR 解决方案。
【解决方案2】:

@Inbar-Gazit 非常友好地在 DocuSign 内部进行了一些挖掘,经过一番反复,发现使用带有 RequestEnvelope 和 RequestEnvelopeV2 方法的 SOAP API 是可能的。我不确定使用一种方法是否比另一种方法有任何优势。两者都有异步方法。

https://developers.docusign.com/docs/esign-soap-api/reference/Status-and-Managing-Group/RequestEnvelope

一些简单粗暴的 C# 验证了这确实有效。我将其验证为发送帐户(也可通过 REST 工作)和 CC 收件人帐户(不能通过 REST 工作)。

var authString = $"<DocuSignCredentials><Username>{_userName}</Username><Password>{_password}</Password><IntegratorKey>{_apiKey}</IntegratorKey></DocuSignCredentials>";

var client = new DSAPIServiceSoapClient();

using (OperationContextScope scope = new OperationContextScope(client.InnerChannel))
{
    HttpRequestMessageProperty httpRequestProperty = new HttpRequestMessageProperty();
    httpRequestProperty.Headers.Add("X-DocuSign-Authentication", authString);
    OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty;

    EnvelopeStatus status = client.RequestStatusEx(_envelopeId);
    Console.Out.WriteLine("Subject: " + status.Subject);

    // RequestEnvelope Method
    var envelope = client.RequestEnvelope(_envelopeId, false);
    var testTab = envelope.Tabs.FirstOrDefault(t => t.TabLabel.Contains("Test"));
    if (testTab != null)
    {
        Console.WriteLine($"Tab {testTab.TabLabel}: {testTab.Value}");
    } else
    {
        Console.WriteLine("Tab not found.");
    }

    // RequestEnvelopeV2 Method
    var requestOptions = new RequestEnvelopeV2Options() {
        IncludeAC = false,
        IncludeAnchorTabLocations = true,
        IncludeDocumentBytes = false
    };
    var envelopeV2 = client.RequestEnvelopeV2(_envelopeId, requestOptions);
    var testTabV2 = envelopeV2.Tabs.FirstOrDefault(t => t.TabLabel.Contains("Test"));
    if (testTabV2 != null)
    {
        Console.WriteLine($"Tab(v2) {testTabV2.TabLabel}: {testTabV2.Value}");
    } else
    {
        Console.WriteLine("Tab(v2) not found.");
    }

    Console.WriteLine("\r\nDone.");
    Console.ReadKey();
}

输出:

Subject: Please DocuSign: Test Envelope
Tab txtDataLabelTest1: Some Data Here
Tab(v2) txtDataLabelTest1: Some Data Here

Done.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 2016-03-05
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多