Docusign: получение встроенного представления получателя без templateID

У меня есть сценарий, в котором мне нужно, чтобы пользователи заходили на веб-сайт для загрузки документа, а другой пользователь должен подписать этот документ.

Что я сделал до сих пор:

Шаг 1. Войдите с помощью электронной почты, пароля и ключа интеграции

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
        });
    },

Я получаю действительный ответ, включая действительный идентификатор учетной записи.

Шаг 2. Теперь я загружаю документ через этот API

function(next) {    
        var url = baseUrl + "/envelopes";
        // following request body will place 1 signature tab 100 pixels to the right and
        // 100 pixels down from the top left of the document that you send in the request
        var body = {
            "recipients": {
                "signers": [{
                    "email": recipientEmail,
                    "name": recipientName,
                    "recipientId": 1,
                    "tabs": {
                        "signHereTabs": [{
                            "xPosition": "100",
                            "yPosition": "100",
                            "documentId": "1",
                            "pageNumber": "1"                                                                                   
                        }]
                    }
                }]
            },
            "emailSubject": 'checkkkkkkkk API !!!!!',
            "documents": [{
                "name": "abc.pdf",
                "documentId": 1,
            }],
            "status": "sent",
        };
        
        // set request url, method, body, and headers
        var options = initializeRequest(url, "POST", body, email, password);
    
        // change default Content-Type header from "application/json" to "multipart/form-data"
        options.headers["Content-Type"] = "multipart/form-data";
        
        // configure a multipart http request with JSON body and document bytes
        options.multipart = [{
                    "Content-Type": "application/json",
                    "Content-Disposition": "form-data",
                    "body": JSON.stringify(body),
                }, {
                    "Content-Type": "application/pdf",
                    'Content-Disposition': 'file; filename="' + documentName + '"; documentId=1',
                    "body": fs.readFileSync(documentName),
                }
        ];
 
        // send the request...
        request(options, function(err, res, body) {
            parseResponseBody(err, res, body);
            envelopeId = JSON.parse(body).envelopeId;
            console.log(envelopeId);
            next(null);
        });

    }, 

Здесь в ответ я получаю действительный EnvelopeID (точно!!)

Шаг 3. Теперь я хочу, чтобы другой пользователь (как указано выше, адрес электронной почты/имя получателя) подписал этот документ в режиме встраивания на моем веб-сайте. Для этого я использую этот API http://iodocs.docusign.com/APIWalkthrough/embeddedSigning#js, но для этого требуется идентификатор шаблона и роль, которые нам не возвращены. с помощью указанных выше API. это требует ручных усилий для загрузки шаблона и получения идентификатора шаблона, что невозможно в моем сценарии, потому что я хочу, чтобы все было автоматически.

Может ли кто-нибудь указать мне, как действовать со встроенной подписью.

DocuSignAPI


person user3359876    schedule 14.03.2014    source источник


Ответы (2)


Вот ПОЛНЫЙ рабочий образец в Node.js того, что вы пытаетесь выполнить. Вам нужно объединить пошаговое руководство по API, которое отправляет запрос подписи документа (чтобы он не с помощью шаблона) и объедините его с третьим вызовом в пошаговом руководстве по API Embedded Signing.

Чтобы добавить встроенного получателя в конверт, вам необходимо установить для его свойства clientUserId любое настраиваемое пользователем значение. Например, вы можете установить только «1», или «1234», или «1a2b3c». В приведенном ниже коде я установил для него значение «1001», чтобы подчеркнуть, что вы можете установить его на все, что захотите, вам просто нужно следить за этим. Одно важное примечание. Вы должны убедиться, что при запросе встроенного URL-адреса для подписи для получателя вы ссылаетесь на тот же самый clientUserId, который вы установили при первоначальном добавлении их в конверт (1001 в приведенном ниже примере). .

Вот код:

// To run this sample
//  1. Copy the file to your local machine and give .js extension (i.e. 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
        fs = require("fs");         // fs module

var     email = "***",              // your account email
        password = "***",           // your account password
        integratorKey = "***",      // your Integrator Key (found on the Preferences -> API page)
        recipientName = "***",      // recipient (signer) name
        recipientEmail = "***",     // recipient email address  
        documentName = "***",       // copy document with this name into same directory!
        envelopeId = "",            // will retrieve this from second api call
        baseUrl = "";               // retrieved through the Login call

