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







