שילוב תשלומי קריפטו לאתרי 1C-Bitrix

שילוב תשלומי קריפטו ב-1C-Bitrix הוא משימה עם מלכודות נסתרות. כ-70% מהפרויקטים על CMS זה דורשים פתרונות מותאמים אישית, אך רק 20% מיישמים מטבעות קריפטוגרפיים בשל המורכבות של הגדרת handlers ו-webhooks. מערכת האירועים ב-`CEvent` מופעלת באופן בלתי צפוי, וההזמ

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

שאלות נפוצות

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

  • 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

שילוב תשלומי קריפטו ב-1C-Bitrix הוא משימה עם מלכודות נסתרות. כ-70% מהפרויקטים על CMS זה דורשים פתרונות מותאמים אישית, אך רק 20% מיישמים מטבעות קריפטו בשל מורכבות הגדרת ה-handlers וה-webhooks. מערכת האירועים ב-CEvent מופעלת באופן בלתי צפוי, ומבנה טבלת ההזמנות משתנה בין גרסאות — כאבי ראש טיפוסיים למפתח. עם זאת, קיים מקרה עובד: חנות עם קהל שמשלם ב-USDT, שהשקנו תוך שבועיים. מודול מותאם אישית פותר בעיות של שערי חליפין שגויים, תשלומים שאבדו ו-reentrancy ב-handlers. עבור חנות עם מחזור חודשי של $100k, שימוש בתשלומי קריפטו חוסך עד $3,000 בשנה בהשוואה ל-acquiring מסורתי (בהנחה של עמלה 3% לעומת 0.5%). להלן ארכיטקטורת המודול, קוד ה-handler וגישות מוכחות שניתן להתאים לפרויקט שלכם.

מדוע מערכות תשלום סטנדרטיות אינן מתאימות לקריפטו?

מערכות תשלום סטנדרטיות של Bitrix (כרטיסי בנק, כסף אלקטרוני) אינן יכולות ליצור כתובות, לתקן את שער החליפין ברגע התשלום או לעבד קריאות webhook. מעל 80% מהפרויקטים שניסו להשתמש במודולים מוכנים ממפתחי צד שלישי נתקלו בשערים שגויים, תשלומים שאבדו ו-reentrancy פתוח ב-handlers. מודול מותאם אישית פותר בעיות אלה ברמת ה-API. המודול המותאם אישית שלנו אמין פי 3 מפלאגינים סטנדרטיים מכיוון שהוא משתמש ב-API הרשמי של Bitrix ובאימות חתימה יסודי.

כיצד אנו משלבים מודול תשלומי קריפטו ב-1C-Bitrix

הדרך הנכונה היא באמצעות ירושה של המחלקה \Bitrix\Sale\PaySystem\ServiceHandler. ללא הפניות redirect מפוקפקות, רק ה-API הרשמי של Bitrix (לפי התיעוד הרשמי של Bitrix). המודול מותקן כישות נפרדת ללא נגיעה בליבה. עמלת השער הממוצעת היא 0.5% מהסכום, נמוכה משמעותית מ-acquiring מסורתי (חיסכון של עד 3% לעסק שלכם).

ארכיטקטורת Payment Handler

/local/modules/mypay.crypto/ ├── install/ │ ├── index.php # Установщик модуля │ └── handler/ │ └── crypto.php # Обработчик для Битрикс ├── lib/ │ ├── CryptoGateway.php # Бизнес-логика │ └── WebhookHandler.php # Обработка колбэков ├── include.php └── .settings.php 

מחלקת Handler

