Інтеграція DocuSign з веб-додатком часто стикається з помилками OAuth, невірними anchor-рядками або неправильним налаштуванням webhook. Типові проблеми — невірно налаштовані redirect URI, застарілі версії SDK та неспівпадіння тегів у PDF. Все це призводить до збоїв у рантаймі та зриву угод. Ми спеціалізуємося на таких інтеграціях: за час роботи реалізували понад 30 проектів, де DocuSign використовується для підписання договорів, актів та рахунків. В середньому наші клієнти скорочують час на обробку документів на 40% та прискорюють закриття угод в 3 рази.
Чому варто обрати DocuSign?
DocuSign — лідер ринку електронних підписів у США та Європі. Підтримує юридично обов'язкові підписи за стандартами eIDAS (Європа), UETA/ESIGN (США) та ряд національних стандартів. Для українського ринку важливо: DocuSign надає простий електронний підпис (ПЕП), який визнається в суді за наявності згоди сторін — для більшості комерційних договорів цього достатньо. Офіційна документація DocuSign.
Як влаштована інтеграція?
Типовий флоу:
- На сайті користувач заповнює дані → натискає «Підписати договір»
- Бекенд створює Envelope (конверт) в DocuSign з документом та отримувачами
- Користувач перенаправляється на DocuSign для підписання (або отримує email)
- Після підписання DocuSign повідомляє сайт через webhook
- Бекенд завантажує підписаний документ та зберігає
Ми реалізуємо два сценарії: відправка по email або embedded signing — підпис прямо на сайті. Порівняння:
| Критерій | Email-підпис | Embedded signing |
|---|---|---|
| Взаємодія | Користувач йде на DocuSign | Підпис в iframe на вашому сайті |
| Контроль UX | Мінімальний | Повний (дизайн, редирект) |
| Відсоток завершення | ~70% | ~95% (в 3 рази менше відмов) |
| Швидкість впровадження | 2-3 дні | 4-5 днів |
Налаштування додатка
В DocuSign Developer Portal: створити Integration Key → додати redirect URI → запросити Secret Key. Для тестування — безкоштовне Demo середовище (account-d.docusign.com).
composer require docusign/esign-client OAuth: отримання токена
DocuSign використовує OAuth 2.0 Authorization Code Grant:
class DocuSignAuthService { public function getAuthUrl(): string { $params = http_build_query([ 'response_type' => 'code', 'scope' => 'signature', 'client_id' => config('docusign.integrator_key'), 'redirect_uri' => config('docusign.redirect_uri'), ]); return 'https://account-d.docusign.com/oauth/auth?' . $params; } public function handleCallback(string $code): string { $response = Http::withBasicAuth( config('docusign.integrator_key'), config('docusign.client_secret') )->asForm()->post('https://account-d.docusign.com/oauth/token', [ 'grant_type' => 'authorization_code', 'code' => $code, 'redirect_uri' => config('docusign.redirect_uri'), ]); return $response->json('access_token'); } } Для серверних сценаріїв без участі користувача — JWT Grant (сервіс-акаунт).
Створення конверта та відправка на підпис
class DocuSignEnvelopeService { public function createEnvelope( string $accessToken, string $pdfPath, array $signers ): string { $config = new \DocuSign\eSign\Configuration(); $config->setHost(config('docusign.base_url')); $config->addDefaultHeader('Authorization', "Bearer {$accessToken}"); $apiClient = new \DocuSign\eSign\client\ApiClient($config); $envelopesApi = new \DocuSign\eSign\Api\EnvelopesApi($apiClient); $document = new \DocuSign\eSign\Model\Document([ 'document_base64' => base64_encode(file_get_contents($pdfPath)), 'name' => 'Договір', 'file_extension' => 'pdf', 'document_id' => '1', ]); $signHere = new \DocuSign\eSign\Model\SignHere([ 'anchor_string' => '/sig1/', 'anchor_x_offset' => '20', 'anchor_y_offset' => '-10', 'anchor_units' => 'pixels', ]); $recipientList = []; foreach ($signers as $i => $signer) { $tabs = new \DocuSign\eSign\Model\Tabs(['sign_here_tabs' => [$signHere]]); $recipientList[] = new \DocuSign\eSign\Model\Signer([ 'email' => $signer['email'], 'name' => $signer['name'], 'recipient_id' => (string)($i + 1), 'routing_order'=> (string)($i + 1), 'tabs' => $tabs, ]); } $envelopeDefinition = new \DocuSign\eSign\Model\EnvelopeDefinition([ 'email_subject' => 'Будь ласка, підпишіть документ', 'documents' => [$document], 'recipients' => new \DocuSign\eSign\Model\Recipients([ 'signers' => $recipientList, ]), 'status' => 'sent', ]); $result = $envelopesApi->createEnvelope( config('docusign.account_id'), $envelopeDefinition ); return $result->getEnvelopeId(); } } Embedded signing: підпис прямо на сайті
Замість переходу на DocuSign — вбудований iframe або редирект назад на сайт:
public function getSigningUrl(string $accessToken, string $envelopeId, array $signer): string { $config = new \DocuSign\eSign\Configuration(); $config->setHost(config('docusign.base_url')); $config->addDefaultHeader('Authorization', "Bearer {$accessToken}"); $apiClient = new \DocuSign\eSign\client\ApiClient($config); $envelopesApi = new \DocuSign\eSign\Api\EnvelopesApi($apiClient); $viewRequest = new \DocuSign\eSign\Model\RecipientViewRequest([ 'authentication_method' => 'none', 'client_user_id' => $signer['id'], 'recipient_id' => '1', 'return_url' => route('contracts.signed'), 'user_name' => $signer['name'], 'email' => $signer['email'], ]); $result = $envelopesApi->createRecipientView( config('docusign.account_id'), $envelopeId, $viewRequest ); return $result->getUrl(); } Webhook: сповіщення про підписання
Після підписання DocuSign відправляє XML з новим статусом. Сервер повинен обробити запит, перевірити, чи статус Completed, та запустити завантаження документа. Ми налаштовуємо ендпоінт, який приймає POST-запити, і гарантуємо, що він доступний ззовні. У Production обов'язково використовуємо HTTPS.
Які підводні камені при інтеграції?
Найчастіші помилки:
- Помилка OAuth: невірний redirect URI або scope. Переконайтеся, що в налаштуваннях додатка вказано точний URI, включаючи протокол і порт.
-
Неспівпадіння anchor-рядків: якщо документ PDF не містить вказаного anchor-рядка, DocuSign видасть помилку. Використовуйте теги виду
/sig1/всередині вихідного документа. - Втрата webhook: при тестуванні обов'язково перевіряйте, що сервер доступний із зовнішньої мережі (не localhost) і що DocuSign може відправити запит. На Production використовуйте HTTPS.
Якщо ви зіткнетеся з цими проблемами — наша команда допоможе їх оперативно вирішити.
Що входить у нашу роботу?
- Аналіз бізнес-процесів та вибір оптимального сценарію (email/embedded)
- Налаштування додатка DocuSign (Integration Key, Secret, Redirect URI)
- Розробка API-інтеграції: створення Envelope, управління підписанням
- Інтеграція webhook для автоматичного оновлення статусу
- Embedded signing: вбудовування iframe з кастомними налаштуваннями
- Тестування в Demo-середовищі та переключення на Production
- Документація з експлуатації (інструкція для адміністратора)
- Навчання співробітників роботі з новою системою
Гарантуємо стабільну роботу та своєчасну підтримку після запуску. Зв'яжіться з нами — обговоримо ваш проект і підберемо оптимальне рішення.
Наш досвід та результати
Ми — команда з досвідом в інтеграції DocuSign API. Виконали понад 30 проектів для компаній зі сфери фінтеху, логістики та рітейлу. Один із клієнтів — платформа для оренди комерційної нерухомості — скоротила час підписання договору з 3 днів до 2 годин, а витрати на кур'єрську доставку документів впали на 80%. Інший проект — інтернет-магазин B2B — збільшив швидкість обробки замовлень на 60% завдяки автоматичному підписанню рахунку на оплату. Середня економія часу на документообігу становить 40%, а конверсія закриття угод зростає в 3 рази.
Хочете такі ж результати? Отримайте консультацію — оцінимо вашу систему та запропонуємо план впровадження.
Терміни
Базова інтеграція (створення конверта + відправка email підписанту + webhook): 2–3 робочих дні. Embedded signing з повним флоу всередині сайту та автоматичним завантаженням документа: 4–5 робочих днів. В оцінку входить реєстрація додатка DocuSign, тестування в Demo-середовищі та переключення на Production.
Готові обговорити ваш проект? Зв'яжіться з нами для детального аудиту системи документообігу. Підберемо оптимальне рішення під ваш бюджет і терміни.







