我正在尝试一个简单的示例来获取在 docuSign 中签名的 pdf,但是在尝试获取 ViewUrl 来重定向用户时遇到了 UNKNOWN_ENVELOPE_RECIPIENT 错误。
这是我用来创建带有 pdf 文档的信封的代码。
string recipientName = "Tester";
string recipientEmail = "test@me.com";
string accountId = AuthenticateDocuSign();
byte[] fileBytes = File.ReadAllBytes(@"C:\temp\test.pdf");
EnvelopeDefinition envDef = new EnvelopeDefinition();
envDef.EmailSubject = "[DocuSign C# SDK] - Please sign this doc";
// Add a document to the envelope
DocuSign.eSign.Model.Document doc = new DocuSign.eSign.Model.Document();
doc.DocumentBase64 = System.Convert.ToBase64String(fileBytes);
doc.Name = "TestFile.pdf";
doc.DocumentId = "1";
envDef.Documents = new List<DocuSign.eSign.Model.Document>();
envDef.Documents.Add(doc);
// Add a recipient to sign the documeent
Signer signer = new Signer();
signer.Email = recipientEmail;
signer.Name = recipientName;
signer.RecipientId = "1";
// Create a |SignHere| tab somewhere on the document for the recipient to sign
signer.Tabs = new Tabs();
signer.Tabs.SignHereTabs = new List<SignHere>();
SignHere signHere = new SignHere();
signHere.DocumentId = "1";
signHere.PageNumber = "1";
signHere.RecipientId = "1";
signHere.XPosition = "100";
signHere.YPosition = "100";
signer.Tabs.SignHereTabs.Add(signHere);
envDef.Recipients = new Recipients();
envDef.Recipients.Signers = new List<Signer>();
envDef.Recipients.Signers.Add(signer);
// set envelope status to "sent" to immediately send the signature request
envDef.Status = "sent";
// |EnvelopesApi| contains methods related to creating and sending Envelopes (aka signature requests)
EnvelopesApi envelopesApi = new EnvelopesApi();
EnvelopeSummary envelopeSummary = envelopesApi.CreateEnvelope(accountId, envDef);
RecipientViewRequest viewOptions = new RecipientViewRequest()
{
ReturnUrl = returnURL,
ClientUserId = "1000", // must match clientUserId set in step #2!
AuthenticationMethod = "email",
UserName = recipientName,
Email = recipientEmail,
};
ViewUrl recipientView = envelopesApi.CreateRecipientView(accountId, envelopeSummary.EnvelopeId, viewOptions); // EXCEPTION!
Run Code Online (Sandbox Code Playgroud)
完整错误:
DocuSign.eSign.Client.ApiException 未由用户代码处理
ErrorCode=400 HResult=-2146233088 Message=调用 CreateRecipientView 时出错: { "errorCode": "UNKNOWN_ENVELOPE_RECIPIENT",
"message": "您识别的收件人不是以下的有效收件人指定的信封。” }
正如 Luis 在上面的评论中指出的那样,如果您希望随后能够检索该收件人的“查看”URL,则 必须在创建信封请求中为签名者指定clientUserId属性:
signer.clientUserId = 1000;
Run Code Online (Sandbox Code Playgroud)
您可以将clientUserId属性设置为您选择的任何值 - 我在本示例中使用了1000 ,因为这是您的代码在“发布收件人查看”请求中使用的值。
ClientUserId = "1000", // must match clientUserId set in step #2!
Run Code Online (Sandbox Code Playgroud)
(这您在“发布收件人查看”请求中指定的clientUserId、name和email属性值必须与您在“创建信封”请求中为收件人指定的值完全匹配。)