Перейти до основного вмісту
Версія: 1.0.0

ApplePayWeb

Операція купівлі через Apple Pay​

Для інтеграції кнопки Apple Pay на платіжну сторінку інтернет магазину необхідно реалізувати метод ApplePaySession.canMakePaymentsWithActiveCard. Метод визначає, чи підтримує цей пристрій оплату за допомогою Apple Pay.

Якщо так - необхідно відобразити кнопку "Купити за допомогою Apple Pay".

Далі необхідно створити об'єкт ApplePaySession з параметрами покупки:

  countryCode: 'UA',
currencyCode: 'UAH',
supportedNetworks: ['visa', 'masterCard'],
merchantCapabilities: ['supports3DS'],
total: { label: 'Your Merchant Name', amount: '10.00' },

Опис полів можна подивитися в документації Apple Pay on Web.

На подію onvalidatemerchant необхідно призначити обробник, в якому буде викликатися API "api / apple / validate". Опис методу буде нижче.

На подію onpaymentauthorized необхідно призначити обробник, який буде викликати API "api / apple / payment".

Після підтвердження платежу в onpaymentauthorized необхідно викликати метод ApplePaySession.completePayment.

Документацію по ApplePaySession можна знайти на оф.сайті Apple.

Валідація мерчанта Apple Pay (api/apple/validate)​

Production url: https://****.procard-ltd.com/api/apple/validate

POST-параметри:

ПараметрТипОписЗначення
operationstringТип операціїPurchase
apple_validation_urlstringЦей параметр приходить в подію onvalidatemerchant, event.validationURL
session.onvalidatemerchant = (event) => {
  console.log(event.validationURL);
}
merchant_idstringID мерчанта
amountfloatСума операції. Приклад: 500.00
signaturestringЗ метою підтвердження валідності даних має бути згенерований і переданий у запиті HMAC_SHA512 контрольний підпис з використанням SecretKey мерчанта.
Рядок, що підлягає HMAC_SHA512, генерується шляхом конкатенації параметрів merchant_id, order_id, amount, currency_iso, description розділених ";" (крапка з комою) в кодуванні UTF-8.
В amount слід відкинути незначущі нулі: 100.00 → 100, 100.50 → 100.5, 100.01 → 100.01.
Порядок параметрів під час конкатенації важливий!
order_idstringУнікальний номер операції на стороні мерчанта. Якщо операція дублюється - мерчант отримує помилку.
currency_isostringВалюта платежуUAH
descriptionstringПризначення платежу. Виводиться на платіжній сторінці, при введенні платіжних реквізитів. Відображається в виписці за рахунком і реєстрах
add_paramsarrayМасив з додатковими параметрами. Додаткові параметри запиту потім повертаються мерчанту в callback виклику
Опис add_params знаходиться у Довіднику
Обов'язкові поля з опису мають бути включені до запиту!
approve_urlstringURL для переадресації у разі, якщо платіж успішний
decline_urlstringURL для переадресації у разі, якщо платіж не успішний
callback_urlstringURL, на який прийде інформація про результат виконання платежу

У відповідь надходять такі параметри:

ПараметрТипОпис
apple_validate_datastringДані, які необхідно передати в метод session.completeMerchantValidation
order_keystringІдентифікатор замовлення в платіжній системі
codeintegerКод відповіді (0 - успіх)
messagestringРозшифровка коду відповіді

Підтвердження платежу Apple Pay (api/apple/payment)​

Production url: https://****.procard-ltd.com/api/apple/payment

Система сама визначає, яким шляхом іде автентифікація з 3DS або без залежно від даних отриманих від Apple.

POST-параметри:

ПараметрТипОпис
order_keystringІдентифікатор замовлення в платіжній системі
apple_pay_payment_datastringДані закодовані в base64, отримані в новій події onpaymentauthorized в параметрі event.payment.
Приклад:
session.onpaymentauthorized = (event) => {
  console.log(event.payment);
}
apple_pay_payment_data_decryptedstringПараметр передається замість apple_pay_payment_data, якщо використовується оплата з розшифрованим токеном. Дані закодовані в base64, отримані в новій події onpaymentauthorized в параметрі event.payment.

У відповідь приходить:

ПараметрТипОписЗначення
transactionStatusstringСтатус операціїApproved - Успішно
Declined - Відмова
reasonstringТекстова причина відмови
reasonCodestringКод помилки при відмові
rrnstringУнікальний ідентифікатор банківської транзакції

Після виклику цього методу приходить callback в backend мерчанта

Приклад запиту на оплату з розшифрованим токеном:

{
"order_key": "9910ae2538be76b828f63a08f14ddf4a267d5148713cb2bb2742848fd622cfd266d86cab7f44b",
"apple_pay_payment_data_decrypted": "ewoiYXBwbGljYXRpb25QcmltYXJ5QWNjb3VudE51bWJlciI6ICI0MDEyMDAwMDAwMDAzMTE5IiwKImFwcGxpY2F0aW9uRXhwaXJhdGlvbkRhdGUiOiAiMjgxMTMwIiwKImN1cnJlbmN5Q29kZSI6ICI5ODAiLAoidHJhbnNhY3Rpb25BbW91bnQiOiAxMDAwMCwKImRldmljZU1hbnVmYWN0dXJlcklkZW50aWZpZXIiOiAiMDQwMDEwMDMwMjczIiwKInBheW1lbnREYXRhVHlwZSI6ICIzRFNlY3VyZSIsCiJwYXltZW50RGF0YSI6ewoib25saW5lUGF5bWVudENyeXB0b2dyYW0iOiIxMjMiLAoiZWNpSW5kaWNhdG9yIjoiNSIKfQp9Cg=="
}

Структура розшифрованого токена:

ПараметрТипОпис
applicationPrimaryAccountNumberstringТокенізований номер картки
applicationExpirationDatestringДата закінчення терміну дії картки (формат YYMMDD)
currencyCodestringВалюта платежу
transactionAmountfloatСума транзакції. Приклад 500.00
deviceManufacturerIdentifierstringУнікальний ідентифікатор виробника пристрою
paymentDataTypestringТип платіжних даних
paymentData
onlinePaymentCryptogramstringКриптограма для безпечних онлайн-транзакцій
eciIndicatorstringІндикатор електронної торгівлі, показує рівень безпеки транзакції

Приклад розшифрованого токена:

{
"applicationPrimaryAccountNumber": "4012000000003119",
"applicationExpirationDate": "281130",
"currencyCode": "980",
"transactionAmount": 10000,
"deviceManufacturerIdentifier": "040010030273",
"paymentDataType": "3DSecure",
"paymentData": {
"onlinePaymentCryptogram": "123",
"eciIndicator": "5"
}
}