כיצד להגדיר קבלת תשלומי TON: TON Connect, Jetton, אוטומציה

TON אינו Ethereum עם RPC שונה. מודל הטרנזקציות האסינכרוני ומבנה ההודעות דמוי העץ שוברים את האינטואיציה של המפתחים. כאשר משתמש שולח TON מקורי לכתובת שלך, זו טרנזקציה אחת. כאשר הוא שולח Jetton (USDT על TON), זו שרשרת של שלוש: העברה → הודעה פנימית → n

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

שאלות נפוצות

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

  • 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
    1008

TON אינו את'ריום עם RPC שונה. מודל הטרנזקציות האסינכרוני ומבנה ההודעות דמוי העץ שוברים את האינטואיציה של המפתחים. כאשר משתמש שולח TON מקורי לכתובת שלך, מדובר בטרנזקציה אחת. כאשר הוא שולח Jetton (USDT על TON), מדובר בשרשרת של שלוש: העברה → הודעה פנימית → התראה. שגיאת ניטור מובילה לתשלומים שאבדו ולכאב ראש עם החזרים.

לאחרונה, פרויקט עם 5000 תשלומי Jetton יומיים פנה אלינו. לאחר ביקורת על המערכת שלהם, גילינו שהם לא התחשבו בטרנזקציות מוקפצות (bounced), מה שגרם ל-2% מהתשלומים לזקוף בטעות. בנינו מחדש את הארכיטקטורה עם כתובות ייחודיות וממסרי Gasless, וצמצמנו את ההפסדים לאפס. הקמנו קבלת תשלומים במפתח מלא: צור קשר, ונעריך את הפרויקט שלך ונבחר את הארכיטקטורה האופטימלית ביום אחד.

כיצד לקבל TON מקורי ו-Jetton

TON מקורי

צור כתובת ייחודית או השתמש בכתובת אחת עם comment (memo) לזיהוי. נטר באמצעות TON Center API או TonAPI:

import { TonClient } from '@ton/ton'; import { Address } from '@ton/core'; const client = new TonClient({ endpoint: 'https://toncenter.com/api/v2/jsonRPC', apiKey: process.env.TONCENTER_API_KEY, }); async function checkIncomingTransactions( address: string, lastLt: string // last known logical time ) { const addr = Address.parse(address); const transactions = await client.getTransactions(addr, { limit: 20, lt: lastLt, archival: false, }); for (const tx of transactions) { // Только входящие, не bounce if (tx.inMessage && tx.inMessage.info.type === 'internal') { const info = tx.inMessage.info; const value = info.value.coins; // в nanoTON const comment = tx.inMessage.body; // текстовый комментарий // Матчим комментарий с нашим payment ID console.log(`Received: ${value} nanoTON, comment: ${comment}`); } } } 

חשוב: בדוק את דגל import { TonClient } from '@ton/ton'; import { Address } from '@ton/core'; const client = new TonClient({ endpoint: 'https://toncenter.com/api/v2/jsonRPC', apiKey: process.env.TONCENTER_API_KEY, }); async function checkIncomingTransactions( address: string, lastLt: string // last known logical time ) { const addr = Address.parse(address); const transactions = await client.getTransactions(addr, { limit: 20, lt: lastLt, archival: false, }); for (const tx of transactions) { // Только входящие, не bounce if (tx.inMessage && tx.inMessage.info.type === 'internal') { const info = tx.inMessage.info; const value = info.value.coins; // в nanoTON const comment = tx.inMessage.body; // текстовый комментарий // Матчим комментарий с нашим payment ID console.log(`Received: ${value} nanoTON, comment: ${comment}`); } } } ואת דגל bounce. טרנזקציה מוקפצת פירושה החזר—אל תספור אותה.

Jetton (USDT, USDC, NOT)

העברת Jetton מורכבת יותר: המשתמש שולח הודעה ל-JettonWallet שלו, אשר שולח הודעה פנימית לחוזה של הנמען, אשר שולח bounced לכתובת הנמען. ב-transfer_notification, אנו כוללים את העמלה עבור ההתראה; ב-forward_ton_amount, אנו כוללים את מזהה התשלום:

transfer_notification#7362d09c query_id: uint64 amount: coins // количество Jetton sender: MsgAddress // адрес отправителя forward_payload: ^Cell // наш custom payload (payment ID) 

נטר לא את הכתובת הראשית, אלא את ה-JettonWallet של הכתובת שלנו:

// Получаем адрес нашего JettonWallet для USDT async function getJettonWalletAddress( ownerAddress: string, jettonMasterAddress: string ): Promise<string> { const master = client.open( JettonMaster.create(Address.parse(jettonMasterAddress)) ); const walletAddr = await master.getWalletAddress( Address.parse(ownerAddress) ); return walletAddr.toString(); } // USDT на TON mainnet const USDT_MASTER = 'EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs'; 

מה לבחור: כתובות ייחודיות או הערה?

מאפיין הערה (memo) כתובת ייחודית
מורכבות יישום נמוכה בינונית (HD wallet)
שגיאות משתמש 1-3% שוכחים הערה 0%
איסוף כספים לא נדרש נדרש איסוף
ניטור כתובת אחת כתובות רבות
המלצה עד 100 תשלומים/יום מ-1000 תשלומים/יום

זיהוי באמצעות הערה/Memo

כתובת אחת, המשתמש מציין forward_payload (מזהה תשלום). פשוט, אך דורש UX—הסבר על הצורך בהערה. שגיאה = תשלום שאבד (דורש התאמה ידנית).

כתובת ייחודית לכל תשלום

צור HD wallet (BIP39 + גזירה לא סטנדרטית). כל הזמנה מקבלת כתובת נפרדת. אין הערות, אין שגיאות, ניטור פשוט:

import { mnemonicToPrivateKey } from '@ton/crypto'; import { WalletContractV4 } from '@ton/ton'; async function derivePaymentAddress( masterMnemonic: string[], orderIndex: number ): Promise<string> { const keyPair = await mnemonicToPrivateKey(masterMnemonic); const wallet = WalletContractV4.create({ publicKey: keyPair.publicKey, workchain: 0, walletId: 698983191 + orderIndex, // уникальный subwalletId }); return wallet.address.toString({ bounceable: false }); } 

חיסרון: יש צורך לאסוף כספים לכתובת ראשית.

פולינג או Webhook?

שיטה זמן השהיה עומס מורכבות
פולינג (TON Center) ~5-30 שניות בינוני נמוכה
Webhook (TON Center) ~1-2 שניות נמוך בינונית
WebSocket (TonAPI) ~0.5 שניות נמוך גבוהה
צומת עצמי ~0 שניות גבוה מאוד גבוה מאוד

לסביבת ייצור, השתמש ב-TonAPI + WebSocket עם גיבוי פולינג. צומת מתארח עצמית מוצדק למיליוני טרנזקציות ביום. Webhook מהיר פי 10 מפולינג.

Gasless ו-Bounce: בעיות נפוצות

Gasless

Gasless מאפשר למשתמשים לשלם ללא יתרת TON לעמלות. זה קריטי לתשלומי Jetton: כדי לשלוח USDT, אתה צריך TON לגז. השירות מכסה את העמלה דרך ממסר. הגדר ממסר דרך TON Connect או חוזה ממסר. Gasless מגדיל את ההמרה ב-15-30% באפליקציות מובייל.

Bounce

אם אינך מסנן טרנזקציות מוקפצות, אתה עלול לזקוף תשלום שמעולם לא הגיע. ב-TON, הקפצות הן נורמליות: חוזה הנמען עלול לדחות את ההודעה. בדוק את דגל transfer_notification#7362d09c query_id: uint64 amount: coins // количество Jetton sender: MsgAddress // адрес отправителя forward_payload: ^Cell // наш custom payload (payment ID) בגוף ההודעה. עבור Jetton, עקוב גם אחר // Получаем адрес нашего JettonWallet для USDT async function getJettonWalletAddress( ownerAddress: string, jettonMasterAddress: string ): Promise<string> { const master = client.open( JettonMaster.create(Address.parse(jettonMasterAddress)) ); const walletAddr = await master.getWalletAddress( Address.parse(ownerAddress) ); return walletAddr.toString(); } // USDT на TON mainnet const USDT_MASTER = 'EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs'; —היעדרו הוא גם סימן לכישלון.

שלבים להקמת קבלת תשלומי TON

  1. ניתוח—הערכת עומס, סוגי נכסים (TON, Jetton), בחירת ארכיטקטורה.
  2. בחירת שיטת זיהוי—הערה או כתובות ייחודיות.
  3. פיתוח ניטור—אינטגרציה עם TON Center / TonAPI, טיפול ב-webhook/WebSocket.
  4. אינטגרציה עם הקצה האחורי—מיפוי טרנזקציות להזמנות, טיפול בשגיאות.
  5. בדיקה על testnet—שימוש בבוט לחלוקת TON לבדיקה ו-Sandbox מ-Blueprint.
  6. פריסה—הקמת סביבת ייצור, ניטור והתראות.

מה כלול בעבודה

  • תיעוד ארכיטקטורה—תכנון מפורט של זרימת התשלומים.
  • גישה לסביבת בדיקה—נקודות קצה של testnet ופרטי התחברות.
  • הקמת ניטור—התראות על טרנזקציות מוקפצות וכשלונות.
  • מפגש הדרכה—סיור של שעה לצוות שלך.
  • תמיכה ל-30 יום לאחר הפריסה.

מדדי החברה שלנו

  • 5+ שנים בפיתוח בלוקצ'יין.
  • 50+ פרויקטים שנמסרו, כולל 10+ אינטגרציות TON.
  • 99.9% זמינות למערכות תשלום.

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

הקמה בסיסית אורכת 2–4 שבועות. עלויות מתחילות מ-$5,000 להקמה פשוטה עם נכס אחד וזיהוי מבוסס הערה. ממסר Gasless ותמיכה במספר נכסים מגדילים את התקציב. קבל הערכת פרויקט חינם—צור קשר עוד היום.

שגיאות נפוצות בקבלת תשלומי TON

  • התעלמות מטרנזקציות מוקפצות—זקיפת תשלומים שנכשלו.
  • ניטור הכתובת הראשית במקום JettonWallet—החמצת תשלומי Jetton.
  • שימוש בפולינג בלבד ללא גיבוי—אובדן טרנזקציות בעומס גבוה.
  • אי בדיקה על testnet—שגיאות בסביבת ייצור.
  • אי התחשבות באסינכרוניות—ניסיון לחכות באופן סינכרוני לתגובת חוזה.

בדיקה ופריסה

Testnet: השתמש בבוט לחלוקת TON לבדיקה. נקודת קצה API comment. לפיתוח מקומי, השתמש ב-Sandbox מ-Blueprint: אמולטור TVM ללא רשת. מודל ההודעות האסינכרוני דורש בדיקה מיוחדת. הזמן הקמת קבלת תשלומי TON כדי לחסל שגיאות ניטור ולהפוך את החשבונאות לאוטומטית.

מקורות: תיעוד TON, TON Center API, TonAPI, Blueprint Sandbox