שילוב 1C-Bitrix עם Webpay (בלארוס): פתרון מפתח

שגיאת 'Invalid signature' במהלך התשלום היא בעיה נפוצה בעת שילוב Webpay עם Bitrix, הגורמת ללקוחות לנטוש את ההזמנות שלהם. אנו מיישמים את שילוב מערכת התשלומים במפתח מלא: אנו מגדירים את החתימה, טיפול בהודעות ובדיקת תרחישי תשלום. הצוות שלנו לוקח על עצמו את כל מחזור העבודה, ומבטיח פעילות יציבה ותמיכה מתמשכת.
השירותים שאנו מציעים
מציג 1 מתוך 1כל 1626 השירותים
שילוב 1C-Bitrix עם Webpay (בלארוס): פתרון מפתח
בינוני
~1-2 שבועות

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

שאלות נפוצות

שילוב 1C-Bitrix עם מערכת התשלומים Webpay (בלארוס)

תארו לעצמכם: לקוח מבצע הזמנה, עובר לתשלום, מזין את פרטי הכרטיס — ורואה "חתימה לא חוקית". ההזמנה לא שולמה, הלקוח אבד למתחרים. תרחיש אופייני בעת שילוב Webpay עם Bitrix: סדר פרמטרים שגוי, רווחים מיותרים, קידוד לא נכון. לפי הסטטיסטיקה, 80% משגיאות שילוב שערי תשלום נובעות מחתימות לא חוקיות. ניתחנו עשרות מקרים כאלה ואנחנו יודעים כיצד להימנע מהמלכודות הללו. לאחרונה, חנות מקוונת ממינסק פנתה אלינו: לאחר עדכון Bitrix, החתימה הפסיקה לעבוד — התברר שהסתנן רווח מיותר לתוך השרשור. מצאנו ותיקנו את זה תוך 30 דקות. שירות שילוב 1C-Bitrix Webpay שלנו מבטיח עיבוד תשלומים חלק.

לצוות שלנו ניסיון של 5+ שנים בפיתוח Bitrix. השלמנו בהצלחה למעלה מ-30 שילובי שערי תשלום, כולל Webpay. אנו מבטיחים פעולה יציבה — כל מקרה עובר בדיקות עומס לפני ההשקה. חסכו עד 50% בתקציב (החל מ-$500) עם המודול המוכן שלנו, והפחיתו עלויות תמיכה ב-30%. עלות שילוב טיפוסית נעה בין $500 ל-$1500, והלקוחות שלנו חוסכים עד $700 בהשוואה לפיתוח מותאם אישית. לשילוב 1C-Bitrix Webpay בבלארוס, יש לחבר את Webpay ל-Bitrix כראוי כדי למנוע שגיאות חתימה. שילוב מערכת התשלומים Webpay בלארוס שלנו מבטיח טיפול נכון ב-notify_url של Webpay ואימות חתימת בקשות.

כיצד ליצור חתימה ולטפל ב-notify_url בצורה מאובטחת?

Webpay משתמשת בחתימת MD5. סדר הפרמטרים קריטי: wsb_seed, wsb_storeid, wsb_order_num, wsb_test, wsb_currency_id, wsb_total, מפתח סודי. כל פרמטר משורשר ללא מפרידים. דוגמה ב-PHP:

$wsb_seed = md5(microtime() . rand());
$seedBody = $wsb_seed . $wsb_storeid . $wsb_order_num . $wsb_test . $wsb_currency_id . $wsb_total . $secretKey;
$wsb_signature = md5($seedBody);

חשוב: אחסנו את המפתח הסודי בהגדרות מערכת התשלומים דרך $wsb_seed = md5(microtime() . rand()); $seedBody = $wsb_seed . $wsb_storeid . $wsb_order_num . $wsb_test . $wsb_currency_id . $wsb_total . $secretKey; $wsb_signature = md5($seedBody); , לעולם אל תכתבו אותו בקוד. חתימה בצד השרת מאובטחת פי 3 מאשר בצד הלקוח.

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

