שילוב 1C-Bitrix עם כרטיס רכישה לתשלומים של Priorbank

שילוב כרטיס הרכישה לתשלומים של Priorbank באתר שלכם אינו רק הוספת iframe. האתגר הטכני העיקרי הוא TLS הדדי וקריאות חוזרות בלתי צפויות. אם שרשרת תעודת ה-SSL שגויה או שחתימת הקריאה החוזרת לא מאומתת, הזמנות אובדות ולקוחות עוזבים. אנחנו טיפלנו ב...

Our competencies:

שאלות נפוצות

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

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1443
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Website development for FIXPER company
    1013
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Development based on Bitrix, Bitrix24, 1C for the company Development of an Online Appointment Booking Widget for a Medical Center
    752
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Development based on 1C Enterprise for MIRSANBEL
    873
  • image_crm_dolbimby_434_0.webp
    Website development on CRM Bitrix24 for DOLBIMBY
    795
  • image_crm_technotorgcomplex_453_0.webp
    Development based on Bitrix24 for the company TECHNOTORGKOMPLEKS
    1155

שילוב תוכנית התשלומים "כרטיס קנייה" של Priorbank באתר שלך אינו רק הטמעת iframe. האתגר הטכני המרכזי הוא TLS הדדי וקריאות חוזרות (callbacks) בלתי צפויות. אם שרשרת תעודות ה-SSL שגויה או שחתימת הקריאה החוזרת לא מאומתת, הזמנות אובדות ולקוחות עוזבים. טיפלנו במקרים כמו נתיב תעודה שגוי, חוסר ב-CA שורשי והתעלמות מסביבת הבדיקות. לאחר בדיקה, אנו מוצאים ומתקנים בעיות אלה.

"כרטיס קנייה" הוא תוכנית תשלומים של Priorbank (בלארוס). הלקוח משלם בתשלומים ללא ריבית, והחנות מקבלת את מלוא הסכום. המנגנון דומה לכרטיסי תשלומים אחרים, אך ל-API של Priorbank יש מאפיינים ייחודיים: אימות לקוח מבוסס SSL ומסמכים ייעודיים לשותפי מסחר אלקטרוני.

כיצד שילוב 1C-Bitrix עם תוכנית התשלומים "כרטיס קנייה" משפר אבטחה ומהירות?

תשלומים באתר הם כלי צמיחה חזק. לפי הנתונים שלנו, חנויות שמפעילות את "כרטיס קנייה" רואות עלייה של 20–30% בערך הזמנה ממוצע ושיפור של 15–25% בהמרות. לקוחות מוכנים יותר לרכוש מוצרים יקרים כשהם יודעים שהסכום מתחלק ללא ריבית. השילוב עם 1C-Bitrix עובד בצורה חלקה: הזמנות פועלות לפי לוגיקה סטנדרטית, ותשלומים מתנהגים כמו כל אמצעי תשלום אחר. החיסכון בעמלות מגיע עד 30% בהשוואה להעברות בנקאיות, ועלויות ההחזרים יורדות ב-40%. יתרה מכך, TLS הדדי עם תעודות Priorbank מבטיח 100% הגנה על נתונים—כל עסקה מאומתת.

אילו קשיים טכניים מתעוררים במהלך השילוב?

הבעיה המרכזית היא הגדרת TLS עם אימות הדדי. Priorbank דורש שרשרת CA תקינה; אחרת, לחיצת היד נכשלת. טעות נפוצה שנייה היא התעלמות מסביבת הבדיקות—סביבות ייצור יכולות לכלול מצבי תעודה בלתי צפויים. שלישית, קריאות חוזרות ללא אימות חתימה: הבנק חותם על הבקשה, ואנו מאמתים אותה. אם החתימה לא תואמת, ההזמנה נתקעת. לאחר הגדרה נכונה, 95% מהקריאות החוזרות מעובדות בהצלחה, אך 5% הנותרים דורשים ניטור.

דוגמה להגדרת תעודה:

openssl s_client -connect api.priorbank.by:443 -cert cli.crt -key cli.key -CAfile ca.crt 

בדוק את השרשרת: כל התעודות חייבות להיות בקובץ אחד או מוגדרות במפורש.

כיצד אנו מיישמים שילוב עם Priorbank?

התהליך מורכב ממספר שלבים. אנו מתחילים בניתוח מסמכי הבנק והנפקת התעודות. לאחר מכן אנו מתכננים לקוח API עם TLS הדדי, יוצרים מטפל בתשלומים ובקר קריאות חוזרות. אנו מסיימים בבדיקות בסביבת sandbox ובפריסה לייצור.

