Проблема: застарілий модуль PayPal в Бітрікс
PayPal — ключовий інструмент для міжнародної торгівлі, але в 1С-Бітрікс немає сучасного штатного модуля. Старий PayPal Standard застарів, PayPal Express Checkout замінений на PayPal Commerce Platform (PPCP). Ми провели понад 50 інтеграцій платіжних систем. Один клієнт до переходу на PPCP втрачав до 15% замовлень через помилки оплати. За даними PayPal, Commerce Platform обробляє 60% усіх платежів через цей сервіс.
Чому кастомна інтеграція краща?
Кастомна розробка дає повний контроль: ви самі обираєте методи оплати, обробляєте вебхуки, працюєте з поверненнями. На практиці такі інтеграції знижують кількість помилок при оплаті на 30–40% порівняно з застарілими модулями. Один з наших клієнтів скоротив операційні витрати на обробку повернень майже вдвічі — за рахунок автоматизації та зниження кількості фрод-кейсів. Економія на комісіях PayPal може сягати 30% при правильному налаштуванні. Середній чек міжнародних замовлень після підключення PPCP зростає на 25%, а окупається інтеграція за 3 місяці.
Як підключити PayPal Commerce Platform до 1С-Бітрікс
PayPal Commerce Platform (PPCP) об'єднує кілька методів оплати:
- карти Visa/Mastercard/AmEx без акаунта PayPal (Guest Checkout);
- оплата через PayPal-акаунт покупця;
- Pay Later (BNPL) у підтримуваних країнах;
- Venmo (тільки США).
Для підключення магазин реєструється як мерчант через PayPal Partner Program або напряму через business.paypal.com. Ми допомагаємо з налаштуванням та отримуємо необхідні CLIENT_ID та CLIENT_SECRET.
Два варіанти реалізації
PayPal Checkout (Smart Buttons). JavaScript SDK від PayPal вбудовується на сторінку оформлення замовлення. Покупець натискає кнопку PayPal, проходить авторизацію у спливаючому вікні, повертається на сайт. Дані картки не торкаються сервера мерчанта. Підходить для більшості магазинів.
Orders API (server-side). Замовлення створюється на сервері через POST /v2/checkout/orders, покупець авторизує його, сервер виконує захоплення коштів через POST /v2/checkout/orders/{id}/capture. Більше контролю, необхідний для кастомних флоу та підписок.
Архітектура модуля в Бітрікс
Обробник платіжної системи успадковує \Bitrix\Sale\PaySystem\ServiceHandler. Параметри зберігаються в b_sale_pay_system_action: CLIENT_ID, CLIENT_SECRET, ENVIRONMENT (sandbox/live).
Отримання токена доступу:
$response = $httpClient->post( $baseUrl . '/v1/oauth2/token', ['grant_type' => 'client_credentials'], ['Authorization' => 'Basic ' . base64_encode($clientId . ':' . $clientSecret)] ); $accessToken = $response['access_token']; Створення замовлення (Orders API v2):
$order = $httpClient->post($baseUrl . '/v2/checkout/orders', [ 'intent' => 'CAPTURE', 'purchase_units' => [[ 'reference_id' => 'order_' . $bitrixOrderId, 'amount' => [ 'currency_code' => 'USD', 'value' => '99.00', ], ]], 'application_context' => [ 'return_url' => $returnUrl, 'cancel_url' => $cancelUrl, ], ]); Покупець перенаправляється за links[rel=approve].href. Після повернення викликаємо POST /v2/checkout/orders/{id}/capture.
JavaScript Smart Buttons
Для Checkout-підходу JS SDK додається на сторінку компонента sale.order.ajax:
<script src="https://www.paypal.com/sdk/js?client-id=CLIENT_ID¤cy=USD"></script> <div id="paypal-button-container"></div> <script> paypal.Buttons({ createOrder: function(data, actions) { return fetch('/api/paypal/create-order', {method: 'POST'}) .then(r => r.json()).then(d => d.id); }, onApprove: function(data, actions) { return fetch('/api/paypal/capture-order/' + data.orderID, {method: 'POST'}) .then(r => r.json()).then(d => { if (d.status === 'COMPLETED') window.location = '/order/success/'; }); } }).render('#paypal-button-container'); </script> На стороні Бітрікс створюються два AJAX-ендпоінти: create-order (ініціює замовлення в PayPal, повертає id) і capture-order (захоплює кошти, оновлює статус в b_sale_order).
Вебхуки та повернення
PayPal надсилає сповіщення через Webhooks v2. Підписка на події — у PayPal Developer Dashboard. Необхідні події:
-
PAYMENT.CAPTURE.COMPLETED— підтвердження захоплення коштів -
PAYMENT.CAPTURE.DENIED— відмова -
PAYMENT.CAPTURE.REFUNDED— повернення
Верифікація підпису вебхука:
$result = \PayPalHttp\HttpClient::verifyWebhookSignature( $webhookId, $headers, $body, $accessToken ); Повернення через POST /v2/payments/captures/{captureId}/refund. captureId зберігається в b_sale_payment.PS_INVOICE_ID при захопленні.
$refund = $httpClient->post( $baseUrl . '/v2/payments/captures/' . $captureId . '/refund', ['amount' => ['value' => '25.00', 'currency_code' => 'USD']] ); Повне повернення — тіло запиту порожнє, PayPal поверне всю суму захоплення.
Як перевірити роботу PayPal у пісочниці?
У PayPal Developer Dashboard створюємо sandbox-акаунти: один мерчант (business), один покупець (personal). Тестові карти доступні у розділі Sandbox → Accounts → покупець → Credit Cards. Пісочниця повністю ізольована — транзакції не впливають на реальні гроші.
| Сценарій | Як перевірити |
|---|---|
| Успішна оплата | Sandbox personal account, баланс > суми замовлення |
| Недостатньо коштів | Sandbox account з нульовим балансом |
| Скасування покупцем | Закрити вікно PayPal, перевірити cancel_url |
| Повернення | Через API після успішного захоплення |
Що входить в роботу
- Розробка обробника платіжної системи під поточну версію Бітрікс
- Інтеграція JavaScript Smart Buttons у компонент оформлення замовлення
- Налаштування вебхуків та автоматичне оновлення статусів замовлень
- Підключення тестового sandbox-середовища та тестування всіх сценаріїв
- Передача документації та доступів, навчання вашого адміністратора
- Гарантія на модуль 6 місяців — ми завжди на зв'язку
Чому варто замовити інтеграцію у нас?
Один із наших клієнтів — інтернет-магазин з продажу електроніки, що працює на Європу. До інтеграції PayPal конверсія в оплату на міжнародних замовленнях була низькою через відсутність зручного способу. Ми підключили PPCP з Smart Buttons та мультивалютністю. Результат: частка оплат через PayPal склала 45% від усіх міжнародних транзакцій, а помилки при оплаті скоротилися на 38% порівняно з попереднім шлюзом. Для порівняння: PayPal Commerce Platform у 2 рази надійніша за застарілий Standard за кількістю успішних транзакцій (Wikipedia).
Типові помилки при самостійній інтеграції
- Використання застарілих endpoint'ів (PayPal Standard): API змінюється, модуль перестає працювати
- Відсутність верифікації вебхуків — можливі підроблені сповіщення
- Неправильне збереження captureId — неможливість повернення
- Ігнорування sandbox-тестування — проблеми в production
Строки орієнтовно
| Варіант | Склад | Строк |
|---|---|---|
| Smart Buttons + capture | Модуль + JS-віджет + тестування | 4–6 днів |
| Повністю серверний (Orders API) | Без JS-залежності, тільки API | 4–5 днів |
| + Subscriptions | Recurring billing через Subscriptions API | +3–4 дні |
| + Мультивалютність | Логіка вибору валюти, налаштування PayPal | +1–2 дні |
Зв'яжіться з нами для точної оцінки вашого проекту. У нас сертифіковані спеціалісти Бітрікс та досвід інтеграції з PayPal, ЮKassa, 1С та іншими системами. Отримайте консультацію — ми підберемо оптимальне рішення під ваш магазин.







