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

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

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

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

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

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

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

Часто задаваемые вопросы

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

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    895
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    597

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