我是docusign api的新手。我正在尝试使用docu sign api在我的应用程序中实现emebbed docment签名。我的要求是需要在单个文件上签署两个人。我已经看到了一些例子,我得到了单用户签名的网址,但我没有得到正确的解决方案。请帮我。提前谢谢
这是我的示例代码
var docusign = require('docusign-esign');
var async = require('async');
var integratorKey = '*************',
email = '***********',
password = '***********',
recipientName = '*********',
recipientEmail = '**********';
recipientName1 = '***********',
recipientEmail1 = '*************';
var basePath = "https://demo.docusign.net/restapi";
const SignTest1File = "sample.pdf";
var envelopeId = '';
var apiClient = new docusign.ApiClient();
apiClient.setBasePath(basePath);
var creds = JSON.stringify({
Username: email,
Password: password,
IntegratorKey: integratorKey
});
apiClient.addDefaultHeader("X-DocuSign-Authentication", creds);
docusign.Configuration.default.setDefaultApiClient(apiClient);
async.waterfall([
function login (next) {
var authApi = new docusign.AuthenticationApi();
var loginOps = new authApi.LoginOptions();
loginOps.setApiPassword("true");
loginOps.setIncludeAccountIdGuid("true");
authApi.login(loginOps, function (err, loginInfo, response) {
if (err) {
return next(err);
}
if (loginInfo) {
var loginAccounts = loginInfo.getLoginAccounts();
console.log("LoginInformation: " + JSON.stringify(loginAccounts));
next(null, loginAccounts);
}
});
},
function createAndSendEnvelopeWithEmbeddedRecipient (loginAccounts, next) {
var fileBytes = null;
try {
var fs = require('fs'),
path = require('path');
fileBytes = fs.readFileSync(path.resolve('controllers/'+SignTest1File));
} catch (ex) {
console.log("Exception: " + ex);
}
var envDef = new docusign.EnvelopeDefinition();
envDef.setEmailSubject("Please sign this doc");
var doc = new docusign.Document();
var base64Doc = new Buffer(fileBytes).toString('base64');
doc.setDocumentBase64(base64Doc);
doc.setName("sample.pdf");
doc.setDocumentId("1");
var docs = [];
docs.push(doc);
envDef.setDocuments(docs);
var signer = new docusign.Signer();
signer.setName(recipientName);
signer.setEmail(recipientEmail);
signer.setRecipientId("1");
signer.setClientUserId("1234");
var signHere = new docusign.SignHere();
signHere.setDocumentId("1");
signHere.setPageNumber("1");
signHere.setRecipientId("1");
signHere.setXPosition("100");
signHere.setYPosition("100");
var signHereTabs = [];
signHereTabs.push(signHere);
var tabs = new docusign.Tabs();
tabs.setSignHereTabs(signHereTabs);
signer.setTabs(tabs);
envDef.setRecipients(new docusign.Recipients());
envDef.getRecipients().setSigners([]);
envDef.getRecipients().getSigners().push(signer);
envDef.setStatus("sent");
var envelopesApi = new docusign.EnvelopesApi();
envelopesApi.createEnvelope(loginAccounts[0].accountId, envDef, null, function(error, envelopeSummary, response) {
if (error) {
return next(error);
}
if (envelopeSummary) {
console.log("EnvelopeSummary: " + JSON.stringify(envelopeSummary));
envelopeId = envelopeSummary.envelopeId;
next(null, envelopeId, loginAccounts);
}
});
},
function requestRecipientView (envelopeId, loginAccounts, next) {
const returnUrl = "http://www.docusign.com/developer-center";
var recipientView = new docusign.RecipientViewRequest();
recipientView.setUserName(recipientName);
recipientView.setEmail(recipientEmail);
recipientView.setReturnUrl(returnUrl);
recipientView.setAuthenticationMethod("email");
recipientView.setClientUserId("1234");
var envelopesApi = new docusign.EnvelopesApi();
envelopesApi.createRecipientView(loginAccounts[0].accountId, envelopeId, recipientView, function(error, viewUrl, response) {
if (error) {
return next(error);
}
if (viewUrl) {
console.log("RecipientViewUrl = " + JSON.stringify(viewUrl));
next()
}
});
}
], function end (error) {
if (error) {
console.log('Error: ', error);
process.exit(1);
}
process.exit();
});
答案 0 :(得分:2)
在您的代码中,您有
envDef.getRecipients().getSigners().push(signer);
目前你只推动这个系列中的一个签名者。使用name, email, routingorder and clientUserId and its associated tabs
创建新签名者。然后将这个新的签名者也推送到签名者集合,这样你就可以在一个信封中添加多个签名者。在创建嵌入式签名URL时,您需要正确引用要为其创建URL的名称,电子邮件和clientUserId,另请注意,如果工作流未到达该签名者,则无法为收件人生成收件人URL。