DocuSignembedded式签名API

两部分问题:

我们正在尝试收到一个文档已经准备好签署的通知(我们对通知中提供的内容并不十分清楚)。 我们不想做电子邮件通知; 我们要closures这些。 我们假设embedded式签名的信息包含在非电子邮件通知中。 有没有一种简单的方法可以将推送通知发送到另一个说明文档已准备好发送的程序,如果是,那么跟踪通知以获取签名API POST并向DocuSign请求信息的最佳方法是?

在我们的testing中,我们已经能够通过API调用接收embedded式签名URL,但是我们需要一个页面到一个签名视图,其中标签不显示; 这意味着签名者不能签名,同样也适用于其他angular色。 在这个 SOpost里,大部分都是这个问题。 我在JavaScript中编码,而不是PHP。 我不知道这是否会在回答这个问题上有所作为,如果是的话,请在评论中提出更多的问题,我可以提供更多的信息。

这就是我们所得到的,但是我们应该得到一个带有签名选项卡的文档。 这就是我们所得到的,但是我们应该得到一个带有签名选项卡的文档

这是我们应该看到的。我们在手动登录到DS并单击该文档时看到此版本。 这是我们应该看到的。 我们在手动login到DS并单击该文档时看到此版本。

我们认为templateRoleName字段可能是导致这个问题的原因,但我们已经testing过,没有它,似乎没有什么区别。

这是我们从演练中使用的API调用的JS文件。

// // to run this sample // 1. copy the file in your own directory - say, example.js // 2. change "***" to appropriate values // 3. install async and request packages // npm install async // npm install request // 4. execute // node example.js // var async = require("async"), // async module request = require("request"), // request module email = "email@email.com", // your account email password = "password1", // your account password integratorKey = "DEEZ-010ebc24-01cc-143a-98c3-d9dbf7561cb1", // your account Integrator Key (found on Preferences -> API page) recipientName = "email@email.com", // recipient (signer) name templateId = "1C504DBA-B03F-4E57-B6BB-FD2ABD15837C", // provide valid templateId from a template in your account templateRoleName = "Signer", // template role that exists on template referenced above baseUrl = "", // we will retrieve this envelopeId = "bc14310c-57c0-4168-91be-1fb71ea24c1c"; // created from step 2 async.waterfall( [ ////////////////////////////////////////////////////////////////////// // Step 1 - Login (used to retrieve accountId and baseUrl) ////////////////////////////////////////////////////////////////////// function(next) { var url = "https://demo.docusign.net/restapi/v2/login_information"; var body = ""; // no request body for login api call // set request url, method, body, and headers var options = initializeRequest(url, "GET", body, email, password); // send the request... request(options, function(err, res, body) { if(!parseResponseBody(err, res, body)) { return; } baseUrl = JSON.parse(body).loginAccounts[0].baseUrl; next(null); // call next function }); }, ////////////////////////////////////////////////////////////////////// // Step 2 - Send envelope with one Embedded recipient (using clientUserId property) ////////////////////////////////////////////////////////////////////// function(next) { var url = baseUrl + "/envelopes"; var body = JSON.stringify({ "emailSubject": "DocuSign API call - Embedded Sending Example", "templateId": templateId, "templateRoles": [{ "email": email, "name": recipientName, "roleName": templateRoleName, "clientUserId": "1001" // user-configurable }], "status": "sent" }); // set request url, method, body, and headers var options = initializeRequest(url, "POST", body, email, password); // send the request... request(options, function(err, res, body) { if(!parseResponseBody(err, res, body)) { return; } // parse the envelopeId value from the response envelopeId = JSON.parse(body).envelopeId; next(null); // call next function }); }, ////////////////////////////////////////////////////////////////////// // Step 3 - Get the Embedded Signing View (aka the recipient view) ////////////////////////////////////////////////////////////////////// function(next) { var url = baseUrl + "/envelopes/" + envelopeId + "/views/recipient"; var method = "POST"; var body = JSON.stringify({ "returnUrl": "http://www.docusign.com/devcenter", "authenticationMethod": "email", "email": email, "userName": recipientName, "clientUserId": "1001", // must match clientUserId in step 2! }); // set request url, method, body, and headers var options = initializeRequest(url, "POST", body, email, password); // send the request... request(options, function(err, res, body) { if(!parseResponseBody(err, res, body)) return; else console.log("\nNavigate to the above URL to start the Embedded Signing workflow..."); }); } ]); //*********************************************************************************************** // --- HELPER FUNCTIONS --- //*********************************************************************************************** function initializeRequest(url, method, body, email, password) { var options = { "method": method, "uri": url, "body": body, "headers": {} }; addRequestHeaders(options, email, password); return options; } /////////////////////////////////////////////////////////////////////////////////////////////// function addRequestHeaders(options, email, password) { // JSON formatted authentication header (XML format allowed as well) dsAuthHeader = JSON.stringify({ "Username": email, "Password": password, "IntegratorKey": integratorKey // global }); // DocuSign authorization header options.headers["X-DocuSign-Authentication"] = dsAuthHeader; } /////////////////////////////////////////////////////////////////////////////////////////////// function parseResponseBody(err, res, body) { console.log("\r\nAPI Call Result: \r\n", JSON.parse(body)); if( res.statusCode != 200 && res.statusCode != 201) { // success statuses console.log("Error calling webservice, status is: ", res.statusCode); console.log("\r\n", err); return false; } return true; } 

