Интеграция Apple Pay: от Merchant ID до транзакции

Интеграция Apple Pay — это не просто добавление кнопки, а сложная цепочка настроек от Merchant ID до серверной верификации токена. Мы берём на себя весь цикл: настраиваем сертификаты, клиентскую часть и серверную обработку платежей. Наша команда реализует проект под ключ — от аудита до сопровождения, обеспечивая стабильную работу и поддержку.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Интеграция Apple Pay: от Merchant ID до транзакции
Сложный
~2-3 дня
Часто задаваемые вопросы

Почему интеграция Apple Pay сложнее кнопки

Многие считают, что интеграция Apple Pay — это просто добавить кнопку. На практике мы сталкиваемся с цепочкой из Merchant ID, сертификатов, PKPaymentAuthorizationController, серверной верификации платёжного токена и обработки финального статуса транзакции. Ошибка в любом звене — и либо приложение не покажет кнопку вовсе, либо получит отказ от Apple Pay на этапе авторизации. На одном проекте клиент потратил неделю на настройку Merchant ID, а кнопка так и не появилась — причина была в устаревшем сертификате. Требуется до 10 шагов настройки, и каждый шаг имеет свои подводные камни.

Apple Pay использует шифрование на уровне устройства — каждая транзакция уникальна, что подтверждает официальная документация Apple Pay Security Guide. Это требует корректной настройки как на клиенте, так и на сервере. В этой статье разберём ключевые шаги и частые проблемы. Наш опыт — 20+ успешных интеграций, от retail до fintech, с экономией времени до 70% за счёт готовых решений.

Как настроить Merchant ID и сертификаты

Всё начинается в Apple Developer Portal:

  1. Создаём Merchant ID: merchant.com.yourcompany.appname
  2. Генерируем Payment Processing Certificate — используется Apple для шифрования токена перед отправкой вашему серверу
  3. Добавляем домен для Apple Pay on the Web (если нужен) — требует верификационного файла на сервере

В Xcode: Signing & Capabilities → Добавить Apple Pay → выбрать Merchant ID. Xcode автоматически обновит .entitlements файл:

<key>com.apple.developer.in-app-payments</key>
<array>
    <string>merchant.com.yourcompany.appname</string>
</array>

Без этого entitlement Apple Pay не активируется на устройстве, даже если код написан правильно.

PKPaymentRequest и PKPaymentAuthorizationController

import PassKit

class CheckoutViewController: UIViewController {
    func startApplePay() {
        guard PKPaymentAuthorizationController.canMakePayments(
            usingNetworks: [.visa, .masterCard, .mir]
        ) else {
            // Показываем альтернативный способ оплаты
            return
        }

        let request = PKPaymentRequest()
        request.merchantIdentifier = "merchant.com.yourcompany.appname"
        request.supportedNetworks = [.visa, .masterCard, .mir]
        request.merchantCapabilities = [.capability3DS]
        request.countryCode = "RU"
        request.currencyCode = "RUB"

        let item = PKPaymentSummaryItem(
            label: "Заказ №1234",
            amount: NSDecimalNumber(string: "1500.00")
        )
        let shipping = PKPaymentSummaryItem(
            label: "Доставка",
            amount: NSDecimalNumber(string: "250.00")
        )
        let total = PKPaymentSummaryItem(
            label: "YourCompany", // имя вашей компании, показывается на Face ID/Touch ID экране
            amount: NSDecimalNumber(string: "1750.00")
        )
        request.paymentSummaryItems = [item, shipping, total]

        let controller = PKPaymentAuthorizationController(paymentRequest: request)
        controller.delegate = self
        controller.present(completion: nil)
    }
}

extension CheckoutViewController: PKPaymentAuthorizationControllerDelegate {
    func paymentAuthorizationController(
        _ controller: PKPaymentAuthorizationController,
        didAuthorizePayment payment: PKPayment,
        handler completion: @escaping (PKPaymentAuthorizationResult) -> Void
    ) {
        // payment.token.paymentData — зашифрованный JSON токен
        // Отправляем на бэкенд для верификации
        sendTokenToBackend(payment.token.paymentData) { success in
            completion(PKPaymentAuthorizationResult(
                status: success ? .success : .failure,
                errors: nil
            ))
        }
    }

    func paymentAuthorizationControllerDidFinish(_ controller: PKPaymentAuthorizationController) {
        controller.dismiss(completion: nil)
    }
}

Важный нюанс с .mir: Mir Pay требует отдельной настройки и работает только на картах, выпущенных в НСПК. Не все эквайеры поддерживают Mir через Apple Pay — нужно уточнять у платёжного провайдера.

