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 мерчанта, выдается процесcингом | |
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 вызове | |
Описание add_params находится в Справочнике | |||
Обязательные поля из описания должны быть включены в запрос! | |||
callback_url | string | URL на который придет информация о результате выполнения платежа |
В ответ приходят следующие параметры:
Параметр | Тип | Описание |
---|---|---|
apple_validate_data | string | Данные которые необходимо передать в метод session.completeMerchantValidation |
order_key | string | Идентификатор заказа в платежной системе |
code | integer | Код ответа (0 - успех) |
message | string | Расшифровка кода ответа |
Подтверждение платежа Apple Pay (api/apple/payment)
Система сама определяет по какому пути идет аутентификация с 3DS
или без, в зависимости от данных полученных от Apple.
Production url: https://****.procard-ltd.com/api/apple/payment
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 | Статус операции | 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"
}
}