编辑 在这里输入图像描述 这是DocuSign对这个模板的经典视图的收件人和路由部分,因为它是这个问题的原始发布

这是请求日志中的Created_RequestRecipientToken文件:

 POST https://demo.docusign.net:7802/restapi/v2/accounts/1037192/envelopes/deez83c9-b1fg-46ab-bo0c-e4576d952ac6/views/recipient Content-Length: 185 Connection: keep-alive Host: demo.docusign.net X-DocuSign-Authentication: {"Username":"sender@email.com","Password":"[omitted]","IntegratorKey":"[omitted]"} X-Forwarded-For: 543.155.155.55 {"returnUrl":"http://www.docusign.com/devcenter","authenticationMethod":"email","email":"sender@email.com","userName":"signer@email.com","clientUserId":"1002"} 201 Created Content-Type: application/json; charset=utf-8 { "url": "https://demo.docusign.net/Signing/startinsession.aspx?t=3c06d2a3-e521-4e52-b669-01e24c81c3bf" } 

这是来自请求日志的Created_CreateEnvelopeFromTemplateAndForms文件:

 POST https://demo.docusign.net:7802/restapi/v2/accounts/1037192/envelopes Content-Length: 272 Connection: keep-alive Host: demo.docusign.net X-DocuSign-Authentication: {"Username":"sender@email.com","Password":"[omitted]","IntegratorKey":"[omitted]"} X-Forwarded-For: 143.115.155.55 {"emailSubject":"DocuSign API call - Embedded Sending Example","templateId":"9AF271E2-D38E-4E61-8083-928A3CCE056C", "templateRoles":[{"email":"sender@email.com","name":"signer@email.com","roleName":"Signer","clientUserId":"1002"}], "status":"sent"} 201 Created Content-Type: application/json; charset=utf-8 { "envelopeId": "deez83c9-b1fg-46ab-bo0c-e4576d952ac6", "uri": "/envelopes/deez83c9-b1fg-46ab-bo0c-e4576d952ac6", "statusDateTime": "2015-07-08T15:56:23.5930000Z", "status": "sent" } 

这或这或这不是解决这个职位。

如果您希望收件人inheritance先前创build的所有选项卡和工作stream,则从模板发送签名请求时,必须将其与angular色相匹配。 要匹配它们,您需要使用roleName属性,该属性是通过您引用的templateRoleName示例节点脚本设置的。

首先,我想提一下,在没有选项卡的第一张截图中,收件人仍然可以通过将任何选项卡从左侧拖动到文档上进行签名。 这被称为自由格式签名Free Form Signing) ,他们select了哪些标签,多less,以及何时将它们放置在文档上,当它们不匹配模板angular色时。

我在代码中看到,您将模板angular色名称设置为值Signer ,只有当您在创build它时在Web控制台中为您指定了占位符(模板)angular色时,才会起作用。 将Web控制台中angular色名称的值更改为Signer ,它应该可以工作。