Перейти до основного вмісту
Версія: 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-параметри:

ПараметрОписТипЗначення
operationТип операціїStringPurchase
apple_validation_urlЦей параметр приходить в подію onvalidatemerchant, event.validationURL
session.onvalidatemerchant = (event) => {
  console.log(event.validationURL);
}
String
merchant_idID мерчантаString
amountСума операції. Приклад: 500.00Float
signatureЗ метою підтвердження валідності даних має бути згенерований і переданий у запиті HMAC_SHA512 контрольний підпис з використанням SecretKey мерчанта.String
Рядок, що підлягає HMAC_SHA512, генерується шляхом конкатенації параметрів merchant_id, order_id, amount, currency_iso, description розділених ";" (крапка з комою) в кодуванні UTF-8.
Порядок параметрів під час конкатенації важливий!
order_idУнікальний номер операції на стороні мерчанта. Якщо операція дублюється - мерчант отримує помилку.String
currency_isoВалюта платежуStringUAH
descriptionПризначення платежу. Виводиться на платіжній сторінці, при введенні платіжних реквізитів. Відображається в виписці за рахунком і реєстрахString
add_paramsМасив з додатковими параметрами. Розширені можливості пошуку потім повертаються мерчанту в callback викликуArray
callback_urlURL, на який прийде інформація про результат виконання платежуString

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

ПараметрОписТип
apple_validate_dataДані, які необхідно передати в метод session.completeMerchantValidationstring
order_keyІдентифікатор замовлення в платіжній системіstring
codeКод відповіді (0 - успіх)integer
messageРозшифровка коду відповідіstring

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

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

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

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

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

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

ПараметрОписТипЗначення
transactionStatusCтатус операціїStringApproved - Успішно
Declined - Відмова
reasonТекстова причина відмовиString
reasonCodeКод помилки при відмовіString

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

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

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

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

ПараметрОписаниеТип
applicationPrimaryAccountNumberТокенізований номер карткиString
applicationExpirationDateДата закінчення терміну дії картки (формат YYMMDD)String
currencyCodeВалюта платежуString
transactionAmountСума транзакції. Приклад 500.00Float
deviceManufacturerIdentifierУнікальний ідентифікатор виробника пристроюString
paymentDataTypeТип платіжних данихString
paymentData
onlinePaymentCryptogramКриптограма для безпечних онлайн-транзакційString
eciIndicatorІндикатор електронної торгівлі, показує рівень безпеки транзакціїString

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

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