Перейти к основному содержимому
Версия: 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 мерчанта, выдается процесcингом
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)

Система сама определяет по какому пути идет аутентификация с 3DS или без, в зависимости от данных полученных от Apple.

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

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"
}
}