תשלומי קריפטו במסחר אלקטרוני: שער תשלום מותאם אישית

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

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

שאלות נפוצות

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

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

תשלומי קריפטו במסחר אלקטרוני: שער תשלום מותאם אישית

טעות אופיינית בשילוב קריפטו במסחר אלקטרוני: התייחסות אליו כאל עוד אמצעי תשלום בקופה הקיימת. במציאות, מדובר בתהליך שונה — לתשלומי קריפטו אין סופיות מיידית (למעט L2), אין החזרים (chargebacks), שער החליפין משתנה בזמן שהמשתמש הולך לארנק שלו, ותשלום חלקי הוא מקרה קצה אמיתי, לא תיאורטי. מניסיוננו, זיהינו צווארי בקבוק אופייניים: חישוב גז שגוי, חוסר בגלגול לאחור (rollback) לתשלומים חלקיים, ובעיות באימות עסקאות ב-L2. להלן פירוט מלא של הארכיטקטורה, מבחירת ספק ועד דיווח חשבונאי.

אינטגרציה מותאמת אישית מחזירה את ההשקעה פי 3 מהר יותר מפתרונות מתארחים (hosted) להיקפים של 100 תשלומים ביום. אנו משלבים תשלומי קריפטו מאז ראשית התחום וראינו חנויות מאבדות עד 12% מההכנסות עקב טיפול לא נכון בניואנסים.

בחירת גישה: מתארח (Hosted) מול מותאם אישית

השוואה בין שלוש אפשרויות:

פרמטר שירות מוכן (NOWPayments, CoinGate) מותאם אישית דרך API של ספק מותאם אישית מלא On-Chain
זמן השקה 1-2 ימים 3-5 ימים 2-4 שבועות
עמלה 0.5–1% 0.1–0.5% (רשת בלבד) גז רשת בלבד
מטבעות נתמכים רשימה קבועה כל ERC-20/BEP-20 כל (Solana, Bitcoin)
פרטיות צד שלישי רואה עסקאות הספק רואה רק תשלומים פרטיות מלאה

שירותים מוכנים מתאימים להיקפים של עד כמה מאות תשלומים בחודש. אינטגרציה מותאמת אישית מוצדקת כאשר:

  • יש צורך בסט ספציפי של מטבעות/רשתות שאינם נתמכים על ידי הספק
  • דרישות פרטיות (הלקוח לא רוצה שצדדים שלישיים יראו עסקאות)
  • היקפים גבוהים שבהם עמלות הספק משמעותיות
  • לוגיקה ספציפית (למשל, המרה אוטומטית דרך DEX)

להלן — אינטגרציה מותאמת אישית, מכיוון שהיא דורשת יותר פתרונות טכניים. הניסיון שלנו: 30+ פרויקטים, אחריות קוד ל-12 חודשים.

WooCommerce: תוסף שער תשלום מותאם אישית

WooCommerce מספקת את המחלקה המופשטת WC_Payment_Gateway — פשוט להרחיב אותה:

class WC_Crypto_Gateway extends WC_Payment_Gateway {
    public function __construct() {
        $this->id = 'crypto_payment';
        $this->title = 'Оплата криптовалютой';
        $this->method_description = 'Bitcoin, Ethereum, USDT и другие';
        $this->supports = ['products'];
        $this->init_form_fields();
        $this->init_settings();
        add_action('woocommerce_update_options_payment_gateways_' . $this->id, [$this, 'process_admin_options']);
        add_action('woocommerce_api_crypto_payment', [$this, 'handle_webhook']);
    }

    public function process_payment($order_id): array {
        $order = wc_get_order($order_id);
        // Создаём платёж во внешнем сервисе или генерируем адрес
        $payment = $this->create_crypto_payment($order);
        // Сохраняем данные для отображения инструкций
        $order->update_meta_data('_crypto_payment_id', $payment['id']);
        $order->update_meta_data('_crypto_pay_address', $payment['address']);
        $order->update_meta_data('_crypto_pay_amount', $payment['amount']);
        $order->update_meta_data('_crypto_expires_at', $payment['expires_at']);
        $order->set_status('pending', 'Ожидание криптоплатежа');
        $order->save();
        return [
            'result' => 'success',
            'redirect' => $this->get_return_url($order),
        ];
    }

