Інтеграція 1С-Бітрікс із платіжною системою PayPal

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Інтеграція 1С-Бітрікс із платіжною системою PayPal
Середня
~1-2 тижні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Інтеграція 1С-Bitrix з платіжною системою PayPal

PayPal — одна з найпоширеніших платіжних систем для міжнародної торгівлі. У 1С-Bitrix штатного актуального модуля PayPal немає: старий модуль для PayPal Standard застарів, PayPal Express Checkout замінено на PayPal Commerce Platform (PPCP). Тому інтеграція вимагає кастомної розробки під актуальний API.

Поточний продукт PayPal для мерчантів

PayPal Commerce Platform (PPCP) об'єднує кілька методів оплати:

  • оплата картами Visa/Mastercard/AmEx без аккаунта PayPal (Guest Checkout);
  • оплата через аккаунт PayPal покупця;
  • Pay Later (BNPL — купи зараз, плати пізніше) у підтримуваних країнах;
  • Venmo (США).

Для підключення магазин реєструється як мерчант через PayPal Partner Program або прямо через business.paypal.com.

Два варіанти технічної реалізації

PayPal Checkout (hosted buttons / Smart Buttons). JavaScript SDK від PayPal вбудовується на сторінку оформлення замовлення. Покупець натискає на кнопку PayPal, проходить авторизацію у вспливаючому вікні, повертається на сайт. Дані карти не торкаються сервера мерчанта. Підходить для більшості магазинів.

Orders API (server-side). Замовлення створюється на сервері через POST /v2/checkout/orders, покупець авторизує його, сервер виконує захоплення коштів через POST /v2/checkout/orders/{id}/capture. Більше контролю, необхідний для кастомних флоу та підписок.

Архітектура модуля в Bitrix

Обробник платіжної системи наслідує \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&currency=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>

На стороні Bitrix створюються два AJAX-еndpoint: create-order (ініціює замовлення в PayPal, повертає id) та capture-order (захоплює кошти, оновлює статус у b_sale_order).

Вебхуки (Webhooks IPN)

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 вернеду всю суму захоплення.

Sandbox-тестування

У PayPal Developer Dashboard створюємо sandbox-аккаунти: один мерчант (business), один покупець (personal). Тестові карти доступні в розділі Sandbox → Accounts → покупець → Credit Cards. Песочниця повністю ізольована — транзакції не впливають на реальні гроші.

Сценарій Як перевірити
Успішна оплата Sandbox personal account, баланс > суми замовлення
Недостатньо коштів Sandbox account з нульовим балансом
Скасування покупцем Закрити вікно PayPal, перевірити cancel_url
Повернення Через API після успішного захоплення

Терміни

Варіант Склад Термін
Smart Buttons + capture Модуль + JS-віджет + тестування 4–6 днів
Повністю серверний (Orders API) Без JS-залежності, тільки API 4–5 днів
+ Підписки Recurring billing через Subscriptions API +3–4 дні
+ Мультивалютність Логіка вибору валюти, налаштування PayPal +1–2 дні