【问题标题】:DocuSign REST API - Send envelopes as a different userDocuSign REST API - 以其他用户身份发送信封
【发布时间】:2020-01-14 16:47:44
【问题描述】:

我正在设置一个网络应用程序,它使用 DocuSign 向各种不同的客户端发送电子签名请求。对不同客户的每个请求都需要显示不同的发件人姓名和电子邮件地址,而不仅仅是 DocuSign 帐户上的主姓名。完成的电子签名表格也需要通过电子邮件发送到这些客户特定的电子邮件地址。

我在我的 DocuSign 帐户中创建了一个新的第二个登录作为测试,并且能够让它显示此登录的名称/电子邮件,但只有当我从该帐户生成一个全新的临时演示 API 密钥并使用它时在应用程序中。

我可以通过更改 EnvelopeDefinition.EmailSettings.ReplyEmailAddressOverride 字段来更改回复电子邮件,但发送给签名者的信封电子邮件仍会显示主帐户名称/电子邮件,并且已签名的文档会通过电子邮件发送到主电子邮件。

如何更改发送给签名者的姓名和电子邮件地址以及接收签名文档的电子邮件地址?

            string signerName = "John Doe";
            string signerEmail = "johndoe@fake.com";
            string accessToken = "{The DocuSign API KEY}";
            string accountId = "{The DocuSign Account Number}";

            Document document = new Document
            {
                DocumentBase64 = Convert.ToBase64String(ReadContent(docName)),
                Name = "Please Sign This Form",
                FileExtension = "docx",
                DocumentId = "1"
            };
            Document[] documents = new Document[] { document };

            Signer signer = new Signer
            {
                Email = signerEmail,
                Name = signerName,
                RecipientId = "1",
                RoutingOrder = "1"
            };

            Tabs tabs = new Tabs();

            SignHere signHereTab = new SignHere
            {
                DocumentId = "1",
                PageNumber = "1",
                AnchorString = "Patient Signature or Mark",
                AnchorUnits = "pixels",
                AnchorXOffset = "10",
                AnchorYOffset = "-18",
                Width = "160"
            };
            List<SignHere> signatureTabs = new List<SignHere>();
            signatureTabs.Add(signHereTab);
            tabs.SignHereTabs = signatureTabs;

            FullName nameTab = new FullName
            {
                DocumentId = "1",
                PageNumber = "1",
                TabLabel = "Full Name",
                Value = signerName,
                AnchorUnits = "pixels",
                AnchorString = "Name:",
                AnchorXOffset = "133",
                AnchorYOffset = "5"
            };
            List<FullName> nameTabs = new List<FullName>();
            nameTabs.Add(nameTab);
            tabs.FullNameTabs = nameTabs;

            signer.Tabs = tabs;

            Recipients recipients = new Recipients
            {
                Signers = new List<Signer> { signer }
            };
            EnvelopeDefinition envelopeDefinition = new EnvelopeDefinition
            {
                EmailSubject = "Please Sign Form",
                Documents = new List<Document>(documents),
                Recipients = recipients,
                Status = "sent"
            };

            //Override the reply email address
            envelopeDefinition.EmailSettings = new EmailSettings();
            envelopeDefinition.EmailSettings.ReplyEmailAddressOverride = "client-specific-email@fake.com";
            envelopeDefinition.EmailSettings.ReplyEmailNameOverride = "Test Account";

            ApiClient apiClient = new ApiClient(basePath);

            apiClient.Configuration.AddDefaultHeader("Authorization", "Bearer " + accessToken); 

            EnvelopesApi envelopesApi = new EnvelopesApi(apiClient.Configuration);
            EnvelopeSummary results = envelopesApi.CreateEnvelope(accountId, envelopeDefinition);

【问题讨论】:

  • 如何对 API 进行身份验证?你使用 Auth Code Grant 还是 JWT?
  • 我在 ApiClient 的默认标头中传递 API 密钥:ApiClient apiClient = new ApiClient(basePath); apiClient.Configuration.AddDefaultHeader("授权", "承载" + accessToken); EnvelopesApi 信封Api = new EnvelopesApi(apiClient.Configuration); EnvelopeSummary results = envelopesApi.CreateEnvelope(accountId, envelopeDefinition);
  • 我用我如何发送信封的代码示例更新了原始帖子
  • 是的,但是你如何获得你的accessToken?
  • 我使用来自 DocuSign 的 OAuth 令牌生成器 developers.docusign.com/oauth-token-generator

标签: docusignapi


【解决方案1】:

如果您的应用想要在您的 DocuSign 帐户上以各种不同的人(用户)的身份发送邮件,正确的答案是使用 OAuth JWT 流向impersonate他们发送邮件。请参阅 github.com/docusign 上的 JWT 示例、eg-01 代码示例。

对于每个被模拟的用户,您的应用都需要来自 DocuSign 的用户指南。它可以从管理工具的用户部分获得。

新应用不支持旧的旧式身份验证标头技术。

【讨论】:

  • 我猜我最初看的指南已经过时了。我关注了 eg-01,现在我可以只使用用户 guid 来模拟用户。感谢您的帮助!
  • @Slippy -- 好消息。感谢您的更新和检查。
【解决方案2】:

由于您在开发者中心https://developers.docusign.com/oauth-token-generator 上使用令牌生成器,因此您现在的选择是使用您希望使用的其他用户登录该网站,并且该令牌将用于该其他用户。

从长远来看,我建议您考虑使用 JWT Auth。可以选择指定 userId,您可以切换用户。如果您想将您的应用移出开发人员沙箱并投入生产,您还必须使用真实身份验证。

【讨论】:

  • 感谢您的回复。我是网络开发新手,不熟悉 JWT 身份验证,但我搜索了一下,发现了一个示例,它似乎允许我在我的帐户中使用不同的用户发送信封:string authHeader = "{\"Username\":\"client-specific-email@fake.com\", \"Password\":\"fakepass\", \"IntegratorKey\":\"{GUID Value}\"}"; cfi.AddDefaultHeader("X-DocuSign-Authentication", authHeader); EnvelopesApi envelopesApi = new EnvelopesApi(cfi); 使用这个会有什么问题吗方法,特别是用明文发送密码?
  • 这是我们的传统身份验证方法。我强烈建议你不要使用它。它不那么安全并且有其他限制。我们正在努力鼓励所有人使用 OAuth。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-16
  • 1970-01-01
  • 2020-05-07
  • 1970-01-01
  • 2013-02-07
  • 1970-01-01
相关资源
最近更新 更多