פיתוח Webhook אמין לתשלומי קריפטו

אתה משלב תשלומי קריפטו, אבל הבלוקצ'יין לא יכול להודיע לשרת שלך בעצמו. אתה צריך לבדוק את הצומת כל 12 שניות - זה 7200 בקשות RPC לשעה לכל כתובת. עבור 1000 משתמשים פעילים, העומס גדל ל-7.2 מיליון בקשות לשעה, מה שעולה עשרות אלפי דולרים בחודש ו

שירותי פיתוח בלוקצ'יין

שאלות נפוצות

העבודות האחרונות

  • image_website-b2b-advance_0.webp
    פיתוח אתר חברה B2B ADVANCE
    1450
  • image_web-applications_feedme_466_0.webp
    פיתוח אפליקציית ווב עבור FEEDME
    1308
  • image_websites_belfingroup_462_0.webp
    פיתוח אתר עבור BELFINGROUP
    1003
  • image_ecommerce_furnoro_435_0.webp
    פיתוח חנות מקוונת לחברת FURNORO
    1269
  • image_logo-advance_0.webp
    עיצוב לוגו לחברת B2B Advance
    717
  • image_crm_enviok_479_0.webp
    פיתוח אפליקציית ווב עבור Enviok
    1009

אתה משלב תשלומי קריפטו, אבל הבלוקצ'יין לא יכול להודיע לשרת הקצה שלך בעצמו. אתה צריך לבדוק את הצומת כל 12 שניות — זה 7200 בקשות RPC לשעה לכל כתובת. עבור 1000 משתמשים פעילים, העומס גדל ל-7.2 מיליון בקשות לשעה, מה שעולה עשרות אלפי דולרים בחודש וגורם לעיכובים של עד 30 שניות. בזמן עומס ברשת, כמו mint פופולרי, אתה מובטח לאבד עסקאות.

Webhook פותר את הבעיה: ניטור הבלוקצ'יין שולח בעצמו בקשת HTTP לשרת שלך כאשר מתרחש אירוע. זמן האחזור יורד ל-2–5 שניות, עומס השרת יורד ב-95%. בנינו עשרות מערכות כאלה ואנחנו יודעים איך להפוך אותן לאמינות.

למה webhook עדיף על פני polling לתשלומי קריפטו?

Polling פירושו בקשות RPC קבועות לצומת. כל בקשה עולה כסף ויוצרת עומס. Webhook הוא מודל push: אתה מקבל הודעה ברגע שהעסקה נכללת בבלוק. זמן האחזור מינימלי, עומס השרת יורד משמעותית. עבור פרויקטים בעלי עומס גבוה, זו האפשרות היחידה המעשית. לדוגמה, אחת מבורסות הלקוחות שלנו הפחיתה את עלויות התשתית ב-40% והקטינה את זמן אישור התשלום הממוצע מ-15 ל-3 שניות לאחר המעבר מ-polling ל-webhook.

איך אנחנו בונים מערכת הודעות webhook

אנחנו משתמשים בארכיטקטורה מוכחת: ניטור בלוקצ'יין → מפזר webhook → תור המשימות שלך. ניתן ליישם ניטור באמצעות שירותי צד שלישי (Alchemy Notify, Moralis Streams, QuickNode Streams) או מאזין צומת משלך. אנחנו בדרך כלל בוחרים ב-Alchemy לפשטות ואמינות. הנה דוגמה ליצירת webhook:

// Создание webhook через Alchemy API const response = await fetch('https://dashboard.alchemy.com/api/create-webhook', { method: 'POST', headers: { 'X-Alchemy-Token': process.env.ALCHEMY_AUTH_TOKEN!, 'Content-Type': 'application/json', }, body: JSON.stringify({ network: 'ETH_MAINNET', webhook_type: 'ADDRESS_ACTIVITY', webhook_url: 'https://yourapp.com/webhooks/crypto', addresses: ['0xYourAddress'], }), }) 

איך להבטיח עיבוד webhook אידמפוטנטי?

ספקי webhook מבטיחים מסירה לפחות פעם אחת. ה-handler שלך חייב להיות אידמפוטנטי — הודעות חוזרות לא חייבות לשכפל תשלומים. אנחנו משתמשים ב-// Создание webhook через Alchemy API const response = await fetch('https://dashboard.alchemy.com/api/create-webhook', { method: 'POST', headers: { 'X-Alchemy-Token': process.env.ALCHEMY_AUTH_TOKEN!, 'Content-Type': 'application/json', }, body: JSON.stringify({ network: 'ETH_MAINNET', webhook_type: 'ADDRESS_ACTIVITY', webhook_url: 'https://yourapp.com/webhooks/crypto', addresses: ['0xYourAddress'], }), }) :

