DocuSign权限问题:Shared Envelopes转Shared Access后无法查看信封
之前使用DocuSign的「Shared Envelopes」功能,可允许非信封发件人或收件人的特定用户在应用内正常查看信封,实现方式是调用SDK的Envelopes::createConsoleView方法,遵循官方嵌入UI的实现规范。
但DocuSign已弃用「Shared Envelopes」,改用新的「Shared Access」功能。将用户从旧功能迁移到新功能后,用户无法再查看信封,调用CreateConsoleView时触发如下错误:
Error calling CreateConsoleView: {"errorCode":"USER_NOT_ENVELOPE_SENDER_OR_RECIPIENT","message":"This user is not the sender or a recipient of the envelope. Only the sender or a recipient of the envelope may perform the requested operation."}
原实现代码:
//API - EnvelopeViews:createConsoleView public string GetEnvelopeViewUrl(string accountId, string envelopeId, string returnUrl) { var token = _tokenService.FetchToken(accountId); var apiClient = new DocuSignClient($"{token.Account.BaseUri}/restapi"); apiClient.Configuration.DefaultHeader.Add("Authorization", $"Bearer {token.Value}"); var envelopesApi = new EnvelopesApi(apiClient); var apiAccountId = _config["DocuSign:ApiAccountId"]; ConsoleViewRequest viewRequest = new ConsoleViewRequest { EnvelopeId = envelopeId, ReturnUrl = returnUrl }; var recipientView = envelopesApi.CreateConsoleView(apiAccountId, viewRequest); return recipientView.Url; }
明确这些用户并非信封的发件人或收件人,而这正是「Shared Access」的设计初衷,需要指导如何让这类用户像之前一样在应用中查看信封。
解决方案
核心原因
CreateConsoleView方法的权限校验仅针对信封的发件人或收件人,Shared Access用户不属于这两类角色,因此需要改用**CreateSenderView**方法,并配置正确的用户参数。
修改步骤
- 替换请求对象:将
ConsoleViewRequest改为SenderViewRequest - 添加用户标识:在请求中指定
UserId参数,传入该Shared Access用户的DocuSign唯一用户ID - 更换API方法:调用
envelopesApi.CreateSenderView而非CreateConsoleView
修改后的代码示例
//API - EnvelopeViews:createSenderView public string GetEnvelopeViewUrl(string accountId, string envelopeId, string returnUrl, string sharedUserId) { var token = _tokenService.FetchToken(accountId); var apiClient = new DocuSignClient($"{token.Account.BaseUri}/restapi"); apiClient.Configuration.DefaultHeader.Add("Authorization", $"Bearer {token.Value}"); var envelopesApi = new EnvelopesApi(apiClient); var apiAccountId = _config["DocuSign:ApiAccountId"]; SenderViewRequest viewRequest = new SenderViewRequest { EnvelopeId = envelopeId, ReturnUrl = returnUrl, UserId = sharedUserId // 指定Shared Access用户的DocuSign用户ID }; var senderView = envelopesApi.CreateSenderView(apiAccountId, viewRequest); return senderView.Url; }
额外注意事项
- 确保在DocuSign控制台中已为该Shared Access用户授予目标信封的「查看」权限
sharedUserId需传入用户在DocuSign系统中的唯一ID,可通过DocuSign Users API获取,或从账户管理界面导出
内容的提问来源于stack exchange,提问作者Baxter
相关产品推荐
相关产品推荐

