当前位置: 首页 > 知识库问答 >
问题:

Docusign嵌入式签名(MVC网站)-标签不显示,文档以自由形式签名

曾嘉瑞
2023-03-14

真正的问题是docusign允许我在没有签名的情况下“完成”,因为文档是以自由形式显示的-请在下面找到我的代码-我使用docusign REST API使用/envelets/{envelopeID}/views/recipition调用为预定义的文档模板创建嵌入式签名。我正在使用RESTSHARP连接到DocuSign。非常感谢你的帮助!

    protected const string IntegratorKey = "XX";
    protected const string Environment = "https://demo.docusign.net";
    protected const string templateRole = "Applicant";
    protected const string templateId = "XX"; 
    private static Logger logger = LogManager.GetCurrentClassLogger();
    protected const string AccountEmail = "XX@XX.com";
    protected const string AccountPassword = "***";
    private RestSharp.RestClient client = new RestClient();
    private RestSharp.RestRequest request;
    bool docuSignCallresult = false;

    //
    // GET: /Docusign/      
    public ActionResult launchDocusign(int id)
    {
        RestSettings.Instance.IntegratorKey = IntegratorKey;
        RestSettings.Instance.DocuSignAddress = Environment;
        RestSettings.Instance.WebServiceUrl = Environment + "/restapi/v2";

        Domain.Account currentAccount = null;
        using (var accountRepo = new AccountRepository())
        {
            currentAccount = accountRepo.AccountGet(id);
        }

        string RecipientEmail = currentAccount.Email;
        string RecipientName = currentAccount.FullName;

        Account docuSignAcct = GetDocusignAcctDetails();
        Envelope docuSignEnvelope = GetDocusignEnvelopeDetails(docuSignAcct,RecipientEmail,RecipientName);
        RecipientView rv = GetRecipientView(RecipientEmail, RecipientName);                                          

        client = new RestSharp.RestClient(Environment);
        request = new RestRequest("/restapi/{apiVersion}/accounts/{accountId}/envelopes/{envelopeId}/views/recipient");
        request.AddUrlSegment("apiVersion", "v2");
        request.AddUrlSegment("accountId", docuSignAcct.AccountId);
        request.AddUrlSegment("envelopeId", docuSignEnvelope.EnvelopeId);

        Mysite.Web.Models.DocuSignData.AuthenticationHeader header = new Mysite.Web.Models.DocuSignData.AuthenticationHeader();
        var jsonHeader = JsonConvert.SerializeObject(header);          

        request.AddHeader("X-DocuSign-Authentication", jsonHeader);
        request.Method = Method.POST;
        request.RequestFormat = DataFormat.Json;           
        request.AddJsonBody(rv);

        var response = client.Execute(request);          
        char[] charstoTrim = { '\r', '\n', ' ', '\'' };
        var json = response.Content.Trim(charstoTrim);
        var jo = JObject.Parse(json);
        var recipientUrl = jo["url"].ToString();
        return Redirect(recipientUrl);            
    }

    /// <summary>
    /// Get the recipient view to launch the docusign(Embedded signing experience)
    /// </summary>
    /// <param name="RecipientEmail"></param>
    /// <param name="RecipientName"></param>
    /// <returns></returns>

    private RecipientView GetRecipientView(string RecipientEmail, string RecipientName)
    {
        RecipientView rv = new RecipientView();
        rv.authenticationMethod = "email";
        rv.returnUrl = Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host + "/MySiteController/MySiteActionMethod";
        rv.email = RecipientEmail;
        rv.userName = RecipientName;
        rv.clientUserId = "1";

        return rv;

    }

    /// <summary>
    /// Create an Envelope using the template on docusign 
    /// </summary>
    /// <param name="acct"></param>
    /// <param name="recipientEmail"></param>
    /// <param name="recipientName"></param>
    /// <returns></returns>

    private Envelope GetDocusignEnvelopeDetails(Account acct,string recipientEmail,string recipientName)
    {
        Envelope envelope = new Envelope();
        envelope.Login = acct;
        envelope.Status = "sent";
        envelope.EmailSubject = "Testing";
        envelope.TemplateId = templateId;
        envelope.TemplateRoles = new TemplateRole[]
        {
            new TemplateRole()
            {
              email = recipientEmail,
              name = recipientName,
              roleName = templateRole,
              clientUserId = "1"
            }
        };

        try
        {
            docuSignCallresult = envelope.Create();
        }
        catch (Exception ex)
        {
            logger.Error("Login to docusign failed due to {0} and the exception generated is {2}", envelope.RestError.message, ex.Message);
        }

        return envelope;

    }

    /// <summary>
    /// Access Docusign Account information 
    /// </summary>
    /// <returns></returns>
    private Account GetDocusignAcctDetails()
    {
        Account docuSignAcct = new Account();
        docuSignAcct.Email = AccountEmail;
        docuSignAcct.Password = AccountPassword;

        try
        {
            docuSignCallresult = docuSignAcct.Login();
        }
        catch (Exception ex)
        {
            logger.Error("Login to docusign failed due to {0} and the exception generated is {2}", docuSignAcct.RestError.message, ex.Message);
        }
        return docuSignAcct;
    }
}

}