async function processPaymentWebhook(txHash: string, address: string, amountWei: bigint) { const result = await db.query(` INSERT INTO processed_webhooks (tx_hash, processed_at) VALUES ($1, NOW()) ON CONFLICT (tx_hash) DO NOTHING RETURNING id `, [txHash]) if (result.rowCount === 0) { return // уже обработано } await updatePaymentStatus(address, amountWei, txHash) } 

מנגנון ניסיון חוזר עבור webhooks יוצאים

אם השירות שלך מודיע ללקוחות דרך webhook, אתה צריך מנגנון ניסיון חוזר אמין. אנחנו משתמשים ב-exponential backoff עם 10 ניסיונות ושמירה בתור dead letter. דוגמת handler:

interface WebhookDelivery { id: string url: string payload: object attempt: number nextRetryAt: Date } async function deliverWebhook(delivery: WebhookDelivery): Promise<void> { try { const res = await fetch(delivery.url, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Webhook-Signature': signPayload(delivery.payload), 'X-Webhook-ID': delivery.id, 'X-Webhook-Attempt': String(delivery.attempt), }, body: JSON.stringify(delivery.payload), signal: AbortSignal.timeout(10_000), }) if (!res.ok) { throw new Error(`HTTP ${res.status}`) } await db.markDelivered(delivery.id) } catch (err) { const nextAttempt = delivery.attempt + 1 if (nextAttempt > 10) { await db.markFailed(delivery.id, String(err)) return } const delayMs = Math.min(30_000 * Math.pow(2, nextAttempt - 1), 3_600_000) await db.scheduleRetry(delivery.id, nextAttempt, new Date(Date.now() + delayMs)) } } 

תוכנית ניסיון חוזר: 10 ניסיונות עם exponential backoff מספיקים ל-99.7% מהמסירות. כישלון סופי — הודע למפתחים דרך PagerDuty או Telegram, שמור בתור dead letter.

השוואת ספקי ניטור בלוקצ'יין

ספק סוג הודעה מגבלת כתובות מדרגיות
Alchemy Notify ADDRESS_ACTIVITY, MINED_TRANSACTION עד 10 בחינם גבוהה, SLA 99.9%
Moralis Streams כל האירועים ללא הגבלה (לפי תוכנית) בינונית, זמן אחזור עד 10 שניות
QuickNode Streams ADDRESS_ACTIVITY, CONTRACT_EVENT לפי בקשה גבוהה, SLA מותאם אישית

אנחנו ממליצים על Alchemy להתחלה — הוא מתועד טוב יותר ויציב. אנחנו משתמשים בו בכ-70% מהפרויקטים.

אירועי webhook טיפוסיים והטיפול בהם

אירוע Payload (מפושט) עיבוד טיפוסי
ADDRESS_ACTIVITY txHash, address, amount, block זיכוי תשלום, עדכון יתרה
MINED_TRANSACTION txHash, status, gas עדכון סטטוס עסקה במסד הנתונים
CONTRACT_EVENT event.name, params, txHash הפעלת לוגיקה עסקית מתאימה

טבלה זו עוזרת למפתחים להבין במהירות אילו נתונים מגיעים ומה לעשות איתם.

מה לעשות אם ה-webhook handler נופל?

ספקי בלוקצ'יין לא שומרים אירועים ללא הגבלת זמן. אם ה-endpoint שלך נופל, אתה מסתכן באובדן הודעות. לכן, אנחנו מתכננים את המערכת עם תור משימות (RabbitMQ, Redis, או Kafka) מיד אחרי ה-endpoint. אם העיבוד נכשל, התור שומר את ההודעה ומנסה שוב. בנוסף, אנחנו מגדירים ניטור: אם התור גדל מעבר ל-1000 משימות לא מעובדות, נשלחת התראה. זה מבטיח שאף תשלום לא יאבד גם במקרה של תקלת מסד נתונים או רשת.

תהליך הפיתוח

  1. ניתוח דרישות: סוגי אירועים, מספר כתובות, SLA.
  2. עיצוב ארכיטקטורה: בחירת ספק, סכמת נתונים, מדיניות ניסיון חוזר.
  3. יישום endpoint של webhook עם אימות חתימה ותור.
  4. פיתוח handler אידמפוטנטי ומנגנון ניסיון חוזר.
  5. אינטגרציה עם מערכת התשלומים שלך.
  6. בדיקות על testnet (Goerli, Sepolia).
  7. פריסה וניטור (Grafana + Prometheus).

מה כלול

  • תיעוד API של webhook
  • קוד מקור עם הערות
  • מדריך פריסה
  • סביבת בדיקות
  • חודש אחד של תמיכה לאחר השקה

לוח זמנים ותמחור

endpoint בסיסי של webhook עם אימות ותור ניתן לביצוע ביום אחד. מערכת מלאה עם ניסיון חוזר, תור dead letter ולוח בקרה לוקחת 2–3 ימים. התמחור מותאם אישית לאחר ניתוח. נבחן את המקרה שלך תוך 24 שעות — פשוט צור קשר. קבל ייעוץ ממהנדס עם 10 שנות ניסיון בפיתוח בלוקצ'יין.

טעויות טיפוסיות

  • לא לאמת את החתימה — כל אחד יכול לשלוח webhook מזויף.
  • להשיב עם 200 לאחר הוספה לתור — חוסם את התור, מפחית תפוקה.
  • לא להשתמש באידמפוטנטיות — חיוב כפול של תשלום.
  • התעלמות מניסיון חוזר עבור webhooks יוצאים — אובדן נתונים.

הצוות שלנו מבטיח אמינות ואבטחה לכל פתרון. יישמנו מעל 50 אינטגרציות של מערכות תשלום באמצעות webhooks. אם אתה צריך מערכת הודעות webhook אמינה — צור קשר.