    public function handle_webhook(): void {
        $payload = file_get_contents('php://input');
        $signature = $_SERVER['HTTP_X_PAYMENT_SIGNATURE'] ?? '';
        if (!$this->verify_signature($payload, $signature)) {
            wp_die('Invalid signature', 401);
        }
        $data = json_decode($payload, true);
        $order = wc_get_order($data['order_id']);
        if (!$order) wp_die('Order not found', 404);
        if ($data['status'] === 'confirmed') {
            $order->payment_complete($data['transaction_hash']);
            $order->add_order_note(
                sprintf('Криптоплатёж подтверждён. TX: %s', $data['transaction_hash'])
            );
        }
        wp_die('OK', 200);
    }
}

דף התודה (לאחר הפנייה) צריך להציג את הכתובת, קוד QR, והסכום עם טיימר. WooCommerce קוראת ל-class WC_Crypto_Gateway extends WC_Payment_Gateway { public function __construct() { $this->id = 'crypto_payment'; $this->title = 'Оплата криптовалютой'; $this->method_description = 'Bitcoin, Ethereum, USDT и другие'; $this->supports = ['products']; $this->init_form_fields(); $this->init_settings(); add_action('woocommerce_update_options_payment_gateways_' . $this->id, [$this, 'process_admin_options']); add_action('woocommerce_api_crypto_payment', [$this, 'handle_webhook']); } public function process_payment($order_id): array { $order = wc_get_order($order_id); // Создаём платёж во внешнем сервисе или генерируем адрес $payment = $this->create_crypto_payment($order); // Сохраняем данные для отображения инструкций $order->update_meta_data('_crypto_payment_id', $payment['id']); $order->update_meta_data('_crypto_pay_address', $payment['address']); $order->update_meta_data('_crypto_pay_amount', $payment['amount']); $order->update_meta_data('_crypto_expires_at', $payment['expires_at']); $order->set_status('pending', 'Ожидание криптоплатежа'); $order->save(); return [ 'result' => 'success', 'redirect' => $this->get_return_url($order), ]; } public function handle_webhook(): void { $payload = file_get_contents('php://input'); $signature = $_SERVER['HTTP_X_PAYMENT_SIGNATURE'] ?? ''; if (!$this->verify_signature($payload, $signature)) { wp_die('Invalid signature', 401); } $data = json_decode($payload, true); $order = wc_get_order($data['order_id']); if (!$order) wp_die('Order not found', 404); if ($data['status'] === 'confirmed') { $order->payment_complete($data['transaction_hash']); $order->add_order_note( sprintf('Криптоплатёж подтверждён. TX: %s', $data['transaction_hash']) ); } wp_die('OK', 200); } } שמוביל לדף התודה הסטנדרטי — ניתן להתאים אישית באמצעות פעולת get_return_url().

Shopify: שימוש ב-Payment Apps API

Shopify אינה מאפשרת PHP מותאם אישית שרירותי. כדי לשלב קריפטו, יש ליצור אפליקציית Shopify דרך לוח המחוונים של Partner ולהשתמש ב-Payments Apps API.

העיקרון: האפליקציה שלך נרשמת כספק תשלום. במהלך הקופה, Shopify שולחת בקשת HTTP לנקודת הקצה שלך עם נתוני ההזמנה, אתה מחזיר URL להפניה לדף התשלום שלך, ולאחר אישור, אתה שולח resolved/rejected דרך GraphQL mutation.

// Shopify вызывает этот endpoint
app.post('/shopify/payment', async (req, res) => {
  const { gid, amount, currency, cancelUrl, kind } = req.body;
  // Создаём внутренний платёж
  const payment = await createCryptoInvoice({
    shopifyOrderGid: gid,
    fiatAmount: parseFloat(amount),
    fiatCurrency: currency,
  });
  // Редиректим на нашу payment страницу
  res.json({
    redirect_url: `${process.env.APP_URL}/pay/${payment.id}`,
  });
});

// После подтверждения платежа
async function notifyShopifyPaymentComplete(paymentGid: string, txHash: string) {
  const mutation = `
    mutation PaymentSessionResolve($id: ID!) {
      paymentSessionResolve(id: $id) {
        paymentSession {
          id
          state {
            ... on PaymentSessionStateResolved {
              code
            }
          }
        }
        userErrors {
          field
          message
        }
      }
    }
  `;
  await shopifyGraphQL(mutation, { id: paymentGid });
}

כיצד שער החליפין והטיימר משפיעים על חוויית המשתמש וההכנסות?

המשתמש רואה מחיר של $99, לוחץ על "שלם בקריפטו", ומגיע לדף עם סכום של 0.0271 ETH. סכום זה תקף ל-15–30 דקות. אם המשתמש איטי או שהשער משתנה משמעותית, יש צורך במנגנון רענון.

הטיימר בדף התשלום לא צריך להיות דקורטיבי — כאשר הוא פג, יש לעדכן את החשבונית אוטומטית:

// Клиентский код
let expiresAt = new Date(invoice.expiresAt);
const timer = setInterval(async () => {
  const remaining = expiresAt.getTime() - Date.now();
  if (remaining <= 0) {
    clearInterval(timer);
    // Запрашиваем новый invoice с актуальным курсом
    const refreshed = await fetch(`/api/payment/${invoiceId}/refresh`, {
      method: 'POST'
    });
    const newInvoice = await refreshed.json();
    expiresAt = new Date(newInvoice.expiresAt);
    updateUI(newInvoice); // Обновляем QR и сумму
  }
}, 1000);

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

התאמה ודיווח

לצורכי חשבונאות, יש להמיר את סכום הקריפטו לפייאט (fiat) בזמן הקבלה. לרשום במסד הנתונים: woocommerce_thankyou_{gateway_id}, // Shopify вызывает этот endpoint app.post('/shopify/payment', async (req, res) => { const { gid, amount, currency, cancelUrl, kind } = req.body; // Создаём внутренний платёж const payment = await createCryptoInvoice({ shopifyOrderGid: gid, fiatAmount: parseFloat(amount), fiatCurrency: currency, }); // Редиректим на нашу payment страницу res.json({ redirect_url: `${process.env.APP_URL}/pay/${payment.id}`, }); }); // После подтверждения платежа async function notifyShopifyPaymentComplete(paymentGid: string, txHash: string) { const mutation = ` mutation PaymentSessionResolve($id: ID!) { paymentSessionResolve(id: $id) { paymentSession { id state { ... on PaymentSessionStateResolved { code } } } userErrors { field message } } } `; await shopifyGraphQL(mutation, { id: paymentGid }); } , // Клиентский код let expiresAt = new Date(invoice.expiresAt); const timer = setInterval(async () => { const remaining = expiresAt.getTime() - Date.now(); if (remaining <= 0) { clearInterval(timer); // Запрашиваем новый invoice с актуальным курсом const refreshed = await fetch(`/api/payment/${invoiceId}/refresh`, { method: 'POST' }); const newInvoice = await refreshed.json(); expiresAt = new Date(newInvoice.expiresAt); updateUI(newInvoice); // Обновляем QR и сумму } }, 1000); , crypto_amount, crypto_currency, fiat_amount. מקור השער — Chainlink (on-chain) או CoinGecko API (off-chain) עם חותמת זמן. זה קריטי לדיווח מס.

מה לעשות בנוגע לתשלום חלקי?

מקרה קצה: המשתמש שלח 0.02 ETH במקום 0.0271 ETH. ללא לוגיקה מיוחדת, ההזמנה תיתקע. פתרון: ברמת ה-worker, לבדוק שהסכום שהתקבל >= הצפוי, אחרת לסמן כ-fiat_currency וליצור חשבונית שנייה עבור היתרה. לכלול תמיכה במספר עסקאות בהזמנה אחת.

למה לבחור באינטגרציה מותאמת אישית?

אינטגרציה מותאמת אישית נותנת לך שליטה מלאה על המחסנית (stack): מבחירת בלוקצ'יין ועד לוגיקת טיפול בשגיאות. אתה לא תלוי בעמלות ובמגבלות של ספקים. בהיקפים מ-100 תשלומים ביום, החיסכון בעמלות עולה על עלויות הפיתוח תוך 3 חודשים. אנו גם מיישמים הגנה מפני התקפות reentrancy וממטבים את צריכת הגז לפעולות המוניות.

אופטימיזציית גז להיקפי תשלומים גבוהים השתמשו באורקל מחיר גז ובעסקאות אצווה (batch) דרך relayer. זה מפחית את עלויות העמלה בעד 40%.

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

  1. ביקורת טכנית של החנות הנוכחית שלך (CMS, אחסון, מודולי תשלום)
  2. בחירת ארכיטקטורה: מתארח או מותאם אישית, on-chain או L2
  3. פיתוח שער התשלום (WooCommerce, Shopify, מותאם אישית)
  4. אינטגרציה עם ארנקים (MetaMask, WalletConnect, Ledger)
  5. הגדרת webhooks וסטטוסי הזמנות
  6. פיתוח דף תשלום עם קוד QR וטיימר
  7. אינטגרציה של אורקל שער (Chainlink) או API של בורסה
  8. בדיקות מלאות ב-testnet
  9. ביקורת חוזה חכם (Slither, Mythril) — במידת הצורך
  10. תיעוד והדרכת צוות
  11. תמיכה לאחר השחרור למשך חודש

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