Нативні кнопки Apple Pay та Google Pay дають змогу мерчанту приймати оплату без використання платіжної сторінки NovaPay.
Мерчант самостійно розміщує та відображає нативні кнопки у своєму інтерфейсі відповідно до вимог Apple Pay або Google Pay. Після підтвердження оплати платіжний токен передається через бекенд мерчанта до NovaPay за допомогою external API.
Для інтеграції використовуються два додаткові методи:
- POST /v1/apple-pay/validate-merchant — валідація мерчанта для Apple Pay;
- POST /v1/pay-token — проведення оплати за токеном Apple Pay або Google Pay.
Передумови інтеграції
Перед початком інтеграції мерчант повинен:
- пройти онбординг 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 мерчанту необхідно:
- Створити Apple Developer Account та власний Merchant ID.
- Зареєструвати домени сайту для відповідного Merchant ID.
- Розмістити на своїх доменах файл
apple-developer-merchantid-domain-association. - Надати NovaPay CSR (Certificate Signing Request) для випуску Payment Processing Certificate.
- Отримати від NovaPay випущений Taslink-сертифікат.
- Завершити налаштування Apple Pay у своєму Apple Developer Account.
Важливо
Apple не пройде валідацію для домену, який не зареєстрований для відповідного Merchant ID.
Підключення Google Pay
Для підключення Google Pay мерчанту необхідно:
- Зареєструватися в Google Pay & Wallet Console.
- Отримати власний
merchantId. - Пройти перевірку сайту з боку Google.
- Отримати від NovaPay
gatewayMerchantId— ідентифікатор термінала мерчанта в Taslink.
Для токенізації платежу на фронтенді використовується така конфігурація:
tokenizationSpecification: {
type: 'PAYMENT_GATEWAY',
parameters: {
gateway: 'taslink',
gatewayMerchantId: '<видається NovaPay при онбордингу>'
}
}
Підтримуються методи автентифікації картки:CRYPTOGRAM_3DS;PAN_ONLY.
Для PAN_ONLY оплата частіше потребує додаткової 3DS-перевірки з перенаправленням платника на сторінку банку.
Флоу оплати
1. Створення платіжної сесії
Мерчант створює платіжну сесію стандартними методами external API:
- POST /v1/session — створює сесію;
- POST /v1/payment — додає до сесії платіжні операції.
2. Валідація мерчанта для Apple Pay
Цей крок виконується тільки для Apple Pay.
Після натискання платником кнопки Apple Pay браузер викликає подію onvalidatemerchant.
Мерчант:
- передає запит через власний бекенд до POST /v1/apple-pay/validate-merchant;
- отримує merchant session;
- передає отримані дані в
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