使用C# DocuSign SDK创建信封时遇CreateEnvelope调用错误排查
问题排查与修复方案
1. 未将AccessToken绑定到ApiClient
你成功获取了JWT令牌,但未将其注入apiClient的请求头中,导致所有请求都缺少授权信息,这是核心错误之一。修正初始化代码:
DocuSignClient apiClient = new(options.OAuthBasePath); // 设置为"demo.docusign.net" EnvelopesApi envelopesApi = new(apiClient); var accessToken = GetAccessToken(apiClient, options); // 新增:将令牌绑定到ApiClient的默认请求头 apiClient.Configuration.DefaultHeader.Add("Authorization", $"Bearer {accessToken}");
2. 签署者缺少必填的签署位置标签
DocuSign要求每个签署者必须指定至少一个签署位置(SignHere标签),否则信封无法创建——系统不知道让签署者在哪里签字。修改RequestSignature方法中的Signer构造逻辑:
Signers = request.Signers .Select((signer, idx) => new Signer() { Email = signer.Email, Name = signer.Name, RecipientId = idx.ToString(), RoutingOrder = idx.ToString(), // 新增:添加签署位置标签(示例为文档第一页左上角) Tabs = new Tabs { SignHereTabs = new List<SignHere> { new SignHere { DocumentId = "1", PageNumber = "1", XPosition = "100", YPosition = "100" } } } }) .ToList(),
3. 确保AccountId有效且正确获取
你的代码中使用了accountId变量,但未展示其来源。正确的做法是从JWT令牌响应中获取账号ID:
// 在GetAccessToken方法返回令牌后,添加以下代码获取账号ID var userInfo = apiClient.GetUserInfo(accessToken); var accountId = userInfo.Accounts.First().AccountId;
4. 添加异常捕获以获取详细错误信息
当前无描述错误是因为未捕获ApiException,这类异常包含DocuSign返回的完整错误详情,能快速定位问题:
public async Task<EnvelopeSummary> RequestSignature(SignatureRequest request, string accountId) { try { // 原信封构造代码... var result = await envelopesApi.CreateEnvelopeAsync(accountId, envelope); return result; } catch (ApiException ex) { // 输出详细错误信息用于排查 Console.WriteLine($"错误代码:{ex.ErrorCode}"); Console.WriteLine($"错误描述:{ex.Message}"); Console.WriteLine($"响应内容:{ex.ResponseBody}"); throw; } }
额外验证项
- 确认私钥文件格式正确(PEM格式,无多余空格或换行)
- 检查
options.UserId为正确的用户UUID(可在DocuSign开发者控制台查看) - 确保测试邮箱未被加入DocuSign拒收列表
内容的提问来源于stack exchange,提问作者string_loginUsername
相关产品推荐
相关产品推荐