Серверная верификация токена

payment.token.paymentData — это зашифрованный JSON, который Apple зашифровала вашим Payment Processing Certificate. Расшифровывается на сервере.

Структура токена:

{
  "version": "EC_v1",
  "data": "base64-encrypted-payment-data",
  "signature": "base64-pkcs7-signature",
  "header": {
    "ephemeralPublicKey": "base64-ec-public-key",
    "publicKeyHash": "base64-sha256-hash",
    "transactionId": "hex-transaction-id"
  }
}

Процесс расшифровки:

  1. Верифицировать подпись через Apple Root CA
  2. Восстановить shared secret через ECDH (ваш приватный ключ + ephemeralPublicKey из токена)
  3. Получить симметричный ключ через HKDF
  4. Расшифровать data через AES-256-GCM

На практике большинство платёжных провайдеров (Stripe, CloudPayments, ЮKassa) берут на себя расшифровку — вы просто передаёте им сырой paymentData. Самостоятельная реализация нужна только при прямом эквайринге. Сравним подходы:

Аспект Ручная расшифровка Через платёжного провайдера
Сложность Высокая: ECDH, HKDF, AES-GCM Низкая: передаём paymentData
Надёжность Полный контроль, но много точек отказа Проверено миллионами транзакций
Время реализации От недели 1–2 дня

Apple документация: «Apple Pay использует шифрование на уровне устройства, что делает каждую транзакцию уникальной». Платёжный провайдер ускоряет интеграцию в 5 раз по сравнению с ручной расшифровкой.

Как протестировать Apple Pay?

Apple Pay не работает на симуляторе для реальных транзакций. Для тестирования нужно устройство с тестовой картой Visa из Apple Sandbox. Тестовые карты доступны только аккаунтам в Apple Sandbox environment. На физическом устройстве можно проверить полный цикл: от отображения кнопки до получения статуса транзакции.

Что делать, если кнопка Apple Pay не появляется?

Причины: Merchant ID не добавлен в entitlements (проверьте .entitlements файл), сертификат истёк (срок 2 года), canMakePayments(usingNetworks:) возвращает false на симуляторе без настроенных карт. Наше решение: последовательная проверка каждого элемента цепочки. Сертификат нужно обновлять раз в два года — напоминаем клиентам за месяц до истечения.

Как обновить сертификат?Зайдите в Apple Developer Portal, в раздел Certificates, Identifiers & Profiles. Создайте новый Payment Processing Certificate для того же Merchant ID. Загрузите CSR-файл, скачайте новый сертификат, установите на сервер и перезапустите процесс. Всё занимает 15 минут.

Типичные проблемы и их решение

Ошибка Причина Решение
Кнопка не отображается Неверный entitlements или истёк сертификат Проверьте .entitlements и срок сертификата
Failure без сообщения errors не передан в PKPaymentAuthorizationResult Передавайте PKPaymentError
Ошибка на симуляторе Apple Pay не работает на симуляторе Тестируйте на реальном устройстве с Sandbox
Сертификат истёк Срок действия 2 года Обновите сертификат через Developer Portal

Что входит в нашу работу

  • Регистрация Merchant ID, генерация и загрузка сертификатов
  • Реализация PKPaymentRequest с корректными paymentSummaryItems
  • Интеграция с платёжным провайдером (передача token.paymentData)
  • Обработка ошибок с PKPaymentError
  • Тестирование на физическом устройстве в Sandbox

Закажите интеграцию под ключ — мы реализуем полный цикл от настройки сертификатов до тестирования. Свяжитесь с нами для оценки вашего проекта — мы поможем с интеграцией Apple Pay любой сложности.

Сроки

2–3 дня включая настройку в Developer Portal и интеграцию с провайдером. Благодаря готовым шаблонам срок сокращается на 70% по сравнению с самостоятельной реализацией. Стоимость рассчитывается индивидуально после анализа требований.

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

Последние работы

  • Разработка мобильного приложения для компании FEEDME
    Разработка мобильного приложения для компании FEEDME
    1010
  • Разработка мобильного приложения для компании XOOMER
    Разработка мобильного приложения для компании XOOMER
    903
  • Разработка мобильного приложения для компании RHL
    Разработка мобильного приложения для компании RHL
    1332
  • Разработка мобильного приложения для компании ZIPPY
    Разработка мобильного приложения для компании ZIPPY
    1180
  • Разработка мобильного приложения для компании Affhome
    Разработка мобильного приложения для компании Affhome
    1107
  • Разработка мобильного приложения для компании FLAVORS
    Разработка мобильного приложения для компании FLAVORS
    714