共有1个答案

赵智
2023-03-14

正如Jeff在评论中提到的,这很可能是由于您没有将收件人与模板上的模板(占位符)角色正确匹配而造成的。从您的代码来看,您似乎正在发送值applicity作为模板角色名称-这意味着您需要在Web控制台的模板中有一个名为applicity的角色。

例如,在下面的截图中,角色名为signer1:

要修复登录到控制台并将模板上的角色命名为“申请者”或它当前拥有的任何名称,请将其复制到代码中,并在API请求中发送。

 类似资料:
  • 我使用的是嵌入式签名代码配方中的代码,但从C#转换为VB.NET,代码使用的是Docusign API nuget。CreateEnvelope返回user_lacks_permissions。我已经通过了我的权限,检查了一切。我登录的用户是帐户管理员,似乎已经检查了所有权限。我将收件人电子邮件设置为实际的收件人电子邮件(不同于我的管理员帐户),尽管它是嵌入式签名,我不知道这是否是问题所在。我确实

  • 两部分问题: 我们正在尝试接收一个文档准备签名的通知(我们不完全清楚通知中提供了什么)。我们不想做电子邮件通知;我们想关掉那些。我们假定嵌入签名的信息包含在非电子邮件通知中。是否有一种简单的方法向另一个程序发送推送通知,说明文档已经准备好发送,如果是这样,是否最好的方法跟踪通知,让签名API发布并从DocuSign请求信息? 在我们的测试中,我们已经能够通过API调用接收嵌入的签名URL,但它将我

  • 我的要求是:在网站上,用户可以点击[我们的]平台上的签名按钮,直接弹出要签名的文档并在文档上签名 目前,根据DocuSign嵌入式发送和签名文档,我们使用JWT admin授权方法获取访问权\uu用户可以通过文档“envelopeviews:create recipient”打开并签署文档URL, 问题: 如果我们直接复制DocuSign URL并在浏览器中打开它,页面将正确显示要签名的文档页面。

  • 然后发送它以获取签名视图的收件人url: 有什么想法吗?提前谢了。

  • 我们在我们的应用程序中使用上述API进行嵌入式签名,其中应用程序将收件人重定向到由该API返回的URL。 现在主要的问题是,如果用户正在使用IE11,而这个API返回的URL超出了IE11 URL限制,会发生什么,这个变化对IE11用户是否有效?如果没有,那么IE11用户如何使用嵌入式签名功能?

  • 我试图使用DocuSign REST API创建一个简单的场景,如下所示: 我有2个签名者,Signer1和Signer2 将文档发送到Signer1以检查和签名 签名者2被通知并检查文档并在签名者1签名的地方签名 除了Signer1查看文档时,他们会看到Signer2的标签,并必须为Signer2签名之外,我还可以按顺序工作。文档中的选项卡有不同的名称,我正在将相关的AnchorString添加