Перейти до основного вмісту
Версія: 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.
Порядок параметрів під час конкатенації важливий!
order_idStringУнікальний номер операції на стороні мерчанта. Якщо операція дублюється - мерчант отримує помилку.
currency_isoStringВалюта платежуUAH
descriptionStringПризначення платежу. Виводиться на платіжній сторінці, при введенні платіжних реквізитів. Відображається в виписці за рахунком і реєстрах
add_paramsArrayМасив з додатковими параметрами. Розширені можливості пошуку потім повертаються мерчанту в callback виклику
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.

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

ПараметрТипОписЗначення
transactionStatusStringCтатус операції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"
}
}