async.waterfall(
  [
    /////////////////////////////////////////////////////////////////////////////////////
    // Step 1: Login (used to retrieve your 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: Create Envelope with Embedded Recipient (need to set |clientUserId| property)
    /////////////////////////////////////////////////////////////////////////////////////
    function(next) {    
        var url = baseUrl + "/envelopes";
        // following request body will place 1 signature tab 100 pixels to the right and
        // 100 pixels down from the top left of the document that you send in the request
        var body = {
            "recipients": {
                "signers": [{
                    "email": recipientEmail,
                    "name": recipientName,
                    "recipientId": 1,
                    "clientUserId": "1001",     //Required for embedded recipient
                    "tabs": {
                        "signHereTabs": [{
                            "xPosition": "100",
                            "yPosition": "100",
                            "documentId": "1",
                            "pageNumber": "1"                                                                                   
                        }]
                    }
                }]
            },
            "emailSubject": 'DocuSign API - Signature Request on Document Call',
            "documents": [{
                "name": documentName,
                "documentId": 1,
            }],
            "status": "sent"
        };

        // set request url, method, body, and headers
        var options = initializeRequest(url, "POST", body, email, password);

        // change default Content-Type header from "application/json" to "multipart/form-data"
        options.headers["Content-Type"] = "multipart/form-data";

        // configure a multipart http request with JSON body and document bytes
        options.multipart = [{
                    "Content-Type": "application/json",
                    "Content-Disposition": "form-data",
                    "body": JSON.stringify(body),
                }, {
                    "Content-Type": "application/pdf",
                    'Content-Disposition': 'file; filename="' + documentName + '"; documentId=1',
                    "body": fs.readFileSync(documentName),
                }
        ];

        // send the request...
        request(options, function(err, res, body) {
            if(!parseResponseBody(err, res, body)) {
                return;
            }
            envelopeId = JSON.parse(body).envelopeId;
            next(null); // call next function
        });
    }, // end function    

    /////////////////////////////////////////////////////////////////////////////////////
    // Step 3: Generate the Embedded Signing URL
    /////////////////////////////////////////////////////////////////////////////////////

    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;
}
person Ergin    schedule 14.03.2014
comment
спасибо... но что такое clientuserID и чем он отличается от ReceiverId? - person user3359876; 18.03.2014
comment
Свойство clientUserId аналогично получателю, но вместо этого используется для указания того, что этот получатель является встроенным (или захваченным). - person Ergin; 18.03.2014
comment
Как всегда, дополнительную информацию можно найти в документации по API: docusign.com/developer-center/documentation< /а> - person Ergin; 18.03.2014

Если вы хотите, чтобы подписывающее лицо имело доступ к конверту через ваш сайт, то при создании конверта подписывающее лицо должно быть указано как «встроенное/захваченное». Это делается путем установки свойства clientUserId объекта Recipient в запросе API Create Envelope. (Для этого свойства можно установить любое значение, которое вы выберете — максимальная длина 100 символов, но ваше приложение должно отслеживать его, потому что оно понадобится вам для запуска сеанса подписи получателя, когда он заходит на ваш сайт.)

Итак, это работает так:

  1. Ваше приложение создает конверт с помощью API-запроса Создать конверт, устанавливая свойство clientUserId для получателя (подписавшего), чтобы указать, что они будут получать доступ к конверту через ваше приложение. Для примера предположим, что вы установили для clientUserId значение 1234.

    "signers": [{ "email": "[email protected]", "name": "Jane Doe", "recipientId": 1, "clientUserId": 1234 }]

  2. Ваше приложение уведомляет подписывающую сторону (по электронной почте), что ее подпись требуется на документе(ах); электронное письмо содержит информацию о том, как они могут получить доступ к конверту (т.е. подписать документ(ы)) через ваш сайт. (DocuSign не будет отправлять электронные письма с приглашением на подписание получателям, которые указаны как встроенные/привязанные.)

  3. Подписавшая сторона следует указаниям в электронном письме, отправленном им из вашего приложения, и посещает ваш сайт, чтобы подписать свои документы. Когда подписывающее лицо готово к подписанию, ваше приложение отправляет API-запрос «POST Recipient View», чтобы получить URL-адрес, который запустит сеанс подписания DocuSign для указанного получателя. Запрос выглядит так:

.

POST https://{{env}}.docusign.net/restapi/{{version}}/accounts/{{acctId}}/envelopes/{{envelopeId}}/views/recipient

{
     "authenticationMethod": "Email",
     "clientUserId": "1234",
     "userName": "Jane Doe",
     "email": "[email protected]",
     "returnUrl": "URLInYourAppThatDocuSignRedirectsToWhenDocuSignSessionIsCompleted"
}

Ответ на этот запрос будет содержать URL-адрес, который ваше приложение может использовать для запуска сеанса подписи получателя.

person Kim Brandl    schedule 14.03.2014