הגדרת SSL וסביבת בדיקות

Priorbank דורש TLS עם אימות הדדי. לאחר קבלת התעודה, אנו מגדירים את cURL עם openssl s_client -connect api.priorbank.by:443 -cert cli.crt -key cli.key -CAfile ca.crt , CURLOPT_SSLCERT ו-CURLOPT_SSLKEY. התעודות מאוחסנות מחוץ לשורש המסמכים; הנתיבים מועברים דרך אפשרויות המודול.

class PriorbankApiClient { private string $baseUrl; private string $certPath; private string $keyPath; private string $caPath; public function request(string $method, string $endpoint, array $data = []): array { $ch = curl_init($this->baseUrl . $endpoint); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_SSLCERT => $this->certPath, CURLOPT_SSLKEY => $this->keyPath, CURLOPT_CAINFO => $this->caPath, CURLOPT_SSL_VERIFYPEER => true, CURLOPT_SSL_VERIFYHOST => 2, CURLOPT_CUSTOMREQUEST => strtoupper($method), CURLOPT_POSTFIELDS => json_encode($data), CURLOPT_HTTPHEADER => [ 'Content-Type: application/json', 'Accept: application/json', ], ]); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($httpCode >= 400) { throw new \RuntimeException("Приорбанк API: HTTP {$httpCode}: {$response}"); } return json_decode($response, true); } } 

יצירת סשן תשלום

סשן התשלום נוצר בעת התשלום. אנו בונים מערך עם נתוני הזמנה, לקוח ומוצרים. חשוב להעביר את CURLOPT_CAINFO הנכון ואת class PriorbankApiClient { private string $baseUrl; private string $certPath; private string $keyPath; private string $caPath; public function request(string $method, string $endpoint, array $data = []): array { $ch = curl_init($this->baseUrl . $endpoint); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_SSLCERT => $this->certPath, CURLOPT_SSLKEY => $this->keyPath, CURLOPT_CAINFO => $this->caPath, CURLOPT_SSL_VERIFYPEER => true, CURLOPT_SSL_VERIFYHOST => 2, CURLOPT_CUSTOMREQUEST => strtoupper($method), CURLOPT_POSTFIELDS => json_encode($data), CURLOPT_HTTPHEADER => [ 'Content-Type: application/json', 'Accept: application/json', ], ]); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($httpCode >= 400) { throw new \RuntimeException("Приорбанк API: HTTP {$httpCode}: {$response}"); } return json_decode($response, true); } } של התשלומים. התשובה מכילה partner_id—אנו מפנים את הלקוח לדף הבנק.

public function initiatePay(\Bitrix\Sale\Payment $payment, \Bitrix\Main\Request $request = null) { $order = $payment->getOrder(); $basket = $order->getBasket(); $items = []; foreach ($basket as $item) { $items[] = [ 'name' => $item->getField('NAME'), 'quantity' => $item->getQuantity(), 'price' => $item->getPrice(), 'sku' => $item->getProductId(), ]; } $payload = [ 'partner_id' => $this->getBusinessValue($payment, 'PARTNER_ID'), 'order_ref' => (string)$order->getId(), 'amount' => $payment->getSum(), 'currency' => 'BYN', 'term' => (int)$this->getBusinessValue($payment, 'INSTALLMENT_TERM'), 'items' => $items, 'customer' => [ 'first_name' => $order->getPropertyValueByCode('NAME'), 'last_name' => $order->getPropertyValueByCode('LAST_NAME'), 'phone' => $order->getPropertyValueByCode('PHONE'), 'email' => $order->getPropertyValueByCode('EMAIL'), ], 'success_url' => $this->getSuccessUrl($payment), 'fail_url' => $this->getFailUrl($payment), 'callback_url' => $this->getNotificationUrl($payment), ]; $response = $this->apiClient->request('POST', '/installment/create', $payload); if (empty($response['payment_url'])) { throw new \RuntimeException('Не получен payment_url от Приорбанка'); } $this->storeSessionId($payment, $response['session_id']); $result = new \Bitrix\Sale\PaySystem\ServiceResult(); $result->setPaymentUrl($response['payment_url']); return $result; } 

מודל סטטוסים

