מבוא
עם ניסיון של למעלה מ-5 שנים ו-30+ אינטגרציות מוצלחות, אנו מספקים פתרונות תשלומי קריפטו אמינים. שילבתם שער תשלומי קריפטו אבל ה-webhooks לא עוברים, הסטטוסים נתקעים, ולקוחות מתלוננים על תשלומים חסרים? הסיבה האופיינית היא היעדר אימות חתימת התראה ומיפוי סטטוס שגוי. אנו פותרים זאת תוך 1–3 ימים: מחברים את CoinGate, NOWPayments, או BitPay עם טיפול מלא ב-webhook, תשלומים חלקיים, ודפי בחירת מטבעות מותאמים אישית. אנו משתמשים בתבניות מוכחות: אימות HMAC, תורים לניסיונות חוזרים, ורישום של כל בקשת IPN. האינטגרציה המלאה שלנו מתחילה מ-$2,000 וכוללת את כל מה שדרוש להקמה מוכנה לייצור.
כיצד לשלב שער תשלומי קריפטו (שלב אחרי שלב)
- בחרו ספק: CoinGate, NOWPayments, או BitPay בהתאם לצרכים שלכם (עמלות, תמיכה במטבעות, דרישות אימות).
- הירשמו וקבלו מפתחות API. עבור NOWPayments, נדרש גם סוד IPN.
- יישמו את הלקוח באמצעות דוגמאות הקוד שלנו (PHP, Laravel) או המחסנית שלכם.
- הגדירו webhooks עם אימות חתימה קפדני (HMAC-SHA512 עבור NOWPayments, בדיקת token עבור CoinGate, סוד IPN עבור BitPay).
- בדקו במצב sandbox כדי להבטיח מיפוי סטטוס נכון (לדוגמה, 'finished' → 'paid').
- צאו לאוויר לאחר בדיקות יסודיות. אנו מספקים 30 ימי תמיכה לאחר ההשקה.
הגדרת IPN נכונה מבטיחה התראות אמינות. כצובר תשלומי קריפטו, NOWPayments תומך ביותר מ-300 מטבעות—בחירה מצוינת לגמישות גבוהה. מקור: NOWPayments FAQ
אילו בעיות אנו פותרים
אימות Webhook. כל ספק משתמש במנגנון חתימה משלו: HMAC-SHA512 (NOWPayments), token (CoinGate), סוד IPN (BitPay). אם מדלגים על הבדיקה, תוקף יכול להתחזות להתראה ולשנות את סטטוס ההזמנה. אנו תמיד מיישמים אימות חתימה קפדני.
תשלומים חלקיים. NOWPayments יכול לטפל בהם, אך אין אפשרויות השלמה סטנדרטיות. יש ליישם לוגיקת התראות ובמידת הצורך החזר דרך API. בפועל, 90% מהמשתמשים משלימים תוך שעה אם הם רואים הוראה ברורה.
בחירת מטבע. הקונה רוצה לשלם עם המטבע הקריפטוגרפי שלו. הצובר מציע דף בחירה, אך לעיתים קרובות נדרש דף מותאם אישית—המוטמע בתשלום באתר. אנו יכולים ליצור דף כזה עם הצגת יתרה וקוד QR.
איך אנחנו עושים את זה
אנו משתמשים במחסנית: PHP 8.3, Laravel 11, Guzzle. הלקוח עבור NOWPayments נראה כך:
use GuzzleHttp\Client;
class NOWPaymentsClient
{
private Client $http;
private string $apiKey;
public function __construct(string $apiKey, bool $sandbox = false)
{
$this->apiKey = $apiKey;
$baseUri = $sandbox ? 'https://api-sandbox.nowpayments.io/v1/' : 'https://api.nowpayments.io/v1/';
$this->http = new Client([
'base_uri' => $baseUri,
'headers' => ['x-api-key' => $apiKey],
]);
}
public function createPayment(array $params): array
{
$response = $this->http->post('payment', ['json' => $params]);
return json_decode($response->getBody()->getContents(), true);
}
public function getMinAmount(string $currency, string $fiatCurrency = 'usd'): float
{
$response = $this->http->get("min-amount?currency_from={$currency}¤cy_to={$fiatCurrency}");
return json_decode($response->getBody()->getContents(), true)['min_amount'];
}
}
// Создание платежа
$client = new NOWPaymentsClient(env('NOWPAYMENTS_API_KEY'), app()->isLocal());
$payment = $client->createPayment([
'price_amount' => $order->total,
'price_currency' => 'usd',
'pay_currency' => 'btc', // или 'eth', 'usdttrc20', и т.д.
'order_id' => (string) $order->id,
'order_description'=> 'Заказ #' . $order->id,
'ipn_callback_url' => route('payments.nowpayments.webhook'),
'success_url' => route('orders.success', $order),
'cancel_url' => route('checkout'),
]);
הפנו את הקונה אל use GuzzleHttp\Client; class NOWPaymentsClient { private Client $http; private string $apiKey; public function __construct(string $apiKey, bool $sandbox = false) { $this->apiKey = $apiKey; $baseUri = $sandbox ? 'https://api-sandbox.nowpayments.io/v1/' : 'https://api.nowpayments.io/v1/'; $this->http = new Client([ 'base_uri' => $baseUri, 'headers' => ['x-api-key' => $apiKey], ]); } public function createPayment(array $params): array { $response = $this->http->post('payment', ['json' => $params]); return json_decode($response->getBody()->getContents(), true); } public function getMinAmount(string $currency, string $fiatCurrency = 'usd'): float { $response = $this->http->get("min-amount?currency_from={$currency}¤cy_to={$fiatCurrency}"); return json_decode($response->getBody()->getContents(), true)['min_amount']; } } // Создание платежа $client = new NOWPaymentsClient(env('NOWPAYMENTS_API_KEY'), app()->isLocal()); $payment = $client->createPayment([ 'price_amount' => $order->total, 'price_currency' => 'usd', 'pay_currency' => 'btc', // или 'eth', 'usdttrc20', и т.д. 'order_id' => (string) $order->id, 'order_description'=> 'Заказ #' . $order->id, 'ipn_callback_url' => route('payments.nowpayments.webhook'), 'success_url' => route('orders.success', $order), 'cancel_url' => route('checkout'), ]); . NOWPayments מציג את דף בחירת המטבעות וקוד QR עם כתובת התשלום.
CoinGate: API
$payment = $coingate->order->create([ 'order_id' => $order->id, 'price_amount' => $order->total, 'price_currency' => 'EUR', 'receive_currency' => 'EUR', // получать в евро, не в крипте 'title' => 'Заказ #' . $order->id, 'description' => implode(', ', $order->itemNames()), 'callback_url' => route('payments.coingate.webhook'), 'success_url' => route('orders.success', $order), 'cancel_url' => route('checkout'), 'token' => $order->token, // уникальный токен для безопасности ]); // Редирект на $payment->payment_url טיפול ב-Webhook — NOWPayments
NOWPayments שולח IPN אל $payment['invoice_url']:
public function handleNowPaymentsWebhook(Request $request): Response
{
$raw = $request->getContent();
$signature = $request->header('x-nowpayments-sig');
// Верификация подписи
$sorted = json_encode(
collect(json_decode($raw, true))->sortKeys()->all(),
JSON_UNESCAPED_UNICODE
);
$expected = hash_hmac('sha512', $sorted, config('services.nowpayments.ipn_secret'));
if (!hash_equals($expected, $signature)) {
return response('Forbidden', 403);
}
$data = json_decode($raw, true);
$order = Order::find($data['order_id']);
$statusMap = [
'waiting' => 'pending',
'confirming' => 'pending',
'confirmed' => 'paid',
'sending' => 'paid',
'partially_paid' => 'partially_paid',
'finished' => 'paid',
'failed' => 'failed',
'refunded' => 'refunded',
'expired' => 'expired',
];
$order->update(['payment_status' => $statusMap[$data['payment_status']] ?? 'unknown']);
if ($data['payment_status'] === 'finished') {
$order->markAsPaid($data['payment_id']);
event(new OrderPaid($order));
}
return response('OK', 200);
} Webhook — CoinGate
CoinGate שולח POST מקודד טופס עם שדה $payment = $coingate->order->create([ 'order_id' => $order->id, 'price_amount' => $order->total, 'price_currency' => 'EUR', 'receive_currency' => 'EUR', // получать в евро, не в крипте 'title' => 'Заказ #' . $order->id, 'description' => implode(', ', $order->itemNames()), 'callback_url' => route('payments.coingate.webhook'), 'success_url' => route('orders.success', $order), 'cancel_url' => route('checkout'), 'token' => $order->token, // уникальный токен для безопасности ]); // Редирект на $payment->payment_url לאימות:
public function handleCoingateWebhook(Request $request): Response
{
$token = $request->input('token');
$orderId = $request->input('order_id');
$status = $request->input('status');
$order = Order::find($orderId);
if (!$order || $order->payment_token !== $token) {
return response('Forbidden', 403);
}
match ($status) {
'paid' => $order->markAsPaid($request->input('id')),
'canceled' => $order->update(['payment_status' => 'cancelled']),
'expired' => $order->update(['payment_status' => 'expired']),
default => null,
};
return response('OK', 200);
} בחירת מטבע ללקוח
רוב הצוברים מציגים דף בחירת מטבעות משלהם. אם אתם צריכים דף בחירת מטבעות מותאם אישית באתר שלכם, צרו חשבונית נפרדת לכל מטבע או הביאו את רשימת המטבעות הנתמכים דרך API וצרו חשבונית רק בעת הבחירה:
// NOWPayments: получить список монет
$currencies = $client->getAvailableCurrencies();
// Показать пользователю выпадающий список
// При выборе — создать payment с выбранной pay_currency תשלומים חלקיים
NOWPayments תומך בסטטוס partially_paid—המשתמש שילם פחות מהנדרש. תרחיש סטנדרטי: הודיעו למשתמש והציעו להשלים או להחזיר. החזר אוטומטי דרך API של NOWPayments זמין באמצעות נקודת הקצה ipn_callback_url, אך רק בקריפטו.
הבטחת אבטחת Webhook
אימות חתימה הוא המינימום החובה. בנוסף, אנו משתמשים ברשימת IP לבנה ורושמים כל בקשה. NOWPayments מפרסם את רשימת כתובות ה-IP שלו, CoinGate ממליץ לבדוק את ה-token, ו-BitPay תומך בסוד IPN. אנו מתעדים כל שלב כדי שתוכלו לשחזר את האימות. שיעור ההצלחה של מסירת ה-webhook שלנו הוא מעל 99.9%.
למה NOWPayments זול פי 2 מ-CoinGate?
השוו עמלות: NOWPayments – 0.5%, CoinGate – 1%. ההפרש הוא כפול. עם מחזור של $100,000, החיסכון הוא $500. לעסק עם מחזור חודשי של $50,000, שימוש ב-NOWPayments חוסך $250 בחודש בהשוואה ל-CoinGate. יתרה מכך, NOWPayments אינו דורש אימות עבור יחידים, מה שמאיץ את ההשקה. עלות האינטגרציה מתחילה מ-$2,000. הלקוחות שלנו בדרך כלל רואים החזר השקעה תוך 3 חודשים בזכות חיסכון בעמלות.
| ספק | מטבעות | עמלה | אימות | קהל יעד |
|---|---|---|---|---|
| NOWPayments | 300+ | 0.5% | לא נדרש (יחידים) | סטארטאפים, עסקים קטנים |
| CoinGate | 50+ | 1% | נדרש KYB | עסקים בינוניים |
| BitPay | 20+ | 1% | KYB + נפח מינימלי | עסקים גדולים |
טיפול בתשלומים חלקיים
אם המשתמש שלח פחות מהנדרש, NOWPayments משנה את הסטטוס ל-partially_paid. אנו ממליצים:
- צרו התראה (אימייל/טלגרם) עם גובה הפער.
- ספקו קישור לחשבונית חוזרת (תשלום חדש עם
public function handleNowPaymentsWebhook(Request $request): Response { $raw = $request->getContent(); $signature = $request->header('x-nowpayments-sig'); // Верификация подписи $sorted = json_encode( collect(json_decode($raw, true))->sortKeys()->all(), JSON_UNESCAPED_UNICODE ); $expected = hash_hmac('sha512', $sorted, config('services.nowpayments.ipn_secret')); if (!hash_equals($expected, $signature)) { return response('Forbidden', 403); } $data = json_decode($raw, true); $order = Order::find($data['order_id']); $statusMap = [ 'waiting' => 'pending', 'confirming' => 'pending', 'confirmed' => 'paid', 'sending' => 'paid', 'partially_paid' => 'partially_paid', 'finished' => 'paid', 'failed' => 'failed', 'refunded' => 'refunded', 'expired' => 'expired', ]; $order->update(['payment_status' => $statusMap[$data['payment_status']] ?? 'unknown']); if ($data['payment_status'] === 'finished') { $order->markAsPaid($data['payment_id']); event(new OrderPaid($order)); } return response('OK', 200); }). - אם ההשלמה לא מגיעה תוך 24 שעות, החזירו אוטומטית דרך API (אם הספק מאפשר).
הניסיון שלנו מראה ש-90% מהמשתמשים משלימים תוך שעה אם הם רואים הוראה ברורה.
מה כלול
- ביקורת על מערכת התשלומים הנוכחית והדרישות
- הגדרת חשבון ספק (אימות, מפתחות, סודות IPN)
- פיתוח לקוח ל-API (PHP/Laravel או מחסנית אחרת)
- יישום Webhook עם אימות חתימה ומיפוי סטטוס
- טיפול בתשלומים חלקיים (התראות, השלמה, החזר)
- דף בחירת מטבעות מותאם אישית (אופציונלי)
- תיעוד תוכנית התשלומים
- בדיקות Sandbox וייצור
- הדרכת צוות על פאנל הספק
- אחריות קוד – 30 ימי תמיכה
תהליך העבודה
| שלב | משך | תוצאה |
|---|---|---|
| אנליטיקה | יום אחד | מפרט אינטגרציה |
| עיצוב | יום אחד | ארכיטקטורת לקוח ו-webhook |
| יישום | 2–4 ימים | קוד עובד + בדיקות |
| בדיקות | 1–2 ימים | אישור עיבוד תשלומים תקין |
| השקה | יום אחד | קוד על שרת ייצור, ניטור |
קבלו ייעוץ על אינטגרציית תשלומי קריפטו. צרו קשר להערכת פרויקט—נעריך את הדרישות שלכם ונציע את הפתרון האופטימלי. בקשו אינטגרציה היום.







