Оплата через нативні кнопки Apple Pay та Google Pay

Нативні кнопки Apple Pay та Google Pay дають змогу мерчанту приймати оплату без використання платіжної сторінки NovaPay.

Мерчант самостійно розміщує та відображає нативні кнопки у своєму інтерфейсі відповідно до вимог Apple Pay або Google Pay. Після підтвердження оплати платіжний токен передається через бекенд мерчанта до NovaPay за допомогою external API.

Для інтеграції використовуються два додаткові методи:

Передумови інтеграції

Перед початком інтеграції мерчант повинен:

  • пройти онбординг Apple Pay та/або Google Pay у NovaPay;
  • мати чинну інтеграцію з external API;
  • використовувати стандартну автентифікацію external API: RSA-підпис тіла запиту в заголовку x-sign та, за наявності, IP allowlist;
  • самостійно реалізувати wallet-кнопки відповідно до офіційних вимог Apple Pay JS API або Google Pay JS API.

Підключення Apple Pay

Для підключення Apple Pay мерчанту необхідно:

  1. Створити Apple Developer Account та власний Merchant ID.
  2. Зареєструвати домени сайту для відповідного Merchant ID.
  3. Розмістити на своїх доменах файл apple-developer-merchantid-domain-association.
  4. Надати NovaPay CSR (Certificate Signing Request) для випуску Payment Processing Certificate.
  5. Отримати від NovaPay випущений Taslink-сертифікат.
  6. Завершити налаштування Apple Pay у своєму Apple Developer Account.

Важливо

Apple не пройде валідацію для домену, який не зареєстрований для відповідного Merchant ID.


Підключення Google Pay

Для підключення Google Pay мерчанту необхідно:

  1. Зареєструватися в Google Pay & Wallet Console.
  2. Отримати власний merchantId.
  3. Пройти перевірку сайту з боку Google.
  4. Отримати від NovaPay gatewayMerchantId — ідентифікатор термінала мерчанта в Taslink.

Для токенізації платежу на фронтенді використовується така конфігурація:

tokenizationSpecification: {
  type: 'PAYMENT_GATEWAY',
  parameters: {
    gateway: 'taslink',
    gatewayMerchantId: '<видається NovaPay при онбордингу>'
  }
}

Підтримуються методи автентифікації картки:CRYPTOGRAM_3DS;PAN_ONLY.

Для PAN_ONLY оплата частіше потребує додаткової 3DS-перевірки з перенаправленням платника на сторінку банку.


Флоу оплати

1. Створення платіжної сесії

Мерчант створює платіжну сесію стандартними методами external API:

  1. POST /v1/session — створює сесію;
  2. POST /v1/payment — додає до сесії платіжні операції.

2. Валідація мерчанта для Apple Pay

Цей крок виконується тільки для Apple Pay.

Після натискання платником кнопки Apple Pay браузер викликає подію onvalidatemerchant.

Мерчант:

  1. передає запит через власний бекенд до POST /v1/apple-pay/validate-merchant;
  2. отримує merchant session;
  3. передає отримані дані в completeMerchantValidation().

Для Google Pay цей крок не виконується.

3. Отримання платіжного токена

Платник підтверджує оплату в Apple Pay або Google Pay.

Після підтвердження фронтенд мерчанта отримує зашифрований платіжний токен та передає його на бекенд мерчанта.

4. Проведення оплати

Бекенд мерчанта передає отриманий токен і дані платіжної сесії до POST /v1/pay-token

У відповідь NovaPay повертає статус операції.

Якщо додаткова перевірка не потрібна, відповідь містить статус платежу.

Якщо для операції потрібна 3DS-перевірка, разом зі статусом повертається acs_url.

5. Проходження 3DS

Якщо NovaPay повернув acs_url, мерчант перенаправляє платника за цією адресою для проходження 3DS-перевірки на стороні банку.

Після завершення перевірки платник повертається на redirect_url, зазначений мерчантом.

6. Отримання фінального статусу

Фінальний статус операції мерчант отримує стандартним способом:

  • через webhook на callback_url, вказаний для платіжної сесії;
  • або за допомогою POST /v1/get-status .

Загальна схема

Створення сесії
POST /v1/session
        ↓
Додавання платежу
POST /v1/payment
        ↓
Платник натискає Apple Pay / Google Pay
        ↓
[тільки Apple Pay]
POST /v1/apple-pay/validate-merchant
        ↓
Підтвердження платежу платником
        ↓
Отримання зашифрованого wallet-токена
        ↓
POST /v1/pay-token
        ↓
   ┌────┴────┐
   │         │
acs_url     без 3DS
   │         │
   ↓         │
3DS         │
   │         │
redirect_url│
   └────┬────┘
        ↓
Фінальний статус
callback_url / POST /v1/get-status