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