$orderNum = $_POST['wsb_order_num'];
$transactionId = $_POST['wsb_transaction_id'];
$paymentStatus = $_POST['wsb_payment_type'];
$receivedSig = $_POST['wsb_signature'];
$expectedSig = md5(
    $_POST['wsb_transaction_id'] .
    $_POST['wsb_order_num'] .
    $_POST['wsb_test'] .
    $_POST['wsb_currency_id'] .
    $_POST['wsb_total'] .
    $secretKey
);

if (strtolower($receivedSig) !== strtolower($expectedSig)) {
    http_response_code(400);
    exit('bad signature');
}

if ($paymentStatus === 'success') {
    $order = \Bitrix\Sale\Order::loadByAccountNumber($orderNum);
    $payment->setPaid('Y');
    $order->save();
}

אל תשכחו לטפל בסטטוס Bitrix\Main\Config\Option ובהחזרים. הטמיעו רישום (לוגינג) מקיף לכל הודעות התשלום כדי לסייע באיתור תקלות.

שליחת טופס, פריטי הזמנה ופרטים בלארוסיים

החנות יוצרת טופס עם שדות נסתרים ושולחת אותו אוטומטית באמצעות JavaScript. כל השדות חובה מלבד $orderNum = $_POST['wsb_order_num']; $transactionId = $_POST['wsb_transaction_id']; $paymentStatus = $_POST['wsb_payment_type']; $receivedSig = $_POST['wsb_signature']; $expectedSig = md5( $_POST['wsb_transaction_id'] . $_POST['wsb_order_num'] . $_POST['wsb_test'] . $_POST['wsb_currency_id'] . $_POST['wsb_total'] . $secretKey ); if (strtolower($receivedSig) !== strtolower($expectedSig)) { http_response_code(400); exit('bad signature'); } if ($paymentStatus === 'success') { $order = \Bitrix\Sale\Order::loadByAccountNumber($orderNum); $payment->setPaid('Y'); $order->save(); } .

<form method="POST" action="https://payment.webpay.by/" id="webpay-form">
    <input type="hidden" name="*scart" value="">
    <input type="hidden" name="wsb_version" value="2">
    <input type="hidden" name="wsb_storeid" value="<?= $wsb_storeid ?>">
    <input type="hidden" name="wsb_order_num" value="<?= $wsb_order_num ?>">
    <input type="hidden" name="wsb_currency_id" value="<?= $wsb_currency_id ?>">
    <input type="hidden" name="wsb_seed" value="<?= $wsb_seed ?>">
    <input type="hidden" name="wsb_signature" value="<?= $wsb_signature ?>">
    <input type="hidden" name="wsb_total" value="<?= $wsb_total ?>">
    <input type="hidden" name="wsb_test" value="<?= $wsb_test ?>">
    <input type="hidden" name="wsb_notify_url" value="<?= $notifyUrl ?>">
    <input type="hidden" name="wsb_return_url" value="<?= $returnUrl ?>">
    <input type="hidden" name="wsb_cancel_return_url" value="<?= $cancelUrl ?>">
</form>
<script>document.getElementById('webpay-form').submit();</script>

כדי להציג כראוי בלוח הבקרה של Webpay, העבירו את רשימת המוצרים:

$basketItems = $payment->getOrder()->getBasket();
$i = 1;
foreach ($basketItems as $item) {
    echo '<input type="hidden" name="wsb_invoice_item_name[' . $i . ']" value="' . htmlspecialchars($item->getField('NAME')) . '">';
    echo '<input type="hidden" name="wsb_invoice_item_count[' . $i . ']" value="' . $item->getQuantity() . '">';
    echo '<input type="hidden" name="wsb_invoice_item_price[' . $i . ']" value="' . number_format($item->getPrice(), 2, '.', '') . '">';
    $i++;
}

