DocuSign — це платформа для електронних підписів, яка дозволяє користувачам безпечно підписувати, надсилати та керувати документами онлайн. Вона допомагає бізнесам та окремим особам усунути необхідність у фізичних документах, надаючи юридично обов'язкові електронні підписи.
А що, якщо ми хочемо завантажити документи в Oracle Visual Builder, надіслати їх в DocuSign для підписання, а потім завантажити підписаний документ назад в Oracle Visual Builder? Давайте крок за кроком розглянемо цей процес.
Ми будемо використовувати DocuSign Node.js SDK для виконання трьох API викликів:
- Створення Конверту
- Отримання статусу Конверту
- Завантаження підписаного документа
Щоб використовувати будь-яке з цих API, спочатку потрібно отримати токен аутентифікації JWT.
Для цього вам знадобляться DOCUSIGNCLIENTID, DOCUSIGNUSERID та приватний ключ.
Спочатку перейдіть за посиланням: https://developers.docusign.com/ і створіть обліковий запис розробника, якщо у вас його ще немає.
Далі перейдіть у розділ "My Apps & Keys".
Прокрутіть вниз і під розділом “Integrations” знайдете “Apps & Keys”.
User ID - це ваш “DOCUSIGNUSERID”.
Після цього натискайте на "Add App and Integration Key".
Ви побачите “Integration Key”, який є вашим “DOCUSIGNCLIENTID”.
Далі, під “Service Integration” натискайте кнопку “Generate RSA” і збережіть ваш приватний ключ у файл .pem на вашому локальному комп'ютері.
Останнє, що вам потрібно - це базова URL-адреса, яка виглядає так: “https://demo.docusign.net/restapi”.
І тепер ви готові до автентифікації за допомогою JWT.
const authenticateWithJWT = async () => {
const apiClient = new docusign.ApiClient();
apiClient.setBasePath(process.env.DOCUSIGN_BASE_URL);
const privateKey = fs.readFileSync('./private.pem', 'utf8');
try {
const results = await apiClient.requestJWTUserToken(
process.env.DOCUSIGN_CLIENT_ID,
process.env.DOCUSIGN_USER_ID,
"signature",
privateKey,
3600
);
apiClient.addDefaultHeader("Authorization", `Bearer ${results.body.access_token}`);
return apiClient;
} catch (error) {
console.error("Authentication error:", error);
throw error;
}
};
Для створення конверту в DocuSign після генерації токена:
const createEnvelope = async (apiClient,envelopeBody) => {
const envelopesApi = new docusign.EnvelopesApi(apiClient);
const envelopeDefinition = envelopeBody;
try {
const envelopeSummary = await envelopesApi.createEnvelope(process.env.DOCUSIGN_ACCOUNT_ID, {
envelopeDefinition,
});
const envelopeId = envelopeSummary.envelopeId;
return {"envelopeId" : envelopeId};
} catch (error) {
console.error("Error creating envelope:", error);
throw error;
}
};
/* Приклад тіла конверту */
/* {
"documents": [
{
"documentBase64": //ваш документ у форматі base64,
"documentId": "1",
"fileExtension": "pdf",
"name": "document"
}
],
"emailSubject": "Test From Nodejs",
"recipients": {
"signers": [
{
"email": //електронна пошта підписанта,
"name": //ім'я підписанта,
"recipientId": "1"
}
]
},
"status": "sent"
}
*/
Щоб отримати підписаний документ з DocuSign:
async function getDocumentFromEnvelope(envelopeId,documentId) {
const { DOCUSIGN_ACCOUNT_ID } = process.env;
// Ініціалізація API клієнта
const apiClient = await authenticateWithJWT();
// Ініціалізація API Envelopes
const envelopesApi = new docusign.EnvelopesApi(apiClient);
try {
// Отримуємо документ з конверту
const documentBytes = await envelopesApi.getDocument(
DOCUSIGN_ACCOUNT_ID, // Ваш ідентифікатор облікового запису
envelopeId, // Ідентифікатор конверту
documentId // Ідентифікатор документа (зазвичай '1' для першого документа)
);
const base64String = documentBytes.toString('base64');
return {"documentBase64" : base64String};
} catch (error) {
console.error('Error retrieving document:', error.response?.text || error.message);
return 'Error retrieving document:', error.response?.text || error.message;
}
}
Щоб отримати статус конверту з DocuSign:
async function envelopeStatus(envelopeId) {
try {
// Автентифікація за допомогою JWT
const apiClient = await authenticateWithJWT();
// Отримуємо ідентифікатор облікового запису DocuSign
const { DOCUSIGN_ACCOUNT_ID } = process.env;
// Ініціалізація API Envelopes
const envelopesApi = new docusign.EnvelopesApi(apiClient);
// Отримання статусу конверту
const envelope = await envelopesApi.getEnvelope(DOCUSIGN_ACCOUNT_ID, envelopeId);
console.log(`Статус конверту: ${envelope.status}`);
// Відправка відповіді
return { status: envelope.status };
} catch (error) {
console.error('Помилка при отриманні статусу конверту:', error.response?.text || error.message);
// Відправка відповіді про помилку
return { status: 'Не вдалося отримати статус конверту' }
}
}
Тепер ви можете створити з’єднання сервісів у вашому Oracle Visual Builder, додати ваші API, а потім за допомогою File Picker завантажити документ, перетворити його в base64 та відправити до DocuSign.
Сподіваюся, це було корисно 😄
Перекладено з: Integrating DocuSign with Oracle Visual Builder