שילוב 1C-Bitrix עם סליקת אינטרנט של PriorBank בבלארוס

שילוב 1C-Bitrix עם סליקת האינטרנט של Priorbank בבלארוס הופך לעיתים קרובות לשעות ארוכות של ניפוי באגים בשל הצפנת Computop Paygate הלא-סטנדרטית. אנחנו לוקחים על עצמנו את כל המחזור—מביקורת והגדרה ועד הטמעה ותמיכה. הצוות שלנו מספק את הפרויקט במפתח מלא, ומבטיח פעילות יציבה של שער התשלום ועיבוד הודעות אמין ללא פספוס מועדים.
השירותים שאנו מציעים
מציג 1 מתוך 1כל 1626 השירותים
שילוב 1C-Bitrix עם סליקת אינטרנט של PriorBank בבלארוס
בינוני
~1-2 שבועות

הכישורים שלנו:

שאלות נפוצות

שילוב 1C-Bitrix עם רכישת PriorBank בבלארוס היא משימה מורכבת. שער התשלומים Computop Paygate משתמש בהצפנת Blowfish, ולא ב-JSON REST API המוכר. שגיאה באלגוריתם מובילה לתגובה ריקה ללא כל הודעה, מה שמקשה על מציאת הגורם. הצוות שלנו חיבר מעל 50 פרויקטים במשך 8 שנים, כך שאנחנו מכירים כל ניואנס. להלן מדריך קוד מעשי שיחסוך לכם ימים של ניפוי שגיאות.

כיצד פועל אלגוריתם הצפנת הפרמטרים

PriorBank משתמשת ב-Computop Paygate (paygate.computop.com). כל פרמטרי הבקשה מוצפנים עם אלגוריתם Blowfish במצב ECB עם ריפוד לכפולה של 8 בתים ולאחר מכן מקודדים ב-Base64. בנוסף, מחושב HMAC-MD5 לאימות. גישה זו שונה מהותית מ-REST APIs מודרניים, שבהם נתונים נשלחים בטקסט רגיל או עם JWT. Blowfish מהיר יותר מ-AES במעבדים ישנים יותר אך דורש עמידה קפדנית באורך המפתח (עד 56 בתים). שגיאה של בית אחד במפתח גורמת לתגובת שער ריקה ללא אבחון.

מדוע URLNotify חייב להיות נגיש לציבור

Computop שולח הודעות POST אל URLNotify רק אם השרת נגיש מהאינטרנט. זו בעיה לפיתוח מקומי—localhost לא יעבוד. הפתרון הוא ngrok, שיוצר כתובת URL חיצונית זמנית. אם לא מתקבלות הודעות, בדקו שהקישור לא חסום על ידי חומת אש. בסביבת ייצור, 99.9% מההודעות נמסרות תוך 1-2 שניות.

הגדרת handler שלב אחר שלב ב-Bitrix

  1. צרו handler למערכת תשלומים ב-/bitrix/tools/sale_ps_result.php.
  2. קבלו MerchantID, מפתח Blowfish ומפתח HMAC מהבנק.
  3. יישמו את המחלקה ComputopCipher (ראו רשימה להלן).
  4. צרו טופס תשלום HTML עם השדות MerchantID, Len ו-Data.
  5. עבדו הודעות: פענחו את Data, אמתו MAC, עדכנו את סטטוס ההזמנה.
  6. בדקו בסביבת הבדיקה עם כרטיסי בדיקה שסופקו.
  7. עברו ל-MerchantID הייצור ואמתו את התשלום.

ארכיטקטורה טכנית והצפנה

שער התשלומים של PriorBank מבוסס טכנית על Computop Paygate. תכונות עיקריות:

  • פרמטרים מועברים מוצפנים — Blowfish (ECB) + Base64, בתוספת HMAC-MD5 לאימות
  • טופס התשלום מפנה לדף Computop, לא ל-hosted-fields
  • הודעות הן סינכרוניות דרך URLNotify (POST בשינוי סטטוס) ופרמטרים ב-URLSuccess/URLFailure

אינטגרציה זו שונה מהותית מ-REST APIs נפוצים: כל הפרמטרים מוצפנים, ושגיאה באלגוריתם ההצפנה גורמת לתגובה ריקה ללא הודעת שגיאה ברורה.

class ComputopCipher {
    private string $blowfishKey;
    private string $merchantId;
    private string $hmacKey;

    public function __construct(string $merchantId, string $blowfishKey, string $hmacKey) {
        $this->merchantId = $merchantId;
        $this->blowfishKey = $blowfishKey;
        $this->hmacKey = $hmacKey;
    }