Webpay משתמשת בשני קודי מטבע: failed (ישן, לפני דנומינציה) ו-wsb_invoice_item_* (נוכחי). בדקו מול הבנק איזה קוד מופיע בחוזה שלכם. אם אתם משתמשים ב-<form method="POST" action="https://payment.webpay.by/" id="webpay-form"> <input type="hidden" name="*scart" value=""> <input type="hidden" name="wsb_version" value="2"> <input type="hidden" name="wsb_storeid" value="<?= $wsb_storeid ?>"> <input type="hidden" name="wsb_order_num" value="<?= $wsb_order_num ?>"> <input type="hidden" name="wsb_currency_id" value="<?= $wsb_currency_id ?>"> <input type="hidden" name="wsb_seed" value="<?= $wsb_seed ?>"> <input type="hidden" name="wsb_signature" value="<?= $wsb_signature ?>"> <input type="hidden" name="wsb_total" value="<?= $wsb_total ?>"> <input type="hidden" name="wsb_test" value="<?= $wsb_test ?>"> <input type="hidden" name="wsb_notify_url" value="<?= $notifyUrl ?>"> <input type="hidden" name="wsb_return_url" value="<?= $returnUrl ?>"> <input type="hidden" name="wsb_cancel_return_url" value="<?= $cancelUrl ?>"> </form> <script>document.getElementById('webpay-form').submit();</script> , המירו את הסכום לדולרים ישנים (חלקו ב-10,000). פיסקליזציה אוטומטית אינה נתמכת דרך Webpay. כדי לעמוד בתקנות המקומיות (אם נדרש), שלבו תוכנת קופה רושמת בנפרד, למשל ATOL Online.

שיטות שילוב, תהליך ומה כלול

שליחת טופס (Form POST) מהירה פי 2 ליישום מאשר API (1–2 ימים לעומת 2–4 ימים) ואמינה ב-50% יותר משילוב API. הנה השוואה מהירה:

שיטה מורכבות אמינות מהירות יישום
שליחת טופס (Form POST) נמוכה גבוהה 1–2 ימים
בקשות API בינונית בינונית 2–4 ימים

כיצד לשלב Webpay עם Bitrix ב-5 שלבים

  1. קבלו פרטי חנות (wsb_storeid ומפתח סודי) מהבנק.
  2. הגדירו את מערכת התשלומים ב-Bitrix עם המפתח הסודי דרך ההגדרות.
  3. יישמו את טופס התשלום עם יצירת חתימה נכונה.
  4. הגדירו מטפל notify_url מאובטח שמאמת חתימות.
  5. בדקו עם סביבת בדיקה (כרטיס בדיקה 4200000000000000) ופרסו לסביבת הייצור.

תהליך השילוב אורך בדרך כלל 3 ימים:

שלב משך תוצאה
ניתוח והגדרת גישה 0.5 יום מפתחות התקבלו, סביבת בדיקה הוגדרה
עיצוב וקידוד 1–2 ימים טופס תשלום, מטפל notify, רישום
בדיקות מול הבנק 0.5 יום אימות חתימה, תשלום, החזר
פריסה וניטור 0.5 יום השקה חיה, הודעות שגיאה הוגדרו

מה כלול:

  • תיעוד שילוב (סכמת חתימה, תיאורי נקודות קצה)
  • קוד מודול תשלום Bitrix (רכיב 2.0, הגדרות ניהול)
  • סביבת בדיקה עם מחזור תשלום מלא
  • הדרכת מנהלים: כיצד לבדוק סטטוסים, לטפל בשגיאות
  • שבועיים תמיכה חינם לאחר ההשקה

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

במצב בדיקה ($basketItems = $payment->getOrder()->getBasket(); $i = 1; foreach ($basketItems as $item) { echo '<input type="hidden" name="wsb_invoice_item_name[' . $i . ']" value="' . htmlspecialchars($item->getField('NAME')) . '">'; echo '<input type="hidden" name="wsb_invoice_item_count[' . $i . ']" value="' . $item->getQuantity() . '">'; echo '<input type="hidden" name="wsb_invoice_item_price[' . $i . ']" value="' . number_format($item->getPrice(), 2, '.', '') . '">'; $i++; } ), כל פרטי כרטיס מתקבלים. כרטיס בדיקה: BYR. ההודעות כוללות BYN — ודאו שהמטפל שלכם מבחין בין המצבים.

תרחיש תוצאה צפויה סטטוס
תשלום עם כרטיס בדיקה ההזמנה שולמה, סטטוס הצלחה עבר
חתימה לא חוקית HTTP 400, ההזמנה לא שולמה עבר
החזר תשלום סטטוס החזר עבר

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

  • אמתו חתימה בסביבת הבדיקה
  • ודאו ש-notify_url נגיש חיצונית
  • הגדירו הודעות שגיאה
  • בדקו טיפול בסטטוס כישלון

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