Интеграция 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.
Готовы обсудить ваш проект? Свяжитесь с нами для детального аудита системы документооборота. Подберём оптимальное решение под ваш бюджет и сроки.