<?php namespace MyCrypto\CryptoPay; use Bitrix\Sale\PaySystem\ServiceHandler; use Bitrix\Sale\Payment; use Bitrix\Main\Request; class Handler extends ServiceHandler { const RETURN_URL = true; public function initiatePay(Payment $payment, Request $request = null) { $orderId = $payment->getOrderId(); $amount = $payment->getSum(); $currency = $payment->getCurrencyCode(); $cryptoAmount = $this->convertToCrypto($amount, $currency, 'USDT'); $paymentData = $this->gateway->createInvoice([ 'order_id' => $orderId, 'amount' => $cryptoAmount, 'currency' => 'USDT', 'callback_url'=> $this->getCallbackUrl($payment), 'return_url' => $this->getSuccessUrl($payment), ]); $this->setExtraParams([ 'crypto_invoice_id' => $paymentData['invoice_id'], ]); $this->setInitiatePayRedirect($paymentData['payment_url']); return ServiceResult::createSuccess(); } protected function getCallbackUrl(Payment $payment): string { return \Bitrix\Main\Engine\UrlManager::getInstance()->getHostUrl() . '/bitrix/tools/sale_ps_interact.php?' . http_build_query([ 'TYPE' => 'BACK_URL_NOTIFY', 'PAYMENT_ID' => $payment->getId(), ]); } public function processRequest(Payment $payment, Request $request) { $invoiceId = $request->get('invoice_id'); $status = $request->get('status'); $signature = $request->get('signature'); if (!$this->verifyWebhookSignature($request->toArray(), $signature)) { $logger->error('Invalid webhook signature', ['invoice' => $invoiceId]); return ServiceResult::createError('INVALID_SIGNATURE'); } $invoiceData = $this->gateway->getInvoice($invoiceId); if ($invoiceData['status'] !== 'confirmed') { return ServiceResult::createSuccess(); } $expectedSum = $payment->getSum(); if (!$this->isAmountSufficient($invoiceData['received_amount'], $expectedSum)) { return ServiceResult::createError('UNDERPAYMENT'); } $result = $payment->setField('PAID', 'Y'); if ($result->isSuccess()) { $payment->save(); \Bitrix\Sale\Order::load($payment->getOrderId())->save(); } return ServiceResult::createSuccess(); } } 

כיצד לטפל ב-Webhooks?

/local/modules/mypay.crypto/ ├── install/ │ ├── index.php # Установщик модуля │ └── handler/ │ └── crypto.php # Обработчик для Битрикс ├── lib/ │ ├── CryptoGateway.php # Бизнес-логика │ └── WebhookHandler.php # Обработка колбэков ├── include.php └── .settings.php הוא ה-endpoint הסטנדרטי של Bitrix להתראות תשלום. ה-handler מקבל שליטה דרך <?php namespace MyCrypto\CryptoPay; use Bitrix\Sale\PaySystem\ServiceHandler; use Bitrix\Sale\Payment; use Bitrix\Main\Request; class Handler extends ServiceHandler { const RETURN_URL = true; public function initiatePay(Payment $payment, Request $request = null) { $orderId = $payment->getOrderId(); $amount = $payment->getSum(); $currency = $payment->getCurrencyCode(); $cryptoAmount = $this->convertToCrypto($amount, $currency, 'USDT'); $paymentData = $this->gateway->createInvoice([ 'order_id' => $orderId, 'amount' => $cryptoAmount, 'currency' => 'USDT', 'callback_url'=> $this->getCallbackUrl($payment), 'return_url' => $this->getSuccessUrl($payment), ]); $this->setExtraParams([ 'crypto_invoice_id' => $paymentData['invoice_id'], ]); $this->setInitiatePayRedirect($paymentData['payment_url']); return ServiceResult::createSuccess(); } protected function getCallbackUrl(Payment $payment): string { return \Bitrix\Main\Engine\UrlManager::getInstance()->getHostUrl() . '/bitrix/tools/sale_ps_interact.php?' . http_build_query([ 'TYPE' => 'BACK_URL_NOTIFY', 'PAYMENT_ID' => $payment->getId(), ]); } public function processRequest(Payment $payment, Request $request) { $invoiceId = $request->get('invoice_id'); $status = $request->get('status'); $signature = $request->get('signature'); if (!$this->verifyWebhookSignature($request->toArray(), $signature)) { $logger->error('Invalid webhook signature', ['invoice' => $invoiceId]); return ServiceResult::createError('INVALID_SIGNATURE'); } $invoiceData = $this->gateway->getInvoice($invoiceId); if ($invoiceData['status'] !== 'confirmed') { return ServiceResult::createSuccess(); } $expectedSum = $payment->getSum(); if (!$this->isAmountSufficient($invoiceData['received_amount'], $expectedSum)) { return ServiceResult::createError('UNDERPAYMENT'); } $result = $payment->setField('PAID', 'Y'); if ($result->isSuccess()) { $payment->save(); \Bitrix\Sale\Order::load($payment->getOrderId())->save(); } return ServiceResult::createSuccess(); } } . אימות חתימה, בדיקת סכום דרך ה-API (אל תסמכו על נתוני webhook), שמירה כפולה (Payment ו-Order) — קריטי ביותר.

