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

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Інтеграція 1С-Бітрікс із платіжною системою Apple Pay
Середня
~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С-Бітрікс з платіжною системою Apple Pay

Apple Pay на сайті — це не окрема платіжна система, а спосіб підтвердження оплати карткою через пристрій Apple. Технічно це означає: покупець не вводить номер картки, а авторизує платіж через Face ID або Touch ID, а токенізовані дані картки передаються у ваш еквайринг. Поширена помилка — що потрібно «підключити Apple Pay окремо». Ні: Apple Pay працює поверх уже підключеного еквайрингу, який підтримує цей метод (ЮКаса, Тінькофф, Сбер, Stripe та інші).

Попередні вимоги

Для роботи Apple Pay на сайті необхідно:

  1. Еквайринг з підтримкою Apple Pay — перевірте договір з банком або агрегатором
  2. HTTPS — обов'язково; Apple Pay не працює по HTTP
  3. Верифікація домену — Apple вимагає розмістити файл за шляхом /.well-known/apple-developer-merchantid-domain-association
  4. Merchant ID — створюється в Apple Developer Console, прив'язується до домену та сертифікату

Верифікація домену

# nginx: віддаємо файл без розширення
location /.well-known/apple-developer-merchantid-domain-association {
    default_type text/plain;
    alias /var/www/myshop/.well-known/apple-developer-merchantid-domain-association;
}

Файл верифікації завантажується з Apple Developer Console. У більшості випадків еквайринг (ЮКаса, Тінькофф) проводить верифікацію через свої сервіси — достатньо вказати домен в особистому кабінеті агрегатора.

Кнопка Apple Pay у 1С-Бітрікс

Apple Pay відображається лише в Safari на пристроях Apple. Для інших браузерів — стандартна форма оплати. У шаблоні компонента sale.order.checkout або на сторінці оплати:

// Перевіряємо підтримку перед відображенням кнопки
if (window.ApplePaySession && ApplePaySession.canMakePayments()) {
    document.querySelector('.apple-pay-button').style.display = 'block';
}

function startApplePay(orderTotal, orderId) {
    const request = {
        countryCode: 'RU',
        currencyCode: 'RUB',
        supportedNetworks: ['visa', 'masterCard', 'mir'],
        merchantCapabilities: ['supports3DS'],
        total: { label: 'Мій магазин', amount: String(orderTotal) },
    };

    const session = new ApplePaySession(6, request);

    // Валідація мерчанта — запит до Apple через ваш сервер
    session.onvalidatemerchant = async (event) => {
        const res = await fetch('/bitrix/tools/apple_pay_validate.php', {
            method: 'POST',
            headers: {'Content-Type': 'application/json'},
            body: JSON.stringify({ validationURL: event.validationURL }),
        });
        session.completeMerchantValidation(await res.json());
    };

    // Отримали токен платежу
    session.onpaymentauthorized = async (event) => {
        const res = await fetch('/bitrix/tools/apple_pay_charge.php', {
            method: 'POST',
            headers: {'Content-Type': 'application/json'},
            body: JSON.stringify({ token: event.payment.token, orderId }),
        });
        const data = await res.json();
        session.completePayment(
            data.success ? ApplePaySession.STATUS_SUCCESS : ApplePaySession.STATUS_FAILURE
        );
        if (data.success) window.location.href = data.redirect;
    };

    session.begin();
}

Серверна валідація мерчанта

// /bitrix/tools/apple_pay_validate.php
$body = json_decode(file_get_contents('php://input'), true);
$validationUrl = filter_var($body['validationURL'] ?? '', FILTER_VALIDATE_URL);

$ch = curl_init($validationUrl);
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode([
        'merchantIdentifier' => APPLE_MERCHANT_ID,
        'displayName'        => 'Мій магазин',
        'initiative'         => 'web',
        'initiativeContext'  => $_SERVER['HTTP_HOST'],
    ]),
    CURLOPT_SSLCERT        => APPLE_CERT_PATH,       // .pem файл сертифіката мерчанта
    CURLOPT_SSLKEY         => APPLE_CERT_KEY_PATH,   // приватний ключ
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
]);
$merchantSession = curl_exec($ch);
curl_close($ch);

header('Content-Type: application/json');
echo $merchantSession; // передаємо безпосередньо в session.completeMerchantValidation

Обробка токена через еквайринг

Apple Pay передає зашифрований PKPaymentToken. Його потрібно передати у ваш еквайринг:

// Приклад для ЮКаси: /bitrix/tools/apple_pay_charge.php
$input   = json_decode(file_get_contents('php://input'), true);
$token   = $input['token'];
$orderId = (int)$input['orderId'];

$payment = $yookassaClient->createPayment([
    'amount'              => ['value' => getOrderAmount($orderId), 'currency' => 'RUB'],
    'payment_method_data' => [
        'type'         => 'apple_pay',
        'payment_data' => base64_encode(json_encode($token['paymentData'])),
    ],
    'capture'     => true,
    'description' => 'Замовлення №' . $orderId,
], uniqid('', true));

// Оновлюємо статус у 1С-Бітрікс при успіху
if ($payment->getStatus() === 'succeeded') {
    $bitrixPayment->setPaid('Y');
    $bitrixPayment->save();
}

Терміни

Завдання Термін
Верифікація домену, Merchant ID 0.5 дня
JS-кнопка + серверна валідація мерчанта 1 день
Інтеграція токена з еквайрингом та тестування 1 день