Интеграция 1С-Битрикс с платёжной системой Apple Pay
Apple Pay в интернет-магазине — не отдельная интеграция с Apple, а надстройка над существующим эквайрингом. Без банка-эквайера или агрегатора Apple Pay не работает. Разработчики, столкнувшиеся с задачей впервые, обычно недооценивают серверную часть: Apple требует верификации домена через Merchant Identity Certificate, и без неё кнопка не появится, как бы правильно ни был написан JS.
Архитектура: что происходит при оплате
- Фронтенд проверяет доступность:
ApplePaySession.canMakePayments()— работает только в Safari на Apple-устройствах - При инициации платежа браузер запрашивает Payment Session у сервера магазина
- Сервер магазина проксирует запрос к Apple через Merchant Identity Certificate
- Apple верифицирует домен → возвращает сессионный объект
- Пользователь подтверждает Face ID/Touch ID → браузер получает зашифрованный токен
- Токен передаётся в банк-эквайер для проведения транзакции
Шаги 3–4 требуют серверного кода — чисто клиентской реализации нет.
Предварительные требования
- Аккаунт Apple Developer Program ($99/год) — для Merchant ID и сертификатов
- Верификация домена: файл
.well-known/apple-developer-merchantid-domain-associationв корне сайта - Банк-эквайер или агрегатор с поддержкой Apple Pay
- HTTPS — Apple Pay недоступен без SSL
Интеграция через агрегатор (рекомендуемый путь)
Если уже используется CloudPayments или ЮКасса — Apple Pay включается через их виджет, вся серверная часть с сертификатами берётся агрегатором на себя:
// CloudPayments Widget
const cp = new cp.CloudPayments({ publicId: 'pk_XXXXXX' });
// Проверяем доступность
if (window.ApplePaySession && ApplePaySession.canMakePaymentsWithActiveCard('merchant.ru.shop')) {
document.getElementById('apple-pay-btn').style.display = 'block';
}
document.getElementById('apple-pay-btn').addEventListener('click', () => {
cp.pay('applepay', {
description: 'Заказ #' + orderId,
amount: orderAmount,
currency: 'RUB',
invoiceId: String(orderId),
accountId: customerEmail,
}, {
onSuccess: () => confirmOrderPaid(orderId),
onFail: (reason) => showError(reason),
});
});
Предварительно в личном кабинете агрегатора нужно зарегистрировать домен — он автоматически добавит файл верификации.
Серверная валидация домена (прямая интеграция)
Если нужна реализация без виджета агрегатора:
// local/api/apple-pay-validate.php
$validationUrl = filter_var($_POST['validationUrl'] ?? '', FILTER_VALIDATE_URL);
// Разрешаем только домены Apple
if (!preg_match('#^https://apple-pay-gateway(-cert)?\.apple\.com#', $validationUrl)) {
http_response_code(400); exit;
}
$ch = curl_init($validationUrl);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode([
'merchantIdentifier' => 'merchant.ru.yourshop',
'domainName' => 'yourshop.ru',
'displayName' => 'Your Shop',
]),
CURLOPT_SSLCERT => APPLE_PAY_CERT_PATH,
CURLOPT_SSLKEY => APPLE_PAY_KEY_PATH,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
]);
$response = curl_exec($ch);
curl_close($ch);
header('Content-Type: application/json');
echo $response;
JS-код на странице оплаты
const session = new ApplePaySession(3, {
countryCode: 'RU',
currencyCode: 'RUB',
supportedNetworks: ['visa', 'masterCard', 'mir'],
merchantCapabilities: ['supports3DS'],
total: { label: 'Ваш магазин', amount: String(orderAmount) },
});
session.onvalidatemerchant = async ({ validationURL }) => {
const resp = await fetch('/api/apple-pay-validate.php', {
method: 'POST',
body: new URLSearchParams({ validationUrl: validationURL }),
});
session.completeMerchantValidation(await resp.json());
};
session.onpaymentauthorized = async ({ payment }) => {
const result = await sendTokenToServer(payment.token);
session.completePayment(
result.success ? ApplePaySession.STATUS_SUCCESS : ApplePaySession.STATUS_FAILURE
);
};
session.begin();
Добавление в Битрикс
Кнопку добавляем в шаблон sale.order.checkout. Показываем только при canMakePayments() === true. После получения токена — AJAX к PHP-обработчику, который передаёт токен в банк и вызывает $payment->setPaid('Y').
Сроки
| Задача | Срок |
|---|---|
| Регистрация Merchant ID, верификация домена | 0.5 дня |
| Интеграция через виджет агрегатора | 1–2 дня |
| Прямая интеграция с Apple Pay JS API | 3–5 дней |







