Керівник інтернет-магазину витрачав до 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 дні. Вартість розраховується індивідуально.
Отримайте консультацію — оцінимо ваш проєкт і запропонуємо рішення під ключ. Досвід нашої команди — десятки інтеграцій електронного підпису. Гарантуємо надійність та дотримання термінів. Зв'яжіться з нами — ми підготуємо комерційну пропозицію за один день.