    public function encrypt(array $params): string {
        $queryString = http_build_query($params);
        $len = strlen($queryString);
        // Дополняем до кратности 8 байт (требование Blowfish ECB)
        $pad = (8 - ($len % 8)) % 8;
        $queryString = str_pad($queryString, $len + $pad, "\0");
        $encrypted = openssl_encrypt(
            $queryString,
            'BF-ECB',
            $this->blowfishKey,
            OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING
        );
        return base64_encode($encrypted);
    }

    public function decrypt(string $data): array {
        $decrypted = openssl_decrypt(
            base64_decode($data),
            'BF-ECB',
            $this->blowfishKey,
            OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING
        );
        parse_str(rtrim($decrypted, "\0"), $result);
        return $result;
    }

    public function getHmac(array $params): string {
        $data = implode('*', [
            $params['PayID'] ?? '',
            $params['TransID'] ?? '',
            $this->merchantId,
            $params['Amount'] ?? '',
            $params['Currency'] ?? '',
        ]);
        return hash_hmac('md5', $data, $this->hmacKey);
    }
}

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

$cipher = new ComputopCipher($merchantId, $blowfishKey, $hmacKey);
$params = [
    'MerchantID' => $merchantId,
    'TransID' => 'ORDER_' . $orderId . '_' . time(),
    'Amount' => (int)($orderAmount * 100), // в копейках
    'Currency' => 'BYN',
    'OrderDesc' => 'Заказ №' . $orderId,
    'URLSuccess' => 'https://myshop.by/checkout/success/?order=' . $orderId,
    'URLFailure' => 'https://myshop.by/checkout/fail/?order=' . $orderId,
    'URLNotify' => 'https://myshop.by/bitrix/tools/sale_ps_result.php',
    'Language' => 'ru',
    'MAC' => $cipher->getHmac(['TransID' => 'ORDER_'.$orderId.'_'.time(), 'Amount' => (int)($orderAmount*100), 'Currency' => 'BYN']),
];
$encryptedData = $cipher->encrypt($params);
$len = strlen(http_build_query($params));

טופס HTML להפניה:

<form method="POST" action="https://paygate.computop.com/pay/">
  <input type="hidden" name="MerchantID" value="<?= $merchantId ?>">
  <input type="hidden" name="Len" value="<?= $len ?>">
  <input type="hidden" name="Data" value="<?= htmlspecialchars($encryptedData) ?>">
  <button type="submit">Оплатить</button>
</form>

עיבוד הודעות

