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 | String | Тип операції | Purchase |
apple_validation_url | String | Цей параметр приходить в подію onvalidatemerchant, event.validationURL session.onvalidatemerchant = (event) => { console.log(event.validationURL); } | |
merchant_id | String | ID мерчанта | |
amount | Float | Сума операції. Приклад: 500.00 | |
signature | String | З метою підтвердження валідності даних має бути згенерований і переданий у запиті HMAC_SHA512 контрольний підпис з використанням SecretKey мерчанта. | |
Рядок, що підлягає HMAC_SHA512, генерується шляхом конкатенації параметрів merchant_id, order_id, amount, currency_iso, description розділених ";" (крапка з комою) в кодуванні UTF-8. | |||
Порядок параметрів під час конкатенації важливий! | |||
order_id | String | Унікальний номер операції на стороні мерчанта. Якщо операція дублюється - мерчант отримує помилку. | |
currency_iso | String | Валюта платежу | UAH |
description | String | Призначення платежу. Виводиться на платіжній сторінці, при введенні платіжних реквізитів. Відображається в виписці за рахунком і реєстрах | |
add_params | Array | Масив з додатковими параметрами. Розширені можливості пошуку потім повертаються мерчанту в callback виклику | |
callback_url | String | URL, на який прийде інформація про результат виконання платежу |
У відповідь надходять такі параметри:
Параметр | Тип | Опис |
---|---|---|
apple_validate_data | String | Дані, які необхідно передати в метод session.completeMerchantValidation |
order_key | String | Ідентифікатор замовлення в платіжній системі |
code | Integer | Код відповіді (0 - успіх) |
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 | String | Дані закодовані в base64, отримані в новій події onpaymentauthorized в параметрі event.payment. |
Приклад: session.onpaymentauthorized = (event) => { console.log(event.payment); } | ||
apple_pay_payment_data_decrypted | String | Параметр передається замість apple_pay_payment_data , якщо використовується оплата з розшифрованим токеном. Дані закодовані в base64, отримані в новій події onpaymentauthorized в параметрі event.payment. |
У відповідь приходить:
Параметр | Тип | Опис | Значення |
---|---|---|---|
transactionStatus | String | Cтатус операції | Approved - Успішно Declined - Відмова |
reason | String | Текстова причина відмови | |
reasonCode | String | Код помилки при відмові | |
rrn | String | Унікальний ідентифікатор банківської транзакції |
Після виклику цього методу приходить callback в backend мерчанта
Приклад запиту на оплату з розшифрованим токеном:
{
"order_key": "9910ae2538be76b828f63a08f14ddf4a267d5148713cb2bb2742848fd622cfd266d86cab7f44b",
"apple_pay_payment_data_decrypted": "ewoiYXBwbGljYXRpb25QcmltYXJ5QWNjb3VudE51bWJlciI6ICI0MDEyMDAwMDAwMDAzMTE5IiwKImFwcGxpY2F0aW9uRXhwaXJhdGlvbkRhdGUiOiAiMjgxMTMwIiwKImN1cnJlbmN5Q29kZSI6ICI5ODAiLAoidHJhbnNhY3Rpb25BbW91bnQiOiAxMDAwMCwKImRldmljZU1hbnVmYWN0dXJlcklkZW50aWZpZXIiOiAiMDQwMDEwMDMwMjczIiwKInBheW1lbnREYXRhVHlwZSI6ICIzRFNlY3VyZSIsCiJwYXltZW50RGF0YSI6ewoib25saW5lUGF5bWVudENyeXB0b2dyYW0iOiIxMjMiLAoiZWNpSW5kaWNhdG9yIjoiNSIKfQp9Cg=="
}
Структура розшифрованого токена:
Параметр | Тип | Опис |
---|---|---|
applicationPrimaryAccountNumber | String | Токенізований номер картки |
applicationExpirationDate | String | Дата закінчення терміну дії картки (формат YYMMDD) |
currencyCode | String | Валюта платежу |
transactionAmount | Float | Сума транзакції. Приклад 500.00 |
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"
}
}