Apple Pay
Общая информация
Apple Pay — это простой, безопасный и конфиденциальный способ оплаты покупок в одно касание на веб-сайтах, в мобильных приложениях и других каналах оплаты. С подробным списком устройств, совместимых с Apple Pay можно ознакомиться на сайте.
Apple Pay может быть доступен для выбора наряду с другими способами оплаты и отображаться на платежной странице в виде специальной кнопки.
Важно
При использовании технологии Apple Pay для принятия платежей совместно с ioka Вам необходимо соблюдать ряд условий, которые издает компания Apple.
Интеграция
Мобильные приложения
Для приема платежей в мобильном приложении на IOS c помощью кнопки оплаты Apple Pay следуйте инструкции по применению SDK.
Стандартная интеграция (только для веб-сайтов)
Для использования технологии Apple Pay Вам необходимо зарегистрировать Merchant ID, сформировать платежный сертификат, сертификат для веб-платежей и подтвердить владение доменами сайтов, на которых будет производиться оплата.
Схема оплаты
Схема оплаты при стандартной интеграции подразумевает самостоятельное размещение Apple Pay на сайте и включает в себя 3 этапа:
- Проверка совместимости устройства - если устройство поддерживает Apple Pay, то необходимо отобразить покупателю кнопку Apple Pay
- Авторизация платежа — для инициирования оплаты и подтверждения ее покупателем через FaceID или TouchID необходимо открыть сессию Apple Pay on the Web
- После успешной авторизации Apple формирует зашифрованный токен, который необходимо передать в специальный роут для создания заказа и завершения оплаты через Apple Pay
1. Регистрация Merchant ID:
Для создания Merchant ID необходимо:
- Перейти и авторизоваться в консоль аккаунта разработчика Apple
- Перейти в раздел "Certificates, IDs & Profiles"
- Слева в боковом меню выберите пункт "Identifiers"
- Нажмите на иконку плюсика, на появившейся странице в списке выберите пункт "Merchant IDs" и затем нажмите кнопку "Continue"
- На появившейся странице укажите в поле "Description" простое описание магазина, а в поле Identifier введите адрес своего домена в обратном порядке kz.domain, должно появится название вида merchant.kz.domain
2. Создание сертификатов:
- Свяжитесь с нашим аккаунт-менеджером или напишите письмо с запросом на получение CSR для Merchant ID, на адрес support@ioka.kz с указанием зарегистрированного в Apple Merchant ID. Наша служба поддержки сформирует два CSR файла и отправит Вам обратным письмом.
- Используя CSR файлы полученные от нас сформируйте в консоли Apple Developer два сертификата: Payment Processing Certificate и Merchant Identity Certificate и передайте в нашу службу поддержки.
- Чтобы создать Payment Processing Certificate следуйте инструкции в картинках ниже:
- Чтобы создать Merchant Identity Certificate откройте в консоли Ваш Merchant ID, созданный ранее и следуйте инструкции по картинкам ниже:
3. Подтверждение доменов:
Добавьте домены в консоли Apple Developer для каждого Вашего сайта, где планируете принимать оплату через Apple Pay.
Обратите внимание, что сайты должны использовать схему HTTPS и поддерживать протокол TLS 1.2.
Чтобы добавить домен в консоли Apple Pay следуйте следующей инструкции:
- Подтвердите владение доменом:
Открытие сессии Apple Pay (только для веб-сайтов)
Запрос на открытие сессии и создание платежного запроса необходимо отправлять при нажатии пользователем кнопки Apple Pay.
Пример запроса:
- HTTP
- cURL
- Python
- PHP
POST /v2/payment-methods/{order_id}/apple-pay-session HTTP/1.1
Host: stage-api.ioka.kz
Content-Type: application/json
{
"url": "https://your.url",
"platform": "web",
"domain_name": "your.domain"
}
curl --location --request POST 'https://stage-api.ioka.kz/v2/payment-methods/{order_id}/apple-pay-session' \
--header 'Content-Type: application/json' \
--data-raw '{
"url": "https://your.url",
"platform": "web",
"domain_name": "your.domain"
}'
import requests
import json
url = "https://stage-api.ioka.kz/v2/payment-methods/{order_id}/apple-pay-session"
payload = json.dumps({
"url": "https://your.url",
"platform": "web",
"domain_name": "your.domain"
})
headers = {
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
<?php
$client = new http\Client;
$request = new http\Client\Request;
$request->setRequestUrl('https://stage-api.ioka.kz/v2/payment-methods/{order_id}/apple-pay-session');
$request->setRequestMethod('POST');
$body = new http\Message\Body;
$body->append('{
"url": "https://your.url",
"platform": "web",
"domain_name": "your.domain"
}');
$request->setBody($body);
$request->setOptions(array());
$request->setHeaders(array(
'Content-Type' => 'application/json'
));
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody();
Примеры ответов:
- 200
- 400
- 404
{
"statusCode": null,
"statusMessage": null,
"displayName": "ioka",
"domainName": "ioka.kz",
"epochTimestamp": 11111111111111,
"expiresAt": 11111111111111,
"merchantIdentifier": "C95...",
"merchantSessionIdentifier": "SSH...",
"nonce": "1a4...",
"operationalAnalyticsIdentifier": "ioka:C95...",
"retries": 0,
"signature": "303..."
}
{
"code": "ProviderNotConnected",
"message": "Провайдер ApplePay не подключен."
}
{
"code": "OrderNotFound",
"message": "Заказ не найден."
}
Завершение оплаты через Apple Pay
После успешной аутентификацию пользователя с помощью Touch ID или Face ID, API Apple Pay возвращает объект, содержащий платежные данные (в зашифрованном виде), а также информацию о клиенте. Ниже приведен пример полной структуры платежного объекта Apple Pay:
{
"details": {
"token": {
"paymentData": {
"data": "4Zl...Q==",
"header": {
"ephemeralPublicKey": "MFk...Q==",
"publicKeyHash": "Dk6...TM=",
"transactionId": "6e6...b93"
},
"signature": "MIA...A==",
"version": "EC_v1"
},
"paymentMethod": {
"displayName": "Visa 11111",
"network": "Visa",
"type": "debit"
},
"transactionIdentifier": "6E6...B93"
}
},
"methodName": "https://apple.com/apple-pay",
"payerEmail": "None",
"payerName": "None",
"payerPhone": "None",
"requestId": "d43...b6c",
"shippingAddress": "None",
"shippingOption": "None"
}
Запрос на one-click оплату
Данный метод может использоваться для моментальной оплаты, т.е. создается заказ и для него сразу же инициируется оплата методом Apple Pay
Пример запроса:
- В
amount
необходимо передавать сумму заказа в минорных денежных единицах (в тиынах), соответсвующую сумме указанной при создании сессии Apple Pay - В
tool_type
необходимо передавать "APPLE_PAY" - В
apple_pay
необходимо передавать данные, содержащиеся в поле token платежного объекта Apple Pay - Остальные параметры необязательны, но помогут дополнить заказ и описать процесс оплаты
- HTTP
- cURL
- Python
- PHP
POST /v2/orders/tool HTTP/1.1
Host: stage-api.ioka.kz
Content-Type: application/json
Content-Length: 547
{
"amount": 500,
"tool_type": "APPLE_PAY",
"apple_pay": {
"paymentData": {
"data": "4ZlLT...",
"header": {
"ephemeralPublicKey": "MFkww...",
"publicKeyHash": "Dk6sv...",
"transactionId": "6e6c5..."
},
"signature": "MIAGC...",
"version": "EC_v1"
},
"paymentMethod": {
"displayName": "Visa 1111",
"network": "Visa",
"type": "debit"
},
"transactionIdentifier": "6E6C5..."
}
}
curl --location --request POST 'https://stage-api.ioka.kz/v2/orders/tool' \
--header 'Content-Type: application/json' \
--data-raw '{
"amount": 500,
"tool_type": "APPLE_PAY",
"apple_pay": {
"paymentData": {
"data": "4ZlLT...",
"header": {
"ephemeralPublicKey": "MFkww...",
"publicKeyHash": "Dk6sv...",
"transactionId": "6e6c5..."
},
"signature": "MIAGC...",
"version": "EC_v1"
},
"paymentMethod": {
"displayName": "Visa 1111",
"network": "Visa",
"type": "debit"
},
"transactionIdentifier": "6E6C5..."
}
}
'
import requests
import json
url = "https://stage-api.ioka.kz/v2/orders/tool"
payload = json.dumps({
"amount": 500,
"tool_type": "APPLE_PAY",
"apple_pay": {
"paymentData": {
"data": "4ZlLT...",
"header": {
"ephemeralPublicKey": "MFkww...",
"publicKeyHash": "Dk6sv...",
"transactionId": "6e6c5..."
},
"signature": "MIAGC...",
"version": "EC_v1"
},
"paymentMethod": {
"displayName": "Visa 1111",
"network": "Visa",
"type": "debit"
},
"transactionIdentifier": "6E6C5..."
}
})
headers = {
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
<?php
$client = new http\Client;
$request = new http\Client\Request;
$request->setRequestUrl('https://stage-api.ioka.kz/v2/orders/tool');
$request->setRequestMethod('POST');
$body = new http\Message\Body;
$body->append('{
"amount": 500,
"tool_type": "APPLE_PAY",
"apple_pay": {
"paymentData": {
"data": "4ZlLT...",
"header": {
"ephemeralPublicKey": "MFkww...",
"publicKeyHash": "Dk6sv...",
"transactionId": "6e6c5..."
},
"signature": "MIAGC...",
"version": "EC_v1"
},
"paymentMethod": {
"displayName": "Visa 1111",
"network": "Visa",
"type": "debit"
},
"transactionIdentifier": "6E6C5..."
}
}
');
$request->setBody($body);
$request->setOptions(array());
$request->setHeaders(array(
'Content-Type' => 'application/json'
));
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody();
Примеры ответов:
- 200
- 400
- 400
- 404
- 409
{
"id": "pay_test",
"order_id": "ord_test",
"status": "CAPTURED",
"created_at": "2022-06-20T00:00:00.000000",
"approved_amount": 500,
"captured_amount": 500,
"refunded_amount": 0,
"processing_fee": 12.5,
"tds": false,
"payer": {
"pan_masked": "411111******1111",
"expiry_date": "12/24",
"holder": "holder",
"payment_system": null,
"emitter": null,
"email": null,
"phone": null,
"customer_id": null,
"card_id": null,
"iin": null
},
"acquirer": {
"name": "epay_v2",
"reference": "111111111111"
},
"error": null,
"action": null
}
{
"code": "InvalidTransactionAmount",
"message": "Сумма транзакции Apple Pay не совпадает с суммой заказа."
}
{
"code": "InvalidPaymentToken",
"message": "Неверный платежный токен."
}
{
"code": "ShopConfigNotFound",
"message": "Конфигурации магазина не найдены."
}
{
"code": "OrderExists",
"message": "Заказ с указанным external_id уже существует."
}
Запрос на оплату
Данный метод может использоваться для оплаты заранее созданного заказа
Пример запроса:
- В
tool_type
необходимо передавать "APPLE_PAY" - В
apple_pay
необходимо передавать данные, содержащиеся в поле token платежного объекта Apple Pay
- HTTP
- cURL
- Python
- PHP
POST /v2/orders/{order_id}/payments/tool HTTP/1.1
Host: stage-api.ioka.kz
Content-Type: application/json
Content-Length: 547
{
"tool_type": "APPLE_PAY",
"apple_pay": {
"paymentData": {
"data": "4ZlLT...",
"header": {
"ephemeralPublicKey": "MFkww...",
"publicKeyHash": "Dk6sv...",
"transactionId": "6e6c5..."
},
"signature": "MIAGC...",
"version": "EC_v1"
},
"paymentMethod": {
"displayName": "Visa 1111",
"network": "Visa",
"type": "debit"
},
"transactionIdentifier": "6E6C5..."
}
}
curl --location --request POST 'https://stage-api.ioka.kz/v2/orders/{order_id}/payments/tool' \
--header 'Content-Type: application/json' \
--data-raw '{
"tool_type": "APPLE_PAY",
"apple_pay": {
"paymentData": {
"data": "4ZlLT...",
"header": {
"ephemeralPublicKey": "MFkww...",
"publicKeyHash": "Dk6sv...",
"transactionId": "6e6c5..."
},
"signature": "MIAGC...",
"version": "EC_v1"
},
"paymentMethod": {
"displayName": "Visa 1111",
"network": "Visa",
"type": "debit"
},
"transactionIdentifier": "6E6C5..."
}
}
'
import requests
import json
url = "https://stage-api.ioka.kz/v2/orders/{order_id}/payments/tool"
payload = json.dumps({
"tool_type": "APPLE_PAY",
"apple_pay": {
"paymentData": {
"data": "4ZlLT...",
"header": {
"ephemeralPublicKey": "MFkww...",
"publicKeyHash": "Dk6sv...",
"transactionId": "6e6c5..."
},
"signature": "MIAGC...",
"version": "EC_v1"
},
"paymentMethod": {
"displayName": "Visa 1111",
"network": "Visa",
"type": "debit"
},
"transactionIdentifier": "6E6C5..."
}
})
headers = {
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
<?php
$client = new http\Client;
$request = new http\Client\Request;
$request->setRequestUrl('https://stage-api.ioka.kz/v2/orders/{order_id}/payments/tool');
$request->setRequestMethod('POST');
$body = new http\Message\Body;
$body->append('{
"tool_type": "APPLE_PAY",
"apple_pay": {
"paymentData": {
"data": "4ZlLT...",
"header": {
"ephemeralPublicKey": "MFkww...",
"publicKeyHash": "Dk6sv...",
"transactionId": "6e6c5..."
},
"signature": "MIAGC...",
"version": "EC_v1"
},
"paymentMethod": {
"displayName": "Visa 1111",
"network": "Visa",
"type": "debit"
},
"transactionIdentifier": "6E6C5..."
}
}
');
$request->setBody($body);
$request->setOptions(array());
$request->setHeaders(array(
'Content-Type' => 'application/json'
));
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody();
Примеры ответов:
- 200
- 400
- 400
- 404
- 409
{
"id": "pay_test",
"order_id": "ord_test",
"status": "CAPTURED",
"created_at": "2022-06-20T00:00:00.000000",
"approved_amount": 500,
"captured_amount": 500,
"refunded_amount": 0,
"processing_fee": 12.5,
"tds": false,
"payer": {
"pan_masked": "411111******1111",
"expiry_date": "12/24",
"holder": "holder",
"payment_system": null,
"emitter": null,
"email": null,
"phone": null,
"customer_id": null,
"card_id": null,
"iin": null
},
"acquirer": {
"name": "epay_v2",
"reference": "111111111111"
},
"error": null,
"action": null
}
{
"code": "InvalidTransactionAmount",
"message": "Сумма транзакции Apple Pay не совпадает с суммой заказа."
}
{
"code": "InvalidPaymentToken",
"message": "Неверный платежный токен."
}
{
"code": "ShopConfigNotFound",
"message": "Конфигурации магазина не найдены."
}
{
"code": "OrderExists",
"message": "Заказ с указанным external_id уже существует."
}
Условия использования Apple Pay
Вы не можете использовать технологию Apple Pay для оплаты если Ваш сайт занимается:
- Продажей табачной продукции, марихуаны и паровой продукции (вейпы, паровые электронные сигареты);
- Продажей огнестрельного или любого другого вида оружия и боеприпасов;
- Продажей наркотиков или запрещенных законом препаратов;
- Продажей предметов, создающих риск для безопасности потребителей;
- Продажей предметов, которые могут быть использованы или связанны с преступностью;
- Предоставлением доступа (оплата подписки или иные способы оплаты) порнографической продукции;
- Продажей контрафактных или украденных товаров;
- Сбором средств, пожертвований, если это не одобрено Apple;
- Предоставлением принадлежностей для наркотиков или товаров для взрослых или услуг сексуального характера;
- Продажей виртуальной валюты, в том числе и криптовалюты, если это не одобрено Apple;
- Предоставлением услуг по мульти транзакционному (несколько этапов проведения транзакции, сумма делиться на несколько транзакций) для пополнения кошельков или чего-то подобного;
- Мошенничеством;
- Нарушением прав на интеллектуальную собственность, публичность или неприкосновенность частной жизни другого;
Подробный список условий и рекомендаций при использовании технологии Apple Pay, указан по следующей ссылке: Acceptable Use Guidelines for Apple Pay on the Web
- Предоставляемая ioka интеграция с Apple Pay не заменяет In App Purchase (покупки внутри приложения, которые реализуются посредством нативной интеграции) в мобильных приложениях;
Важно
Для начала работы, пожалуйста убедитесь, что у вас есть актированный аккаунт разработчика Apple по программе Apple Developer для создания индивидуального Merchant ID.
При упрощенной интеграции Merchant ID можно уточнить у аккаунт-менеджера или через support@ioka.kz.
Если вы самостоятельно устанавливаете Apple Pay на своем сайте или в мобильном приложении Вам необходимо придерживаться гайдлайнов от Apple.