Проблема: устаревший модуль 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С и другими системами. Получите консультацию — мы подберём оптимальное решение под ваш магазин.