Computop שולח POST אל class ComputopCipher { private string $blowfishKey; private string $merchantId; private string $hmacKey; public function __construct(string $merchantId, string $blowfishKey, string $hmacKey) { $this->merchantId = $merchantId; $this->blowfishKey = $blowfishKey; $this->hmacKey = $hmacKey; } public function encrypt(array $params): string { $queryString = http_build_query($params); $len = strlen($queryString); // Дополняем до кратности 8 байт (требование Blowfish ECB) $pad = (8 - ($len % 8)) % 8; $queryString = str_pad($queryString, $len + $pad, "\0"); $encrypted = openssl_encrypt( $queryString, 'BF-ECB', $this->blowfishKey, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING ); return base64_encode($encrypted); } public function decrypt(string $data): array { $decrypted = openssl_decrypt( base64_decode($data), 'BF-ECB', $this->blowfishKey, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING ); parse_str(rtrim($decrypted, "\0"), $result); return $result; } public function getHmac(array $params): string { $data = implode('*', [ $params['PayID'] ?? '', $params['TransID'] ?? '', $this->merchantId, $params['Amount'] ?? '', $params['Currency'] ?? '', ]); return hash_hmac('md5', $data, $this->hmacKey); } } עם $cipher = new ComputopCipher($merchantId, $blowfishKey, $hmacKey); $params = [ 'MerchantID' => $merchantId, 'TransID' => 'ORDER_' . $orderId . '_' . time(), 'Amount' => (int)($orderAmount * 100), // в копейках 'Currency' => 'BYN', 'OrderDesc' => 'Заказ №' . $orderId, 'URLSuccess' => 'https://myshop.by/checkout/success/?order=' . $orderId, 'URLFailure' => 'https://myshop.by/checkout/fail/?order=' . $orderId, 'URLNotify' => 'https://myshop.by/bitrix/tools/sale_ps_result.php', 'Language' => 'ru', 'MAC' => $cipher->getHmac(['TransID' => 'ORDER_'.$orderId.'_'.time(), 'Amount' => (int)($orderAmount*100), 'Currency' => 'BYN']), ]; $encryptedData = $cipher->encrypt($params); $len = strlen(http_build_query($params)); ו-<form method="POST" action="https://paygate.computop.com/pay/"> <input type="hidden" name="MerchantID" value="<?= $merchantId ?>"> <input type="hidden" name="Len" value="<?= $len ?>"> <input type="hidden" name="Data" value="<?= htmlspecialchars($encryptedData) ?>"> <button type="submit">Оплатить</button> </form> מוצפנים:

// В обработчике /bitrix/tools/sale_ps_result.php
$encryptedData = $_POST['Data'] ?? '';
$len = (int)($_POST['Len'] ?? 0);
$decrypted = $cipher->decrypt($encryptedData);
parse_str(substr(http_build_query($decrypted), 0, $len), $params);

// Обязательно верифицировать MAC
$expectedMac = $cipher->getHmac($params);
if (!hash_equals($expectedMac, $params['MAC'] ?? '')) {
    http_response_code(403);
    exit('Invalid MAC');
}

// Коды успеха
if (($params['Code'] ?? '') === '00000000') {
    $payment->setPaid('Y');
    $payment->setField('PS_STATUS_CODE', $params['Code']);
    $payment->setField('PS_STATUS_MESSAGE', $params['Description'] ?? '');
    $payment->save();
}

קודי תגובה נפוצים של Computop/PriorBank:

קוד משמעות
URLNotify תשלום מוצלח
Data עסקה בהמתנה
Len שגיאת הרשאה
// В обработчике /bitrix/tools/sale_ps_result.php $encryptedData = $_POST['Data'] ?? ''; $len = (int)($_POST['Len'] ?? 0); $decrypted = $cipher->decrypt($encryptedData); parse_str(substr(http_build_query($decrypted), 0, $len), $params); // Обязательно верифицировать MAC $expectedMac = $cipher->getHmac($params); if (!hash_equals($expectedMac, $params['MAC'] ?? '')) { http_response_code(403); exit('Invalid MAC'); } // Коды успеха if (($params['Code'] ?? '') === '00000000') { $payment->setPaid('Y'); $payment->setField('PS_STATUS_CODE', $params['Code']); $payment->setField('PS_STATUS_MESSAGE', $params['Description'] ?? ''); $payment->save(); } שגיאת שער

סביבת בדיקה

PriorBank מספקת MerchantID לבדיקה ומפתח BlowfishKey לבדיקה. כרטיסי בדיקה של Computop:

  • VISA: 00000000 — תשלום מוצלח
  • Mastercard: 00000099 — תשלום מוצלח
  • כל כרטיס עם תפוגה = 00000190 — סירוב

ניואנס חשוב בבדיקות: 00000902 חייב להיות נגיש משרתי Computop — localhost לא יעבוד. השתמשו ב-ngrok או בכתובת URL ציבורית זמנית לפיתוח מקומי.

מאפיינים מיוחדים לבלארוס

  • מטבע התשלום הוא BYN (רובל בלארוסי), קוד ISO 974
  • הסכום מועבר ביחידות מטבע משניות (למשל, קופיקות עבור BYN)
  • עבור כרטיסי Belkart, נדרש חיבור נפרד באמצעות פרוטוקול Belkart — שונה מ-Computop
  • יום הפעילות הבנקאי הוא ימי עבודה; הסדרים מתבצעים ביום הבנקאי הבא
  • חיסכון בזמן בעיבוד ידני — עד 30% הודות לפיסקליזציה אוטומטית (באמצעות ATOL או SBIS)

מה כלול ולוחות זמנים

אנחנו מכינים תיעוד אינטגרציה מלא, מגדירים את handler מערכת התשלומים ב-Bitrix, מגדירים URLNotify, מבצעים בדיקות בסביבת הבדיקה ומסייעים בחיבור לייצור. אנחנו גם מאמנים את הצוות שלכם בניהול בסיסי. כל העבודה מסופקת במפתח סוהר תוך 5–7 ימי עסקים.

תצורה לוח זמנים
פיתוח handler למערכת תשלומים 2–3 ימים
בדיקות בסביבת בדיקה יום אחד
חיבור לייצור ואימות יום אחד
אינטגרציה עם 1C (אם נדרש) 2–3 ימים נוספים

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

Computop Paygate API Reference — תיאור מפורט של פרמטרים וקודי שגיאה זמין בתיעוד הרשמי.
טעות נפוצה: אורך מפתח Blowfish שגוי מפתח Blowfish חייב להיות בין 4 ל-56 בתים. אם המפתח קצר יותר, openssl_encrypt מחזיר false. ודאו שלמפתח אין רווחים והוא מועבר גולמי (לא base64).

Blowfish (צופן) — ויקיפדיה HMAC — ויקיפדיה