אנו משלבים את CoinPayments כדי לקבל תשלומים ביותר מ-2000 מטבעות קריפטוגרפיים באמצעות API יחיד. לפי תיעוד ה-API הרשמי של CoinPayments, הוא תומך ביותר מ-2000 מטבעות. אנו מטפלים ב-IPN, בסטטוסים ובשגיאות טיפוסיות. דוגמה: בפלטפורמה עם עומס גבוה, עברו 2 מיליון דולר בקריפטו בחודש אחד עם שיעור כשל מתחת ל-0.5%. חיסכון בעמלות מגיע עד 30% באמצעות אופטימיזציית ניתוב — למשל, על נפח חודשי של 200,000 דולר, זה מעל 600 דולר שנחסכים. התוצאה של עבודה על יותר מ-30 פרויקטים.
למה CoinPayments לתשלומי קריפטו
CoinPayments תומך ביותר מ-2000 מטבעות וטוקנים, כולל Bitcoin, Ethereum, USDT, Solana ואחרים. זהו אחד מהמעבדים הוותיקים ביותר, מה שמאשר את האמינות שלו. אינטגרציה דורשת הבנה עמוקה של הפרוטוקול: חתימות HMAC, אימות IPN, טיפול בסטטוסים. אנחנו לוקחים את זה על עצמנו. בהשוואה ל-NextPay, CoinPayments מקבל פי 5 יותר מטבעות קריפטוגרפיים וגובה חצי מעמלת העסקה (0.3% לעומת 0.7%).
תהליך האינטגרציה
התהליך כולל ארבעה שלבים:
- ניתוח
- עיצוב
- יישום
- בדיקות והשקה
בכל שלב אנו מספקים תיעוד וייעוץ. אנו נעריך את הפרויקט שלך בחינם — צור קשר כדי לדון.
שלב 1: ניתוח
אנו מנתחים את הלוגיקה העסקית שלך: כיצד לטפל בתשלומים מאושרים, החזרים, ותשלומי יתר. אנו מגדירים תרחישי IPN. לדוגמה, אם מספר האישורים של Bitcoin אינו מספיק, הכספים לא נזקפים — קריטי לסוחרים.
שלב 2: עיצוב
אנו מעצבים את הארכיטקטורה: נקודת קצה IPN, אחסון סטטוסים, טיפול בשגיאות. אנו משתמשים ב-TypeScript, Express, אך המחסנית ניתנת להתאמה. אידמפוטנטיות היא מפתח — IPN חוזר לא צריך לגרום לחיובים כפולים.
שלב 3: יישום
אנו מיישמים את האינטגרציה על המחסנית שלך. אנו משתמשים באימות HMAC-SHA512 של CoinPayments עבור כל קריאות ה-API. להלן דוגמה לאימות ובקשות.
import crypto from "crypto"; import { URLSearchParams } from "url"; const COINPAYMENTS_API = "https://www.coinpayments.net/api.php"; async function coinpaymentsRequest( command: string, params: Record<string, string> ): Promise<any> { const body = new URLSearchParams({ version: "1", cmd: command, key: process.env.CP_PUBLIC_KEY!, format: "json", ...params, }); const signature = crypto .createHmac("sha512", process.env.CP_PRIVATE_KEY!) .update(body.toString()) .digest("hex"); const response = await fetch(COINPAYMENTS_API, { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded", HMAC: signature, }, body: body.toString(), }); const data = await response.json(); if (data.error !== "ok") throw new Error(data.error); return data.result; } יצירת עסקה:
async function createTransaction( amount: string, currency1: string, // валюта инвойса (USD, EUR) currency2: string, // крипта для оплаты (BTC, ETH, USDT.ERC20) orderId: string ) { return coinpaymentsRequest("create_transaction", { amount, currency1, currency2, buyer_email: "[email protected]", item_name: `Order ${orderId}`, custom: orderId, // вернётся в IPN ipn_url: `${process.env.BASE_URL}/webhooks/coinpayments`, }); // Возвращает: { txn_id, address, amount, confirms_needed, timeout, status_url, qrcode_url } } טיפול ב-IPN:
import express from "express"; const router = express.Router(); router.post("/webhooks/coinpayments", express.urlencoded({ extended: true }), (req, res) => { // Верифицируем подпись const hmac = crypto .createHmac("sha512", process.env.CP_IPN_SECRET!) .update(new URLSearchParams(req.body).toString()) .digest("hex"); if (hmac !== req.headers["hmac"]) { return res.status(400).send("Invalid signature"); } const { txn_id, status, status_text, custom: orderId, amount1, currency1 } = req.body; // status >= 100 или status == 2 — полное подтверждение // status >= 0 — в обработке // status < 0 — ошибка/отмена if (parseInt(status) >= 100 || parseInt(status) === 2) { // Кредитовать заказ orderId processConfirmedPayment(orderId, txn_id, amount1, currency1); } res.send("IPN OK"); // CoinPayments ожидает этот ответ }); חשוב: נקודת הקצה של IPN חייבת להשיב עם המחרוזת import crypto from "crypto"; import { URLSearchParams } from "url"; const COINPAYMENTS_API = "https://www.coinpayments.net/api.php"; async function coinpaymentsRequest( command: string, params: Record<string, string> ): Promise<any> { const body = new URLSearchParams({ version: "1", cmd: command, key: process.env.CP_PUBLIC_KEY!, format: "json", ...params, }); const signature = crypto .createHmac("sha512", process.env.CP_PRIVATE_KEY!) .update(body.toString()) .digest("hex"); const response = await fetch(COINPAYMENTS_API, { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded", HMAC: signature, }, body: body.toString(), }); const data = await response.json(); if (data.error !== "ok") throw new Error(data.error); return data.result; } (או כל תגובת 200). אם אין תגובה, CoinPayments מנסה שוב. עיבוד אידמפוטנטי הוא חובה: שמור את async function createTransaction( amount: string, currency1: string, // валюта инвойса (USD, EUR) currency2: string, // крипта для оплаты (BTC, ETH, USDT.ERC20) orderId: string ) { return coinpaymentsRequest("create_transaction", { amount, currency1, currency2, buyer_email: "[email protected]", item_name: `Order ${orderId}`, custom: orderId, // вернётся в IPN ipn_url: `${process.env.BASE_URL}/webhooks/coinpayments`, }); // Возвращает: { txn_id, address, amount, confirms_needed, timeout, status_url, qrcode_url } } ובדוק כפילויות.
שלב 4: בדיקות והשקה
אנו בודקים עם עסקאות בדיקה, מוודאים את כל הסטטוסים כולל פסקי זמן ושגיאות. לאחר בדיקות מוצלחות — השקה לייצור. לקוחות חוסכים עד 30% בעמלות באמצעות אופטימיזציית ניתוב. כך תוכל לקבל תשלומי קריפטו בצורה חלקה.
כיצד להגדיר IPN כדי למנוע חיובים כפולים?
חיובים כפולים מתרחשים אם IPN מגיע שוב ושוב עקב עיכובי רשת. פתרון: השתמש ב-import express from "express"; const router = express.Router(); router.post("/webhooks/coinpayments", express.urlencoded({ extended: true }), (req, res) => { // Верифицируем подпись const hmac = crypto .createHmac("sha512", process.env.CP_IPN_SECRET!) .update(new URLSearchParams(req.body).toString()) .digest("hex"); if (hmac !== req.headers["hmac"]) { return res.status(400).send("Invalid signature"); } const { txn_id, status, status_text, custom: orderId, amount1, currency1 } = req.body; // status >= 100 или status == 2 — полное подтверждение // status >= 0 — в обработке // status < 0 — ошибка/отмена if (parseInt(status) >= 100 || parseInt(status) === 2) { // Кредитовать заказ orderId processConfirmedPayment(orderId, txn_id, amount1, currency1); } res.send("IPN OK"); // CoinPayments ожидает этот ответ }); ייחודי עם בדיקת ייחודיות במסד הנתונים. הבקשה הראשונה מעובדת, האחרות מתעלמות. כמו כן, ודא ש-IPN OK מכיל את מזהה ההזמנה שלך — זה מאפשר התאמת תשלום להזמנה אם IPN מתעכב.
נוסף: פרטי אימות HMAC
HMAC מחושב על כל גוף הבקשה הגולמי ללא פענוח תווים מקודדים ב-URL. CoinPayments מצפה למחרוזת הקסדצימלית באורך 128 תווים. אם החתימה אינה תואמת, הבקשה נדחית.
למה CoinPayments על פני שערים אחרים לתשלומים רב-מטבעיים?
בהשוואה למעבדים אחרים, CoinPayments מציע אחת מהרשתות הרחבות ביותר של מטבעות נתמכים — מעל 2000. זה פי כמה יותר מהמתחרה הממוצע. לדוגמה, NextPay תומך רק ב-200 מטבעות. עמלת העסקה של CoinPayments היא 0.3% (קבועה), בעוד מתחרים גובים 0.5–1%. אנו עוזרים לבחור את הפתרון האופטימלי לעסק שלך ולהגדיר בחירה אוטומטית של מטבע עם העמלה הנמוכה ביותר.
בעיות נפוצות ופתרונות
-
פסק זמן לעסקה: ברירת מחדל שעתיים. המשתמש עלול לא לסיים. הגדר באמצעות פרמטר
txn_id, מקסימום 24 שעות. בפסק זמן, מטבעות שמגיעים מאוחר יותר עדיין מתקבלים כתשלום יתר — טפל בנפרד. - IPN לא מגיע: CoinPayments דורש כתובת URL נגישה לציבור. לפיתוח — ngrok או דומה. בייצור, ודא שחומת האש לא חוסמת בקשות נכנסות מכתובות ה-IP של CoinPayments.
-
הבדלי שערי חליפין:
txn_idב-IPN הוא הסכום במטבע המקורי (USD),customבקריפטו. אל תסתמך רק על סכום הקריפטו — השער עלול להשתנות.
סטטוסי תשלום
| סטטוס | משמעות |
|---|---|
| -2 | החזר / מחלוקת |
| -1 | בוטל / פסק זמן |
| 0 | ממתין למטבעות |
| 1 | התקבל, אך אישורים נמוכים |
| 2 | הושלם (עבור חלק מהמטבעות) |
| 3 | בתור לתשלום לילי |
| 100 | אושר במלואו |
פרמטרי IPN
| פרמטר IPN | תיאור |
|---|---|
| txn_id | מזהה עסקה ייחודי |
| status | קוד סטטוס (0,1,2,100 וכו') |
| amount1 | סכום במטבע המקורי |
| amount2 | סכום במטבע הקריפטוגרפי |
| currency1 | מטבע החשבונית |
| currency2 | מטבע התשלום הקריפטוגרפי |
| custom | מזהה ההזמנה הפנימי שלך |
מה כלול
- תיעוד מלא על IPN ו-API של CoinPayments.
- הגדרת גישה ואחסון מאובטח של מפתחות.
- הדרכת צוות על טיפול בסטטוסים.
- חודש תמיכה לאחר ההשקה.
הזמן אינטגרציה עם פעולה יציבה מובטחת. קבל ייעוץ חינם ממהנדס — פשוט צור קשר.







