שילוב CoinPayments: הגדרת API, IPN ומערכת תשלומים בקריפטו

אנו משלבים את [CoinPayments](https://www.coinpayments.net) כדי לקבל תשלומים ביותר מ-2000 מטבעות קריפטו באמצעות API יחיד. על פי <cite>התיעוד הרשמי של API של CoinPayments</cite>, הוא תומך ביותר מ-2000 מטבעות. אנו מטפלים ב-IPN, בסטטוסים ובשגיאות אופייניות. דוגמה: במרקטפלייס בעומס גבוה, $

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

שאלות נפוצות

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

  • 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

אנו משלבים את 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. ניתוח
  2. עיצוב
  3. יישום
  4. בדיקות והשקה

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

שלב 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.
  • הגדרת גישה ואחסון מאובטח של מפתחות.
  • הדרכת צוות על טיפול בסטטוסים.
  • חודש תמיכה לאחר ההשקה.

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