מדוע ווקומרס לא תומכת באופן מובנה בקריפטו וכיצד לתקן זאת
בליבת ווקומרס אין מנגנונים לטיפול בעסקאות בלוקצ'יין, ולכן קבלת קריפטו דורשת אינטגרציה. שתי דרכים: תוסף מוכן מספק (CoinGate, NOWPayments, Coinbase Commerce) או שער תשלום מותאם אישית לווקומרס עם ארנק משלך. ההבדל הוא בשמירה על הנכסים, בעמלות וברמת השליטה. אנו משתמשים בשתי הגישות, ולהלן נפרט מתי כל אחת משתלמת יותר.
בעיות נפוצות בשילוב תשלומי קריפטו בווקומרס וכיצד אנו פותרים אותן
תנודתיות בשער החליפין וקביעת הסכום
בין יצירת ההזמנה לתשלום עוברות 10–20 דקות—השער יכול להשתנות ב-2–5%. אם לא קובעים את סכום הקריפטו, החנות מסתכנת בקבלת פחות כסף. הפתרון שלנו: בעת התשלום, אנו מביאים את השער דרך Chainlink Oracle (או API של בורסה) ושומרים את הערך ב-satoshi/wei. אנו קובעים תוקף הזמנה של 15–20 דקות; לאחר פקיעתו, המשתמש עובר להזמנה חדשה עם השער העדכני. זה מפחית את סיכון התנודתיות ל-0.1%.
תשלום חסר ותשלום יתר
בשל טעויות משתמש או עיכובי רשת, חלק מהכספים עשויים שלא להגיע. הטיפול שלנו:
| סטטוס | פעולה |
|---|---|
| paid | סכום מלא—ההזמנה הושלמה |
| underpaid | סטטוס בהמתנה, מייל למנהל |
| overpaid | קבלת הכל, עודף כבונוס או החזר |
| expired | ההזמנה בוטלה, כספים לא מתקבלים |
אנו גם בודקים _crypto_payment_id ייחודי כדי למנוע עיבוד כפול של webhook. קריאות כפולות לא משנות את סטטוס ההזמנה אם היא כבר הושלמה. רישום דרך WC_Logger.
כיצד לבחור בין תוסף מוכן לשער מותאם אישית
תוספים מוכנים (CoinGate, NOWPayments) טובים להתחלה מהירה: ההתקנה אורכת 1–2 שעות, עמלת הספק 1–3%. עם זאת, מאבדים שליטה על הכספים ולא ניתן לשנות את לוגיקת העיבוד. שער מותאם אישית נותן שליטה מלאה: אתם מנהלים את הארנק, העמלות הן רק גז הרשת ($0.01–$0.50 לעסקה). עם נפח של מעל 500 הזמנות בחודש, פתרון מותאם מחזיר את ההשקעה תוך 3–4 חודשים וחוסך עד 40% בעמלות—רווחי פי 2-3 בהשוואה לתוספים מוכנים.
איך אנחנו עושים את זה: מקרה של שער מותאם אישית על Polygon
לקוח רצה לקבל USDT על Polygon עם עמלות מינימליות. תוספים מוכנים לא התאימו—היה צורך בצומת משלהם ובלוגיקת החזרים מותאמת. פיתחנו שער תשלום לווקומרס ש:
- משתמש ב-
ethers.jsכדי לחתום על עסקאות בשרת (מיקרוסרוויס Node.js); - קובע את השער דרך פיד Chainlink USDT/USD;
- מייצר כתובת הפקדה ייחודית לכל הזמנה;
- מעבד webhook מהצומת עם אימות חתימה (EIP-712).
להלן המבנה של מחלקת WC_Crypto_Gateway. ההתקנה ארכה 5 ימים; הלקוח קיבל 0% עמלות (רק גז ~$0.01 להעברה) ושליטה מלאה.
class WC_Crypto_Gateway extends WC_Payment_Gateway { public function __construct() { $this->id = 'crypto_gateway'; $this->method_title = 'Crypto Payment'; $this->method_description = 'Accept cryptocurrency payments'; $this->has_fields = false; $this->supports = ['products']; $this->init_form_fields(); $this->init_settings(); $this->title = $this->get_option('title'); $this->description = $this->get_option('description'); $this->api_key = $this->get_option('api_key'); add_action('woocommerce_update_options_payment_gateways_' . $this->id, [$this, 'process_admin_options'] ); add_action('woocommerce_api_' . $this->id, [$this, 'handle_webhook']); } public function process_payment($order_id) { $order = wc_get_order($order_id); // Создаём платёжный запрос через наш API $payment = $this->create_crypto_payment([ 'amount' => $order->get_total(), 'currency' => get_woocommerce_currency(), 'order_id' => $order_id, 'callback_url' => WC()->api_request_url($this->id), 'success_url' => $this->get_return_url($order), ]); if (is_wp_error($payment)) { wc_add_notice('Payment error: ' . $payment->get_error_message(), 'error'); return ['result' => 'fail']; } // Сохраняем внешний ID для reconciliation $order->update_meta_data('_crypto_payment_id', $payment['id']); $order->update_status('pending', 'Awaiting crypto payment'); $order->save(); return [ 'result' => 'success', 'redirect' => $payment['payment_url'], ]; } public function handle_webhook() { $payload = file_get_contents('php://input'); $data = json_decode($payload, true); if (!$this->verify_webhook_signature($payload, $_SERVER['HTTP_X_SIGNATURE'] ?? '')) { status_header(400); exit('Invalid signature'); } $order = wc_get_order($data['order_id']); if (!$order) { status_header(404); exit('Order not found'); } switch ($data['status']) { case 'paid': $order->payment_complete($data['payment_id']); $order->add_order_note(sprintf( 'Crypto payment confirmed. Received %s %s', $data['amount_received'], $data['currency'] )); break; case 'expired': $order->update_status('cancelled', 'Crypto payment expired'); break; case 'underpaid': $order->update_status('on-hold', sprintf( 'Underpayment: expected %s, received %s', $data['amount_expected'], $data['amount_received'] )); break; } status_header(200); exit('OK'); } } רישום התוסף
// crypto-payment-gateway.php (в wp-content/plugins/) /** * Plugin Name: Crypto Payment Gateway * Description: Custom cryptocurrency payment gateway * Version: 1.0.0 * Requires Plugins: woocommerce */ if (!defined('ABSPATH')) exit; add_action('plugins_loaded', function() { if (!class_exists('WC_Payment_Gateway')) return; require_once plugin_dir_path(__FILE__) . 'includes/class-wc-crypto-gateway.php'; }); כיצד להגדיר תשלומי קריפטו בווקומרס
- בחרו שיטת אינטגרציה—תוסף מוכן או שער מותאם אישית. אם אתם צריכים קבלה ללא שמירת נכסים וללא מתווכים, לכו על מותאם אישית.
- התקינו והפעילו את התוסף (אם מוכן) או פרסו מיקרוסרוויס משלכם לחתימת עסקאות.
- הגדירו פרמטרים של השער—כתובת ארנק, מגבלות, תוקף הזמנה (אנו ממליצים על 15–20 דקות).
- הוסיפו כתובת webhook בהגדרות הספק או בצומת שלכם. פורמט כתובת:
class WC_Crypto_Gateway extends WC_Payment_Gateway { public function __construct() { $this->id = 'crypto_gateway'; $this->method_title = 'Crypto Payment'; $this->method_description = 'Accept cryptocurrency payments'; $this->has_fields = false; $this->supports = ['products']; $this->init_form_fields(); $this->init_settings(); $this->title = $this->get_option('title'); $this->description = $this->get_option('description'); $this->api_key = $this->get_option('api_key'); add_action('woocommerce_update_options_payment_gateways_' . $this->id, [$this, 'process_admin_options'] ); add_action('woocommerce_api_' . $this->id, [$this, 'handle_webhook']); } public function process_payment($order_id) { $order = wc_get_order($order_id); // Создаём платёжный запрос через наш API $payment = $this->create_crypto_payment([ 'amount' => $order->get_total(), 'currency' => get_woocommerce_currency(), 'order_id' => $order_id, 'callback_url' => WC()->api_request_url($this->id), 'success_url' => $this->get_return_url($order), ]); if (is_wp_error($payment)) { wc_add_notice('Payment error: ' . $payment->get_error_message(), 'error'); return ['result' => 'fail']; } // Сохраняем внешний ID для reconciliation $order->update_meta_data('_crypto_payment_id', $payment['id']); $order->update_status('pending', 'Awaiting crypto payment'); $order->save(); return [ 'result' => 'success', 'redirect' => $payment['payment_url'], ]; } public function handle_webhook() { $payload = file_get_contents('php://input'); $data = json_decode($payload, true); if (!$this->verify_webhook_signature($payload, $_SERVER['HTTP_X_SIGNATURE'] ?? '')) { status_header(400); exit('Invalid signature'); } $order = wc_get_order($data['order_id']); if (!$order) { status_header(404); exit('Order not found'); } switch ($data['status']) { case 'paid': $order->payment_complete($data['payment_id']); $order->add_order_note(sprintf( 'Crypto payment confirmed. Received %s %s', $data['amount_received'], $data['currency'] )); break; case 'expired': $order->update_status('cancelled', 'Crypto payment expired'); break; case 'underpaid': $order->update_status('on-hold', sprintf( 'Underpayment: expected %s, received %s', $data['amount_expected'], $data['amount_received'] )); break; } status_header(200); exit('OK'); } }. - בדקו בסביבת ארגז חול—שלמו הזמנת בדיקה, בדקו תשלום חסר, פקיעת תוקף, webhooks כפולים.
- עברו ללייב—לאחר בדיקות מוצלחות, הפעילו מצב פעיל. עקבו דרך
// crypto-payment-gateway.php (в wp-content/plugins/) /** * Plugin Name: Crypto Payment Gateway * Description: Custom cryptocurrency payment gateway * Version: 1.0.0 * Requires Plugins: woocommerce */ if (!defined('ABSPATH')) exit; add_action('plugins_loaded', function() { if (!class_exists('WC_Payment_Gateway')) return; require_once plugin_dir_path(__FILE__) . 'includes/class-wc-crypto-gateway.php'; });.
כיצד אנו בודקים ומבטיחים אמינות
אנו תמיד עוברים תרחישים בסביבת ארגז חול: תשלום מוצלח, פקיעת תוקף, תשלום חסר, webhook כפול, איפוס שער. אנו משתמשים ב-https://example.com/wc-api/crypto_gateway לכל האירועים.
| שלב | מה אנחנו עושים | משך |
|---|---|---|
| ניתוח | איסוף דרישות, בחירת ספק או כתיבת מפרט למותאם אישית | 1–2 ימים |
| יישום | קידוד שער, webhook, מטפלים | 3–7 ימים |
| בדיקות | כיסוי כל המקרים בסביבת ארגז חול | 1–2 ימים |
| פריסה | פריסה לסביבת ייצור, הגדרת ניטור | יום אחד |
מה כלול
- בחירה והתקנה של ספק תשלומים (CoinGate, BTCPay Server, צומת משלך) או פיתוח שער מותאם אישית מאפס.
- מחלקת שער תשלום מלאה לווקומרס עם תמיכה בכל הסטטוסים.
- מטפל webhook עם אימות HMAC.
- טיפול במקרי קצה: הפרש שער, תשלום חסר, פקיעת תוקף, כפילויות.
- אופטימיזציית גז לחוזים חכמים (שימוש ב-
WC_Loggerבלוקים,WC_Loggerמבנים)—הפחתת עלויות ב-15–20%. - אינטגרציה עם
uncheckedלניפוי באגים. - תיעוד התקנה ותפעול.
לצוות שלנו ניסיון של 6+ שנים בפיתוח בלוקצ'יין ומעל 40 אינטגרציות מוצלחות של מערכות תשלום בווקומרס. יש לכם מקרה מורכב? קבלו ייעוץ—נמצא את הפתרון האופטימלי לתקציב וללוח הזמנים שלכם. צרו קשר להערכת עלות. הזמינו אינטגרציית תשלומי קריפטו לווקומרס, ואנו נגדיר הכל לעסק שלכם.







