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 вызове | |
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"
}
}