Руководитель интернет-магазина тратил до 2 часов на согласование договоров с клиентами — после интеграции с SignNow время сократилось до 5 минут. Подключение электронной подписи к сайту часто тормозится сложной настройкой JWT, SDK и длительных согласований. SignNow от airSlate выделяется простым REST API и доступной ценой. Наша команда за время работы реализовала более 30 таких интеграций — от небольших интернет-магазинов до корпоративных порталов. Средняя экономия времени на подписание — до 70%. Свяжитесь с нами для консультации — мы подготовим решение под ваш проект.
Как SignNow снижает затраты на документооборот?
SignNow не требует покупки SDK и сложной инфраструктуры. Достаточно OAuth 2.0 и прямых REST-запросов. По данным официального REST API SignNow, система выдерживает до 1000 запросов в минуту — хватает для любого среднего бизнеса. Затраты на интеграцию окупаются за 2–3 месяца за счёт сокращения ручного труда. Сравните: ручное согласование договора в среднем занимает 2 часа, с SignNow — 5–10 минут.
Как настроить аутентификацию в SignNow?
SignNow использует OAuth 2.0 с грантом client_credentials для серверных интеграций. Это проще, чем у DocuSign — не нужен JWT или Legacy Header. Вот как мы получаем токен:
class SignNowAuthService { private string $baseUrl = 'https://api.signnow.com'; public function getToken(): string { $response = Http::withBasicAuth( config('services.signnow.client_id'), config('services.signnow.client_secret') )->asForm()->post("{$this->baseUrl}/oauth2/token", [ 'grant_type' => 'client_credentials', 'scope' => '*', ]); $token = $response->json('access_token'); Cache::put('signnow_token', $token, now()->addMinutes(55)); return $token; } public function token(): string { return Cache::get('signnow_token') ?? $this->getToken(); } } Токен живёт 3600 секунд, мы кешируем его с запасом в 5 минут. Для операций от имени конкретного пользователя используется Password Grant, но в большинстве кейсов достаточно client_credentials.
Загрузка документа и простановка полей
После аутентификации загружаем PDF (максимальный размер — 50 МБ) и добавляем поля подписей. SignNow поддерживает smart fields — если в PDF есть анкоры вида [[sig|req|signer1]], поля подписи ставятся автоматически. Это удобнее, чем вычислять координаты вручную.
class SignNowDocumentService { public function __construct(private SignNowAuthService $auth) {} public function uploadDocument(string $pdfPath, string $fileName): string { $response = Http::withToken($this->auth->token()) ->attach('file', file_get_contents($pdfPath), $fileName) ->post('https://api.signnow.com/document'); return $response->json('id'); } public function addSignatureFields(string $documentId, array $signers): void { $fields = []; $roleIndex = 0; foreach ($signers as $signer) { $fields[] = [ 'type' => 'signature', 'role' => $signer['role'] ?? "Signer {$roleIndex}", 'role_id' => (string)$roleIndex, 'required' => true, 'height' => 40, 'width' => 200, 'x' => 100, 'y' => 600, 'page_number' => 0, ]; $roleIndex++; } Http::withToken($this->auth->token()) ->put("https://api.signnow.com/document/{$documentId}", ['fields' => $fields]); } } Мы используем анкоры — это сокращает время интеграции и исключает ошибки позиционирования.
Как отправить документ на подпись и получить статус?
Для отправки приглашения подписантам используем метод invite. SignNow позволяет настроить напоминания и срок действия:
public function sendInvite(string $documentId, array $signers): string { $recipients = []; foreach ($signers as $index => $signer) { $recipients[] = [ 'email' => $signer['email'], 'role' => $signer['role'] ?? "Signer {$index}", 'role_id' => (string)$index, 'order' => $index + 1, 'reminder' => [ 'remind_before' => 0, 'remind_after' => 3, 'remind_repeat' => 2, ], 'expiration_days' => 30, 'subject' => 'Пожалуйста, подпишите документ', 'message' => "Здравствуйте, {$signer['name']}! Прошу вас подписать прикреплённый документ.", ]; } $response = Http::withToken($this->auth->token()) ->post("https://api.signnow.com/document/{$documentId}/invite", [ 'to' => $recipients, 'from' => config('services.signnow.sender_email'), ]); return $response->json('status'); } После подписания SignNow присылает вебхук. Мы регистрируем событие document.complete и обрабатываем его:
// Регистрация вебхука Http::withToken($this->auth->token()) ->post('https://api.signnow.com/api/v2/events', [ 'event' => 'document.complete', 'entity_id' => $documentId, 'action' => 'callback', 'callback_url' => route('webhooks.signnow'), ]); // Обработчик public function handleSignNowWebhook(Request $request): Response { $data = $request->json()->all(); if (($data['event'] ?? '') === 'document.complete') { $documentId = $data['meta']['document_id']; DownloadSignedDocumentJob::dispatch($documentId); } return response()->noContent(); } Embedded signing: подпись без перехода на SignNow
Если нужно, чтобы клиент подписал документ, не покидая ваш сайт, используем embedded signing — получаем ссылку (действует 60 минут) и встраиваем её в iframe.
public function getSigningLink(string $documentId, string $email): string { $response = Http::withToken($this->auth->token()) ->post("https://api.signnow.com/link", [ 'document_id' => $documentId, ]); return $response->json('url'); } Это работает для большинства браузеров, но требует обработки postMessage после завершения.
Почему стоит выбрать embedded signing?
Embedded signing исключает переходы на сторонний сервис — клиент остаётся на вашем сайте. Это повышает доверие и конверсию. Ссылка действительна 60 минут, после подписания отправляется postMessage, который ловит ваша страница. Если нужна более глубокая кастомизация, SignNow предоставляет возможность настроить цветовую схему iframe.
Сравнение SignNow и DocuSign
| Критерий | SignNow | DocuSign |
|---|---|---|
| API | Чистый REST, без обязательного SDK | Есть SDK, но сложнее OAuth |
| Embedded signing | Есть, но ограниченный UI | Расширенный, с кастомизацией |
| Smart fields | Анкоры в PDF | Поддержка полей через API |
| Цена | Дешевле для SMB | Дороже, но больше функций |
| Хранение документов | Нет фискального хранилища | Есть встроенный аудит-трек |
SignNow выгоднее для среднего бизнеса благодаря простоте API и ценообразованию. Средняя стоимость подписания одного документа в 2-3 раза ниже.
Типичные ошибки при интеграции
- Не кешировать токен — каждый запрос получает новый, что замедляет работу.
- Игнорировать вебхуки — без них не узнаете, когда документ подписан.
- Жёстко задавать координаты полей — лучше использовать анкоры.
- Не обрабатывать ошибки — SignNow возвращает 401 при просрочке токена, 404 при удалённом документе.
Этапы нашей работы
| Этап | Длительность | Результат |
|---|---|---|
| Анализ | 1 день | Спецификация интеграции |
| Настройка OAuth | 0.5 дня | Рабочий токен с кешированием |
| Загрузка и поля | 1 день | Загрузка PDF, smart fields |
| Отправка и вебхуки | 0.5 дня | Приглашения, обработка событий |
| Embedded signing (если нужно) | 1 день | Iframe с подписью |
| Тестирование | 0.5 дня | Отладка, обработка ошибок |
Что входит в нашу работу по интеграции
- Настройка OAuth и кеширования токенов
- Реализация загрузки документов и добавления smart fields
- Разработка механизма отправки invites и обработки вебхуков
- Интеграция embedded signing (если требуется)
- Написание тестов и документации
Сроки: базовая интеграция — 2–3 рабочих дня, с embedded signing — 3–4 дня. Стоимость рассчитывается индивидуально.
Получите консультацию — оценим ваш проект и предложим решение под ключ. Опыт нашей команды — десятки интеграций электронной подписи. Гарантируем надёжность и соблюдение сроков. Свяжитесь с нами — мы подготовим коммерческое предложение за один день.