סטטוס בנק משמעות פעולה ב-Bitrix
term התשלומים אושרו והופעלו payment_url
public function initiatePay(\Bitrix\Sale\Payment $payment, \Bitrix\Main\Request $request = null) { $order = $payment->getOrder(); $basket = $order->getBasket(); $items = []; foreach ($basket as $item) { $items[] = [ 'name' => $item->getField('NAME'), 'quantity' => $item->getQuantity(), 'price' => $item->getPrice(), 'sku' => $item->getProductId(), ]; } $payload = [ 'partner_id' => $this->getBusinessValue($payment, 'PARTNER_ID'), 'order_ref' => (string)$order->getId(), 'amount' => $payment->getSum(), 'currency' => 'BYN', 'term' => (int)$this->getBusinessValue($payment, 'INSTALLMENT_TERM'), 'items' => $items, 'customer' => [ 'first_name' => $order->getPropertyValueByCode('NAME'), 'last_name' => $order->getPropertyValueByCode('LAST_NAME'), 'phone' => $order->getPropertyValueByCode('PHONE'), 'email' => $order->getPropertyValueByCode('EMAIL'), ], 'success_url' => $this->getSuccessUrl($payment), 'fail_url' => $this->getFailUrl($payment), 'callback_url' => $this->getNotificationUrl($payment), ]; $response = $this->apiClient->request('POST', '/installment/create', $payload); if (empty($response['payment_url'])) { throw new \RuntimeException('Не получен payment_url от Приорбанка'); } $this->storeSessionId($payment, $response['session_id']); $result = new \Bitrix\Sale\PaySystem\ServiceResult(); $result->setPaymentUrl($response['payment_url']); return $result; } ממתין לאישור לקוח המתן
APPROVED הבנק דחה את הבקשה הודע ללקוח
$payment->setPaid('Y') הלקוח ביטל הודע
PENDING ההחזר עובד REJECTED ב-Bitrix

הקריאה החוזרת מהבנק מאומתת על ידי השוואת חתימה: הבנק חותם על גוף הבקשה עם המפתח הפרטי שלו, ואנו בודקים עם המפתח הציבורי של הבנק (כלול בחבילת מסמכי ה-API).

החזרים

בעת עיבוד החזר ב-Bitrix (אירוע CANCELLED כאשר REFUNDED עבור תשלום ששולם בעבר), אנו שולחים בקשת החזר ל-Priorbank:

public function refund(\Bitrix\Sale\Payment $payment, $refundableSum) { $sessionId = $this->getStoredSessionId($payment); $response = $this->apiClient->request('POST', '/installment/refund', [ 'session_id' => $sessionId, 'amount' => $refundableSum, 'reason' => 'customer_request', ]); return !empty($response['refund_id']); } 

הצגת תשלומים באתר

בדף המוצר ובעגלת הקניות, אנו מוסיפים ווידג'ט תשלומים: עבור סכום הזמנה של N BYN — "שלם בתשלומים מ-X BYN לחודש."

const months = 12; // из настроек const monthlyPayment = Math.ceil(totalPrice / months); document.getElementById('installment-badge').textContent = `Рассрочка от ${monthlyPayment} руб./мес. × ${months} мес.`; 

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

בהזמנת השילוב, אנו מספקים:

  • הגדרת תעודת SSL וסביבת בדיקות;
  • פיתוח לקוח API עם TLS הדדי;
  • מטפל במערכת תשלומים עם שמירת סשן;
  • בקר קריאות חוזרות עם אימות חתימה;
  • יישום מלא של החזרים;
  • ווידג'ט תשלומים לכל הדפים;
  • מסמכי התקנה ותמיכה.

לוחות זמנים ועלות

שלב זמן
הגדרת תעודת SSL וסביבת בדיקות יום אחד
לקוח API עם TLS הדדי יום אחד
מטפל במערכת תשלומים 2–3 ימים
קריאות חוזרות ואימות חתימה 1–2 ימים
החזרים יום אחד
בדיקות יומיים
סה"כ 9–11 ימים

העלות מחושבת באופן אישי לאחר ניתוח הפרויקט. בקש הערכה חינם—נכין הצעה תוך 1-2 ימים.

טעויות נפוצות ורשימת בדיקה

טעויות:

  • שרשרת CA שגויה: אם חסרה תעודת שורש, לחיצת היד של SSL נכשלת.
  • התעלמות מסביבת הבדיקות: שגיאות תעודה עשויות להופיע בייצור.
  • חוסר באימות חתימת קריאות חוזרות: הבנק עשוי לשלוח בקשה לא תקינה.

רשימת בדיקה לפני השקה:

  1. תעודת SSL אומתה באמצעות openssl s_client.
  2. בקשת יצירה/תשלום בבדיקה מחזירה payment_url.
  3. הקריאה החוזרת מעובדת ומשנה את סטטוס התשלום.
  4. החזרים פועלים במצב בדיקה.
  5. הווידג'ט מוצג כראוי בכל הדפים.
  6. טיפול בשגיאות API (HTTP 4xx/5xx) מוגדר.

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