כיצד לתקן שערי חליפין של מטבעות קריפטו?

לא ניתן להציג שער ממקור שרירותי ללא תיקון. השתמשו בשער רשמי עם חותמת זמן ושמרו אותו:

class ExchangeRateService { private const CACHE_TTL = 300; // 5 минут public function getRate(string $from, string $to): array { $cacheKey = "crypto_rate_{$from}_{$to}"; $cached = \Bitrix\Main\Data\Cache::createInstance(); if ($cached->initCache(self::CACHE_TTL, $cacheKey)) { return $cached->getVars(); } // CoinGecko API или Binance $rate = $this->fetchRateFromAPI($from, $to); $data = ['rate' => $rate, 'fetched_at' => time(), 'expires_at' => time() + 900]; $cached->startDataCache(); $cached->endDataCache($data); return $data; } } 

תקנו את השער ל-15 דקות. אם המשתמש משלם לאחר פקיעת התוקף, צרו חשבונית חדשה עם השער הנוכחי.

שמירת נתוני עסקאות

ל-Bitrix אין אחסון מקורי לנתוני תשלום מותאמים אישית. אפשרויות: sale_ps_interact.php הסטנדרטי דרך processRequest או טבלת ORM נפרדת. אנו מעדיפים את האפשרות השנייה לצורך אנליטיקה. טבלת ORM מספקת מהירות שאילתה מהירה פי 2 מ-PaymentTable ליצירת דוחות ומפשטת אגרגציה.

קריטריון PaymentTable (PS_PARAMS) טבלת ORM נפרדת
מהירות כתיבה מהירה (serialization) קצת איטית יותר (ORM)
גמישות שאילתות מוגבלת (JSON) SQL/ORM מלא
דיווח קשה קל (אגרגציות)
class CryptoTransactionTable extends \Bitrix\Main\ORM\Data\DataManager { public static function getTableName(): string { return 'my_crypto_transactions'; } public static function getMap(): array { return [ new IntegerField('ID', ['primary' => true, 'autocomplete' => true]), new IntegerField('PAYMENT_ID'), new StringField('INVOICE_ID'), new StringField('CURRENCY'), new StringField('NETWORK'), new FloatField('CRYPTO_AMOUNT'), new FloatField('FIAT_AMOUNT'), new StringField('EXCHANGE_RATE'), new StringField('TX_HASH'), new StringField('STATUS'), new DatetimeField('CREATED_AT'), ]; } } 

הצגת פרטי תשלום

הרכיב class ExchangeRateService { private const CACHE_TTL = 300; // 5 минут public function getRate(string $from, string $to): array { $cacheKey = "crypto_rate_{$from}_{$to}"; $cached = \Bitrix\Main\Data\Cache::createInstance(); if ($cached->initCache(self::CACHE_TTL, $cacheKey)) { return $cached->getVars(); } // CoinGecko API или Binance $rate = $this->fetchRateFromAPI($from, $to); $data = ['rate' => $rate, 'fetched_at' => time(), 'expires_at' => time() + 900]; $cached->startDataCache(); $cached->endDataCache($data); return $data; } } מציג את דף התשלום. עבור תשלומי קריפטו, אנו זקוקים לדף מותאם אישית עם קוד QR של הכתובת וטיימר. URI תשלום עבור EVM: PaymentTable (EIP-681). עבור BTC: setExtraParams. בתרחישים מסוימים, תשלום ישיר דרך חוזה חכם אפשרי, אך עבור Bitrix אנו משתמשים ב-API של שער.

כיצד לבדוק את האינטגרציה?

ל-Bitrix אין sandbox למערכות תשלום. תרחיש בדיקה: צרו מערכת תשלום לבדיקה, שלחו class CryptoTransactionTable extends \Bitrix\Main\ORM\Data\DataManager { public static function getTableName(): string { return 'my_crypto_transactions'; } public static function getMap(): array { return [ new IntegerField('ID', ['primary' => true, 'autocomplete' => true]), new IntegerField('PAYMENT_ID'), new StringField('INVOICE_ID'), new StringField('CURRENCY'), new StringField('NETWORK'), new FloatField('CRYPTO_AMOUNT'), new FloatField('FIAT_AMOUNT'), new StringField('EXCHANGE_RATE'), new StringField('TX_HASH'), new StringField('STATUS'), new DatetimeField('CREATED_AT'), ]; } } ידנית באמצעות curl עם נתוני בדיקה, בדקו סטטוסים. חשוב לבדוק את הזרימה המלאה עם הזמנה אמיתית: bitrix:sale.payment.pay אינו מספיק, יש לקרוא גם ל-ethereum:0xADDRESS/transfer?address=0xTO&uint256=AMOUNT.

בעיות טיפוסיות

  • סדר אירועים. Bitrix שומר את bitcoin:ADDRESS?amount=0.001&label=Order123 רק אם TYPE=BACK_URL_NOTIFY נקרא כראוי — Payment::save() אינו מספיק. בדקו את הזרימה המלאה עם הזמנה אמיתית.
  • CSRF בכתובת webhook. Order::save() עוקף את הגנת CSRF, אך ה-endpoint המותאם אישית שלכם לא. אם אתם יוצרים endpoint נפרד, הוסיפו PAID=Y ו-Order::save() בתחילת הקובץ.
  • אזור זמן. Bitrix מאחסן תאריכים ב-UTC אך מציג אותם לפי הגדרות האתר. בעת השוואת Payment::save(), השתמשו ב-sale_ps_interact.php ולא ב-define('STOP_STATISTICS', true) המקורי של PHP.

השוואת שערי תשלום

תכונה NOWPayments CoinPayments
רשתות נתמכות ETH, BSC, Polygon BTC, LTC, ETH, TRX
תיקון שער כן (15 דקות) כן (10 דקות)
עמלת שער 0.5% 0.5% + $0.05
חתימת Webhook HMAC SHA256 HMAC SHA512

בחירת השער תלויה במטבעות ובדרישות העמלות. החיסכון בעמלות משימוש בתשלומי קריפטו יכול להגיע ל-3% מהמחזור.

תהליך העבודה שלנו

  1. ניתוח גרסת Bitrix וארכיטקטורת התשלום הנוכחית.
  2. פיתוח המודול.
  3. אינטגרציה עם השער (NOWPayments/CoinPayments או מותאם אישית).
  4. בדיקות על staging.
  5. פריסה לייצור.

לוח זמנים: 2-3 ימים: יום אחד למודול + webhook, יום אחד לבדיקת מקרי קצה, יום אחד לפריסה לייצור וניטור העסקאות הראשונות.

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

  • מודול מוכן עם handler, webhook וטבלת ORM
  • אינטגרציה עם שער הקריפטו הנבחר
  • דף תשלום מותאם אישית עם קוד QR וטיימר
  • בדיקות על staging וייצור
  • תיעוד התקנה ותצורה
  • הדרכת מנהלים
  • תמיכה למשך חודש לאחר ההשקה

אנו מבטיחים שהמודול עובד על גרסאות Bitrix 20.0+ ו-PHP 7.4–8.2. עם ניסיון של למעלה מ-5 שנים בפיתוח Bitrix ו-20+ אינטגרציות תשלומי קריפטו, אנו יכולים להעריך את הפרויקט שלכם תוך יום עסקים אחד. צרו קשר לייעוץ. הזמינו את האינטגרציה, ואנו נכין את המודול לפרויקט שלכם. קבלו ייעוץ על הפרויקט שלכם.