שילוב 1C-Bitrix עם מערכת התשלומים PayKeeper
שילוב שער התשלומים PayKeeper עם 1C-Bitrix הוא משימה שכל בעל חנות מתמודד איתה כאשר הוא רוצה שליטה מלאה על התשלומים. ללא טיפול נכון בהודעות ופיסקליזציה, החנות שלך מסתכנת באובדן כסף ובקנסות. אנחנו פותרים את הבעיה הזו בלמעלה מ-50 פרויקטים—מחנויות מסחר אלקטרוני ועד פורטלי B2B, וחוסכים ללקוחות עד $1.4k–1.9k בשנה.
לאחרונה פרסנו את PayKeeper עבור חנות המעבדת 10,000 הזמנות בחודש. הדרישות כללו פיסקליזציה מלאה לפי 54-FZ וטיפול בהחזרים. תוצאה: זמן התשלום ירד ל-15 שניות, והעמלה הייתה נמוכה ב-20% מזו של YooKassa, וחוסכת עד $900–1.3k בחודש על מחזור של $9k–13k. עלות האינטגרציה מתחילה מ-$270–390 ומשתנה לפי מורכבות. PayKeeper מציע ערבות זמינות של 99.9%.
איך PayKeeper עובד
PayKeeper הוא יישום PHP הפועל כשרת תשלומים בדומיין שלך או בענן. החנות יוצרת חשבונית דרך API, מקבלת את כתובת טופס התשלום, והקונה מזין את פרטי הכרטיס. הודעות תשלום נשלחות אל result_url. לפי תיעוד PayKeeper, כל הבקשות מוגנות באמצעות חתימת MD5.
תהליך אינטגרציית PayKeeper שלב אחר שלב
התהליך כולל את השלבים הבאים: 1) התקנת מודול, 2) יצירת חשבונית דרך API, 3) טיפול בהודעות, 4) בדיקת כל התרחישים.
שלב 1: התקנה והגדרת המודול
התקן את מודול PayKeeper מ-Bitrix Marketplace או את המודול המותאם שלנו. בהגדרות מערכת התשלומים, הזן את כתובת שרת PayKeeper שלך, שם משתמש וסיסמה סודית. ודא ש-HTTPS מופעל.
שלב 2: יצירת חשבונית דרך API
השתמש בקוד שלהלן כדי ליצור חשבונית. החלף את מקומות השמירה בפרטי הכניסה בפועל שלך.
לחץ להרחבת דוגמת קוד
$apiUrl = $this->getBusinessValue($payment, 'PAYKEEPER_URL'); // https://your.paykeeper.ru
$clientId = $this->getBusinessValue($payment, 'PAYKEEPER_USER');
$clientSecret = $this->getBusinessValue($payment, 'PAYKEEPER_PASSWORD');
$orderId = $payment->getOrder()->getId();
$sum = $payment->getSum();
// Получить токен
$tokenResponse = $this->httpPost($apiUrl . '/info/settings/token/', [], [
'Authorization: Basic ' . base64_encode("{$clientId}:{$clientSecret}"),
]);
$token = $tokenResponse['token'];
// Создать инвойс
$invoiceParams = [
'pay_amount' => number_format($sum, 2, '.', ''),
'clientid' => $payment->getOrder()->getUserId(),
'orderid' => $orderId,
'client_email' => $email,
'client_phone' => $phone,
'service_name' => 'Оплата заказа №' . $orderId,
];
$invoiceParams['token'] = md5(implode('', $invoiceParams) . $token);
$invoice = $this->httpPost($apiUrl . '/change/invoice/preview/', $invoiceParams);
// $invoice['invoice_id'] — ID счёта
// Платёжная форма: $apiUrl . '/?id=' . $invoice['invoice_id']
שלב 3: טיפול בהודעות תשלום
PayKeeper שולח POST אל $apiUrl = $this->getBusinessValue($payment, 'PAYKEEPER_URL'); // https://your.paykeeper.ru $clientId = $this->getBusinessValue($payment, 'PAYKEEPER_USER'); $clientSecret = $this->getBusinessValue($payment, 'PAYKEEPER_PASSWORD'); $orderId = $payment->getOrder()->getId(); $sum = $payment->getSum(); // Получить токен $tokenResponse = $this->httpPost($apiUrl . '/info/settings/token/', [], [ 'Authorization: Basic ' . base64_encode("{$clientId}:{$clientSecret}"), ]); $token = $tokenResponse['token']; // Создать инвойс $invoiceParams = [ 'pay_amount' => number_format($sum, 2, '.', ''), 'clientid' => $payment->getOrder()->getUserId(), 'orderid' => $orderId, 'client_email' => $email, 'client_phone' => $phone, 'service_name' => 'Оплата заказа №' . $orderId, ]; $invoiceParams['token'] = md5(implode('', $invoiceParams) . $token); $invoice = $this->httpPost($apiUrl . '/change/invoice/preview/', $invoiceParams); // $invoice['invoice_id'] — ID счёта // Платёжная форма: $apiUrl . '/?id=' . $invoice['invoice_id'] בעת התשלום. אמת את החתימה ואשר את ההזמנה.
$clientSecret = $this->getBusinessValue($payment, 'PAYKEEPER_PASSWORD');
$id = $_POST['id'];
$sum = $_POST['sum'];
$orderId = $_POST['orderid'];
$key = $_POST['key'];
// Проверка подписи
$expected = md5($id . $sum . $orderId . $clientSecret);
if (strtolower($key) !== strtolower($expected)) {
http_response_code(400);
echo 'bad signature';
exit;
}
// Дополнительная проверка через API
$paymentInfo = $this->httpGet($apiUrl . '/info/payments/byid/', ['id' => $id], $token);
if ($paymentInfo['status'] === 'paid') {
// Подтвердить платёж в Битрикс
$order = \Bitrix\Sale\Order::loadByAccountNumber($orderId);
// ... setPaid('Y'), save()
}
echo 'OK'; שלב 4: בדיקת כל התרחישים
בדוק תשלום מוצלח, תשלום שנכשל, החזר והחזר חלקי. ודא שהפיסקליזציה פועלת.
למה לבחור ב-PayKeeper?
PayKeeper זול ב-20% מ-YooKassa כאשר המחזור עולה על $9k–13k בחודש, וחוסך לך עד $900–1.3k חודשי. נתוני הלקוחות נשארים על השרת שלך—אתה לא תלוי בשער חיצוני. בניגוד ל-Robokassa, יש לך שליטה מלאה: דומיין משלך, תעודות משלך. PayKeeper תומך בחשבוניות, החזרים ופיסקליזציה. ניתן לארח אותו על השרת שלך או על VPS, ומציע אבטחה מרבית ופרטיות נתונים. כתובת ה-API ייחודית לכל חנות, כך שבהגדרות מערכת התשלומים של Bitrix יש צורך בשדה לכתובת שרת PayKeeper במקום קידוד קבוע.
החזרים ופיסקליזציה
PayKeeper תומך בהחזרים דרך API:
$refundParams = [
'id' => $paykeeperPaymentId,
'amount' => number_format($refundAmount, 2, '.', ''),
];
$refundParams['token'] = md5(implode('', $refundParams) . $token);
$result = $this->httpPost($apiUrl . '/change/payment/return/', $refundParams);כדי לעמוד בדרישות החוק הפדרלי 54-FZ, ל-PayKeeper יש אינטגרציה מובנית עם קופות רושמות מקוונות (OFD). נתוני הקבלה מועברים בעת יצירת חשבונית דרך פרמטרי הסל. הרכב הפריטים נלקח מ-result_url. אנו מגדירים העברת כל הפרטים ומבטיחים פיסקליזציה נכונה של החזרים.
טיפול בשגיאות ואבטחה
PayKeeper עלול להיות לא זמין זמנית או להחזיר שגיאת timeout. לכן, יש להוסיף מנגנון תור לקוד האינטגרציה:
// Если платёж не подтвердился, повторить через 5 минут
if ($attempt < 3) {
\Bitrix\Sale\PaymentCollection::addToQueue([
'order_id' => $orderId,
'attempt' => $attempt + 1,
'next_try' => (new \DateTime())->modify('+5 minutes')
]);
}תעד את כל הבקשות והתשובות מ-PayKeeper לצורך ניפוי שגיאות. שמור בקשות POST ותשובות עם חותמות זמן בטבלה כמו $clientSecret = $this->getBusinessValue($payment, 'PAYKEEPER_PASSWORD'); $id = $_POST['id']; $sum = $_POST['sum']; $orderId = $_POST['orderid']; $key = $_POST['key']; // Проверка подписи $expected = md5($id . $sum . $orderId . $clientSecret); if (strtolower($key) !== strtolower($expected)) { http_response_code(400); echo 'bad signature'; exit; } // Дополнительная проверка через API $paymentInfo = $this->httpGet($apiUrl . '/info/payments/byid/', ['id' => $id], $token); if ($paymentInfo['status'] === 'paid') { // Подтвердить платёж в Битрикс $order = \Bitrix\Sale\Order::loadByAccountNumber($orderId); // ... setPaid('Y'), save() } echo 'OK'; .
דרישות אבטחה של 54-FZ והגנת נתונים אישיים:
- אל תעביר מספרי כרטיס מלאים ביומנים—הסתר את 4 הספרות האחרונות
- השתמש ב-HTTPS לכל הבקשות (בטל בדיקת תעודות רק בסביבת פיתוח)
- שמור את PAYKEEPER_PASSWORD רק ב-
$refundParams = [ 'id' => $paykeeperPaymentId, 'amount' => number_format($refundAmount, 2, '.', ''), ]; $refundParams['token'] = md5(implode('', $refundParams) . $token); $result = $this->httpPost($apiUrl . '/change/payment/return/', $refundParams);או בטבלת הגדרות מוגנת, לעולם לא ב-HTML
טעויות אינטגרציה אופייניות
- אי אימות חתימת ההודעה. ללא בדיקת
$order->getBasket(), תוקף יכול לזייף הודעות—תמיד אמת את// Если платёж не подтвердился, повторить через 5 минут if ($attempt < 3) { \Bitrix\Sale\PaymentCollection::addToQueue([ 'order_id' => $orderId, 'attempt' => $attempt + 1, 'next_try' => (new \DateTime())->modify('+5 minutes') ]); }עם הסוד. - קידוד קבוע של כתובת השרת. PayKeeper עשוי להיות מותקן על כל דומיין—השתמש בהגדרות בלוח הניהול, לא בקבועים.
- התעלמות מפיסקליזציה של החזרים חלקיים. בהחזר חלקי, העבר רק את הפריטים המוחזרים—קריטי עבור OFD.
- היעדר תור הודעות. אם
b_sale_payment_logנתקע, התשלום נשאר ללא עיבוד. הוסף משימת רקע שבודקת את הסטטוס כל שעה. - בלבול בין סטטוסי תשלום. PayKeeper מחזיר
.env,key,md5—טפל בכל סטטוס כראוי ב-Bitrix.
מה העבודה שלנו כוללת
| שלב | פרטים |
|---|---|
| ניתוח | בחינת תוכנית התשלום, דרישות פיסקליזציה, בחירת שיטת פריסת PayKeeper |
| פיתוח | מודול עם הגדרות, תרחישי תשלום, החזר והודעות |
| פיסקליזציה | הגדרת העברת קבלות ל-OFD לפי 54-FZ |
| בדיקות | אימות כל התרחישים: הצלחה, כישלון, החזר, החזר חלקי |
| תיעוד | מדריכים למנהלים ולתמיכה |
תוצרים
- מודול: מודול Bitrix מוכן לשימוש עם אינטגרציית PayKeeper (תומך בענן ובשרת מקומי)
- תיעוד: מדריך הגדרות, מדריך מנהל ותיעוד תמיכה לצוות שלך
- גישה: גישה ללוח הניהול להגדרות מערכת התשלומים ובדיקת יומנים
- הדרכה: הדרכה מקוונת של שעתיים לצוות שלך על שימוש במודול ופתרון תקלות (דגש מופחת)
- תמיכה: חודש תמיכה לאחר האינטגרציה (דוא"ל, טלפון וסיוע מרחוק)
לוחות זמנים משוערים
| משימה | מסגרת זמן |
|---|---|
| קבלת טוקן + יצירת חשבונית + טיפול בהודעות | 2–3 ימים |
| החזרים | +יום אחד |
| פיסקליזציה | +1–2 ימים |
| בדיקות | 0.5–1 יום |
העלות מחושבת באופן אישי. אנו עובדים עם כל גרסת Bitrix ומבטיחים תאימות לעדכונים האחרונים. צור קשר להערכת פרויקט וקבל ייעוץ על אינטגרציית PayKeeper.

