真正的问题是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;
}
}
}
正如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添加