לקוחות לא יכולים לחתום על חוזים מיד — אתם מפסידים עסקאות. חתימה על מסמכים ישירות בדפדפן מקצרת את מחזור העסקה פי 3–4 ומבטלת אובדן מסמכים. בניגוד לשירותים מוכנים, הפתרון שלנו ניתן להתאמה מלאה לתהליך העבודה שלכם. הוא משתלב עם התשתית הקיימת שלכם ומספק את רמת התוקף המשפטי הנדרשת. פתרון מותאם אישית עולה פי 3 פחות עבור 1000 חתימות בחודש — ללא מנוי חודשי למשתמש. שירותים טיפוסיים לרוב נכשלים בטיפול בתהליכי עבודה מורכבים: שרשראות אישורים, חתימה מקבילה, אינטגרציה עם 1C. אנחנו פותרים אתגרים אלה בהתבסס על ניסיון של 10+ שנים בפיתוח זרימת מסמכים. צרו קשר — נבחן את הפרויקט שלכם תוך יום עסקים אחד.
למה חתימה בדפדפן עדיפה על שירותים מוכנים?
שירותים מוכנים (DocuSign ואחרים) מציעים פונקציונליות סטנדרטית אך נופלים בשלושה תחומים מרכזיים: עלות, התאמה אישית ועמידה בדרישות משפטיות.
| קריטריון | שירות מוכן | הפתרון המותאם שלנו |
|---|---|---|
| התאמת עיצוב | מוגבל (מיתוג, לא UX מלא) | מלא — משולב בממשק שלכם ללא הפניות |
| אינטגרציה עם CRM/ERP | דרך API בתשלום או מחברים מוכנים | REST API מותאם לסטאק שלכם תוך 1–2 ימים |
| תהליך חתימה | ליניארי, מוגדר על ידי הספק | כל סוג: רציף, מקביל, היררכי |
| תוקף משפטי | מתאים למסמכים בינלאומיים, אך דרישות מקומיות עשויות שלא להתמלא | עמידה מלאה בחקיקה הרוסית (החוק הפדרלי מס' 63-FZ) עם יומן ביקורת |
איך פועלות רמות החתימה האלקטרונית?
חתימות אלקטרוניות נבדלות במשקל המשפטי שלהן. אנו מיישמים את כל שלוש הרמות — מפשוטה ועד מוסמכת.
| רמה | שיטת אימות | השפעה משפטית | תרחישים אופייניים |
|---|---|---|---|
| חתימה אלקטרונית פשוטה | כניסה/סיסמה, קוד SMS | חלשה, מתאימה למסחר אלקטרוני פנימי | הסכמה להצעה, מסמכים פנימיים |
| חתימה משופרת לא מוסמכת | חתימה מצוירת, גיבוב קריפטוגרפי | בינונית, דורשת הסכמה הדדית | חוזי B2B, הצעות מסחריות |
| חתימה משופרת מוסמכת (QES) | הגנה קריפטוגרפית מאושרת | מלאה, שוות ערך לחתימה בכתב יד | חוזים ממשלתיים, בנקים |
רוב תרחישי 'החתימה בדפדפן' מכוסים על ידי חתימה אלקטרונית פשוטה או משופרת לא מוסמכת. QES דורשת תוסף או טוקן נוסף, אך אנו משלבים גם אותה.
איך אנו מיישמים חתימה: סטאק טכנולוגי ושלבים
תהליך החתימה מורכב ממספר שלבים:
- המשתמש פותח את המסמך בדפדפן. אנו משתמשים בספריית
react-pdf-viewerעם לוגיקה מותאמת אישית הדורשת צפייה בכל העמודים. זה חוסם חתימה עד שכל המסמך נסקר. - לאחר הצפייה, המשתמש מזין את החתימה שלו — מצוירת עם העכבר או טקסט מוקלד. אם נדרש אימות SMS, הם מזינים את הקוד מההודעה.
- הדפדפן שולח נתונים לשרת: תמונת חתימה ומטא-דאטה (IP, user-agent, זמן). השרת מחשב את גיבוב המסמך, מטמיע את החתימה באמצעות
pdf-lib, ושומר את הגרסה החתומה. - השרת יוצר יומן ביקורת ושולח הודעות לצדדים. סטטוס המסמך משתנה ל'חתום'.
דוגמה להטמעת חתימה ב-PDF
// Backend: обработка подписанного документа async function processDocumentSignature(documentId, userId, signatureDataUrl, metadata) { const document = await db.documents.findByPk(documentId); // 1. Загружаем оригинальный PDF const originalPdf = await s3.getObject({ Bucket: BUCKET, Key: document.s3Key }).promise(); // 2. Вычисляем хэш оригинала для аудит-лога const originalHash = crypto.createHash('sha256').update(originalPdf.Body).digest('hex'); // 3. Встраиваем подпись const { PDFDocument, rgb } = require('pdf-lib'); const pdfDoc = await PDFDocument.load(originalPdf.Body); const lastPage = pdfDoc.getPages().at(-1); // Добавляем изображение подписи const signatureImage = await pdfDoc.embedPng( Buffer.from(signatureDataUrl.replace(/^data:image\/png;base64,/, ''), 'base64') ); lastPage.drawImage(signatureImage, { x: 60, y: 50, width: 150, height: 50 }); // Добавляем текстовый штамп const font = await pdfDoc.embedFont('Helvetica'); lastPage.drawText( `Подписано: ${metadata.signerName}\n${metadata.signedAt.toISOString()}\nIP: ${metadata.ip}`, { x: 60, y: 30, size: 8, font, color: rgb(0.4, 0.4, 0.4) } ); const signedPdfBytes = await pdfDoc.save(); // 4. Сохраняем подписанную версию const signedKey = `signed/${documentId}/${userId}.pdf`; await s3.putObject({ Bucket: BUCKET, Key: signedKey, Body: signedPdfBytes }).promise(); // 5. Фиксируем в БД await db.documentSignatures.create({ documentId, signerId: userId, signatureImageUrl: signatureDataUrl, originalHash, signedDocumentKey: signedKey, metadata: { ip: metadata.ip, userAgent: metadata.userAgent, signedAt: new Date() }, }); return signedKey; } אימות SMS כחתימה אלקטרונית פשוטה
להסכמות בעלות משמעות משפטית, אנו משתמשים באימות SMS. גיבוב הקוד נשמר ב-Redis עם TTL של 5 דקות. הקוד נשלח לטלפון, המשתמש מזין אותו באתר. לאחר האימות, החתימה נרשמת. גישה זו מפחיתה עלויות ב-40% בהשוואה ל-QES.
// Генерация и отправка кода async function initiateSmsSigning(documentId, userId, phone) { const code = Math.random().toString(36).substring(2, 8).toUpperCase(); const codeHash = bcrypt.hashSync(code, 10); await redis.setex( `sms_sign:${documentId}:${userId}`, 300, // 5 минут JSON.stringify({ codeHash, phone, attempts: 0 }) ); await smsService.send(phone, `Код подписания документа: ${code}. Действует 5 минут.`); } // Проверка кода и фиксация подписи async function confirmSmsSigning(documentId, userId, code) { const stored = JSON.parse(await redis.get(`sms_sign:${documentId}:${userId}`)); if (!stored || !bcrypt.compareSync(code, stored.codeHash)) { throw new Error('Invalid code'); } await redis.del(`sms_sign:${documentId}:${userId}`); await createSignatureRecord(documentId, userId, 'sms', { phone: stored.phone }); } חתימה מרובת צדדים: תהליך עבודה למספר צדדים
לעתים קרובות מסמך דורש חתימות ממספר משתתפים (למשל, חוזה בין לקוח לקבלן). אנו מיישמים תהליך רציף: צד א' חותם → המסמך מקבל סטטוס // Backend: обработка подписанного документа async function processDocumentSignature(documentId, userId, signatureDataUrl, metadata) { const document = await db.documents.findByPk(documentId); // 1. Загружаем оригинальный PDF const originalPdf = await s3.getObject({ Bucket: BUCKET, Key: document.s3Key }).promise(); // 2. Вычисляем хэш оригинала для аудит-лога const originalHash = crypto.createHash('sha256').update(originalPdf.Body).digest('hex'); // 3. Встраиваем подпись const { PDFDocument, rgb } = require('pdf-lib'); const pdfDoc = await PDFDocument.load(originalPdf.Body); const lastPage = pdfDoc.getPages().at(-1); // Добавляем изображение подписи const signatureImage = await pdfDoc.embedPng( Buffer.from(signatureDataUrl.replace(/^data:image\/png;base64,/, ''), 'base64') ); lastPage.drawImage(signatureImage, { x: 60, y: 50, width: 150, height: 50 }); // Добавляем текстовый штамп const font = await pdfDoc.embedFont('Helvetica'); lastPage.drawText( `Подписано: ${metadata.signerName}\n${metadata.signedAt.toISOString()}\nIP: ${metadata.ip}`, { x: 60, y: 30, size: 8, font, color: rgb(0.4, 0.4, 0.4) } ); const signedPdfBytes = await pdfDoc.save(); // 4. Сохраняем подписанную версию const signedKey = `signed/${documentId}/${userId}.pdf`; await s3.putObject({ Bucket: BUCKET, Key: signedKey, Body: signedPdfBytes }).promise(); // 5. Фиксируем в БД await db.documentSignatures.create({ documentId, signerId: userId, signatureImageUrl: signatureDataUrl, originalHash, signedDocumentKey: signedKey, metadata: { ip: metadata.ip, userAgent: metadata.userAgent, signedAt: new Date() }, }); return signedKey; } → המערכת שולחת הודעה לצד ב' עם קישור לחתימה → צד ב' חותם → סטטוס // Генерация и отправка кода async function initiateSmsSigning(documentId, userId, phone) { const code = Math.random().toString(36).substring(2, 8).toUpperCase(); const codeHash = bcrypt.hashSync(code, 10); await redis.setex( `sms_sign:${documentId}:${userId}`, 300, // 5 минут JSON.stringify({ codeHash, phone, attempts: 0 }) ); await smsService.send(phone, `Код подписания документа: ${code}. Действует 5 минут.`); } // Проверка кода и фиксация подписи async function confirmSmsSigning(documentId, userId, code) { const stored = JSON.parse(await redis.get(`sms_sign:${documentId}:${userId}`)); if (!stored || !bcrypt.compareSync(code, stored.codeHash)) { throw new Error('Invalid code'); } await redis.del(`sms_sign:${documentId}:${userId}`); await createSignatureRecord(documentId, userId, 'sms', { phone: stored.phone }); } . שני הצדדים מקבלים את ה-PDF הסופי בדוא"ל. 95% מהמשתמשים חותמים על המסמך בניסיון הראשון, וזמן האישור מתקצר מ-3 ימים לשעה. אם נדרש, אנו מוסיפים חתימה מקבילה או הודעות דרך Telegram/WhatsApp. התהליך תומך בעד 10 חותמים.
מה כלול
- ניתוח תהליך העסקי שלכם ודרישות משפטיות
- עיצוב תהליך החתימה (יחיד, מרובה, היררכי)
- פיתוח רכיבי Frontend (מציג PDF, הזנת חתימה)
- לוגיקת Backend (הטמעת חתימה, יצירת יומן ביקורת, אחסון)
- אינטגרציה עם שער SMS או הגנה קריפטוגרפית (אם נדרש)
- אינטגרציה עם CRM/ERP שלכם דרך REST API
- תיעוד API וניהול
- בדיקות (עומס, משפטיות)
- פריסה וחודש של תמיכה לאחר השקה
לוחות זמנים ואיך להזמין
לוחות זמנים משוערים:
- יישום בסיסי (צפייה + חתימה מצוירת) — מ-5 ימי עסקים.
- אימות SMS — תוספת של 1–2 ימים.
- חתימה מרובת צדדים עם תהליך עבודה — 3–4 ימים.
קבלו ייעוץ — נבחר את הארכיטקטורה האופטימלית לפרויקט שלכם. הזמינו יישום חתימה בדפדפן עוד היום.







