如何使用网钩获取完整的信封

时间:2019-03-01 16:45:03

标签: docusignapi

我想使用DocuSign Web挂钩,以便可以将完整的信封存储在我们的内部文档存储库系统中。我已经读到,获取文档的首选方法是使用传入的Web挂钩消息中返回的envelopeId,并使用API​​查询信封及其内容,以使传入的消息保持清淡,而不必处理任何大文件问题。

使用这种方法,我需要验证我的服务帐户以便查询信封。由于我想将其作为后端过程进行,因此我不确定如何进行身份验证,因为在所有身份验证方法中,都需要用户交互才能允许应用访问DocuSign。

我想念什么?什么是实现此目的的最佳选择?我是否应该只在收到的邮件中包含信封的内容,这样我就不需要再打个电话找回它了?

5 个答案:

答案 0 :(得分:1)

好吧,所以我终于把所有这些都做好了。 Payf1,Amit和Larry提到的所有内容都是正确的,并且很好地引用了此难题的各个方面。这是我在未获得用户同意的情况下将JWT设置为使用DocuSign API的步骤(称为Internal Apps的管理同意。对此有一个完整的document)。

  1. 在管理门户中,添加您的应用程序(集成> Api /密钥>添加应用程序/密钥)。保存后,单击“编辑”并创建一个RSA密钥对。复制私钥中的文本,并将其添加到应用程序中的文本文件中。
  2. 通过与您的DocuSign客户经理联系,在您的帐户上启用“组织管理”(这可能会产生一定的费用)。
  3. 登录到您的帐户,转到“组织管理”>“应用程序”。为您的应用程序授予“模拟签名”权限。
  4. 仍然在“组织管理”中,单击“域”>“声明域”。输入您的域,然后按照说明使用此document
  5. 添加到您的DNS
  6. 一旦完全设置并验证了域,请在“组织管理”中转到“用户”。查找您要模拟的用户或服务帐户。点击他们的名字以打开他们的个人资料。单击应用程序>授权应用程序>选择您的应用程序。输入权限“模拟签名”。
  7. 在您的应用程序中,使用此代码获取授权令牌。 User_id是您在第5步中授予访问权限的用户的guid(在其个人资料页面中找到)。

    byte [] privateKeyBytes =     System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(privateKeyFullPath));

    List<string> scope = new List<string>();
    scope.Add(OAuth.Scope_SIGNATURE);
    scope.Add(OAuth.Scope_IMPERSONATION);
    
    OAuthToken _AccessToken = _ApiClient.RequestJWTUserToken(client_id, user_id, OAuth.Demo_OAuth_BasePath, privateKeyBytes, 4, scope);
    

对于我的应用程序,我只是想在从DocuSign Web挂钩收到信封ID时返回信封:

_ApiClient.Configuration.AddDefaultHeader("Authorization", "Bearer " + _AccessToken.access_token);
EnvelopesApi envelopesApi = new EnvelopesApi(_ApiClient.Configuration);
EnvelopeDocumentsResult docList = envelopesApi.ListDocuments(accountId, envelopeId);

答案 1 :(得分:0)

欢迎来到社区Scott。

您可以使用单独的API调用来检索文档,也可以选择在Webhook中包括文档PDF和/或完成证书。 Webhook日志将始终包含整个信封数据,包括字段值。有关更多信息,请参见here

要回答有关身份验证的问题,您需要使用直接与DocuSign帐户集成并且不对每个最终用户进行身份验证的服务集成。换句话说,这是一种无用户的集成,可对文档存储系统和DocuSign进行身份验证。 JSON Web令牌承载授权是您可能要研究的身份验证方法。有关更多信息,请参见here

答案 2 :(得分:0)

您的问题很好。我同意@ Payf1的回答。这是一些其他信息。

订阅您的网络挂钩

您需要拥有DocuSign Webhook系统的订阅,这样您的监听器才能收到Webhook通知。

选项1:在帐户级别设置Connect系统。这将为您订阅该帐户上任何用户发送的每个信封,通过Powerforms,通过DocuSign Web工具以及通过API发送的信封。只需忽略不感兴趣的信封的传入通知即可。不要拒绝它们,先确认然后再忽略它们。

选项2:对于要进行Webhook订阅的每个信封,您都必须使用API​​创建信封,并在Envelopes::create调用中包含eventNotification对象。

这两个选项的传入通知都是相同的。

收听并执行webhook通知

要正确处理传入的Webhook通知流,最好的体系结构是将每个通知放置在可靠的队列中,然后将消息接收确认给DocuSign。

Azure Service BusAWS Simple Queue ServiceGoogle Cloud Tasks以及许多本地软件排队库提供可靠的队列。

然后,单独的 worker 进程可以异步处理消息。

正如您正确地说的那样,建议专家的建议是不要在通知正文中包含这些文件。

因此,工作进程需要一个DocuSign访问令牌来对DocuSign进行API调用,以检索信封的文档。正如@ Payf1所建议的那样,JWT Grant通常是正确的身份验证解决方案。如果您的应用根据需要使用刷新令牌来生成访问令牌,那么也可以使用Auth Code Grant身份验证授权。

示例

有关JWT Grant的信息,请参见eg-01 series of code examples

答案 3 :(得分:0)

您正在混淆两件事,其中之一是Webhook,它不需要JWT AccessToken,因为只要您在信封生命周期中发生了所订阅的触发事件,它就只是从DocuSign向监听器发出POST服务调用。您需要JWT生成的AccessToken来调用任何DS API服务。 Obtaining Consent将说明如何获得使用JWT生成AccessToken的同意。如果您在DS帐户中的所有用户都使用相同的公司电子邮件,并且您可以通过更新该公司电子邮件DNS中的TXT令牌来声明DS中的该公司电子邮件域,则可以使用“管理员同意”。另外,要使用“管理员同意书”,您还需要向DS客户经理咨询,如果您的订阅计划允许您使用DS中的“组织”功能。但是,如果您没有正确的订购计划,或者无法在DocuSign中声明电子邮件域,那么您需要在获得该用户的访问令牌之前明确获得用户的同意。

答案 4 :(得分:0)

很抱歉造成混乱。我是专门询问有关JWT身份验证的问题。我只想从传入的网络挂接呼叫中接收信封ID。然后使用DocuSign API查询已签名的文档。

在JWT中使用这种方法时,我的理解是我需要获取一个“访问代码”。我想我发现了一个难题,那就是我需要在我的帐户中启用组织管理。我这样做了,并授权我的应用使用“管理员内容范围”为“扩展”。我想使用后端处理来处理签名的文档。我对获取访问代码的理解是,我需要通过浏览器发出此请求。但是没有供用户交互的浏览器。这就是我遇到的问题。我如何获取后端进程的访问代码和/或访问令牌以进行此API调用?