Платіжний шлюз Portmone.com. API для партнерів з сер тифікатом PCI DSS
Терміни та визначення
| Термін | Визначення |
|---|---|
| Мерчант, Партнер | Організація, що уклала договір з Portmone.com про надання послуг з приймання платежів |
| Клієнт | Відвідувач Інтернет-сайту Мерчанта з метою ознайомлення з асортиментом товарів (послуг) та здійснення покупки |
| Картка, Платіжна картка | Платіжні картки міжнародних платіжних систем Visa, Mastercard та Національної платіжної системи ПРОСТІР |
| Авторизація | Процес надання прав доступу або інших повноважень Покупцеві, програмі або процесу |
| Рекурентні платежі | Автоматичні платежі (не потребують участі клієнта та повторного введення реквізитів картки), що здійснюються за згодою клієнта |
| Токен | Цифровий ідентифікатор картки, що генерується при першій операції і далі використовується для швидкої оплати. Ток ен може використовуватись виключно для повторення аналогічної транзакції, що й при першій оплаті |
| SHOPBILLID | Ідентифікатор транзакції (платіжного документу) у системі Portmone.com |
| CVV2/CVC2 | CVV2 (Card Verification Value 2) – тризначний код перевірки дійсності картки платіжної системи Visa. Платіжна система Mastercard має аналогічний код перевірки дійсності – CVC2 (Card Validation Code 2) |
| Банк-еквайр | Банк, що організовує точки приймання банківських карток (термінали, банкомати) та здійснює весь комплекс фінансових операцій, пов'язаних з виконанням розрахунків і платежів за банківськими картками в цих точках |
| Банк-емітент банківських карток | Банк, що є учасником платіжної системи та здійснює випуск (емісію) та обслуговування банківських карток |
| 3-D Secure | 3-D Secure – це протокол, який використовувався для забезпечення додаткового рівня безпеки онлайн-платежів з використанням банківськимх карток |
| PSP | PSP (Payment Service Provider) – компанія, яка надає Мерчантам онлайн-послуги з прийому електронних платежів за допомогою різних способів оплати. У цьому документі цей термін відоноситься до копаніїї Portmone.com |
| ACS | Сервер управління доступом (Access Control Server, або ACS) являє собою інструмент, що використовується банками-емітентами для автентифікації власників карток (це дозволяє клієнтам підтвердити свою особистість та пропонує більшу безпеку транзакцій для онлайн-продавців) |
| CSE | Шифрування на боці клієнта (Client-Side Encryption, або CSE) – це спосіб захисту даних, при якому інформація, перш ніж передаватися на сервер Мерчанта, шифрується на боці клієнта за допомогою відкритого ключа (public key), що наданий PSP. Зашифровані дані не можуть бути розшифровані на стороні Мерчанта, оскільки він не має закритого ключа (private key), що їх розшифровує |
| МПС | Міжнародна платіжна система |
1. Вступ
API Платіжного шлюзу Portmone.com заснований на прозорому типі інтеграції з використанням "Client-Side Encryption" (CSE). Технологія CSE дозволяє зменшити навантаження PCI DSS для Мерчанта.
Дані власника картки шифруються на боці клієнта таким чином, щоб їх неможливо було прочитати, а потім передаються до хоста Portmone. Щоб розшифрувати повідомлення з боку Мерчанта, використовується унікальний клієнтський ключ.
Тип взаємодії: host-to-host.
Тип протоколу: HTTPS.
Тип повідомлень для обміну інформацією: XML-повідомлення або повідомлення у форматі JSON.
2. Попередні умови
Для початку роботи необхідно виконати наступні умови:
- мати сертифікат PCI DSS;
- подати заявку на реєстрацію у системі Portmone.com;
- забезпечити URL-адресу для сповіщень, на яку система Portmone.com надсилатиме XML-повідомлення методом POST через параметр
dataабо повідомлення у форматі JSON; - для використання технології CSE скрипт rsa-co.min.js має бути підключений до платіжної сторінки.
Після реєстрації у системі Portmone.com вам буде надано наступну інформацію:
- ідентифікатор вашої компанії у системі Portmone.com (
payee id); - логін для дос тупу до управління акаунтом (
login); - пароль для доступу до управління акаунтом (
password).
Необхідні URL для роботи
Для проведення оплати карткою або за токеном необхідно надсилати запит на URL: https://www.portmone.com.ua/r3/pm/.
URL для запитів після 3DS авторизації: https://www.portmone.com.ua/r3/pm-mpi/.
2.1. Шифрування даних платіжної картки
Для шифрування даних платіжної картки використовується скрипт rsa-co.min.js. Методи rsa-co.min.js викликаються з об'єкту PM.
Скрипт містить наступні методи:
PM.setPublicKey(publicKey) – встановлює значення відкритого ключа;
PM.encrypt(cardData) – повертає об'єкт із зашифрованими даними платіжної картки.
cardData – об'єкт з необхідними полями, які описують дані картки, наступного типу:
{
"cardNumber":"4444333322221111",
"mm":"03",
"yy":"20",
"cvv2":"111"
}
<script type="text/javascript"
src="https://www.portmone.com.ua/r3/resources/services/js/lib/rsa-co.min.js">
</script>
<script type="text/javascript">
(function() {
PM.setPublicKey('key_value');
function encryptMyData() {
var postData = {};
var cardData = {
cardNumber : cardNumber,
mm : mm,
yy : yy,
cvv2 : cvv2
};
postData['encrypted-data'] = PM.encrypt(cardData);
// AJAX call or different handling of the post data.
}
})();
</script>
2.2. Підпис запиту
Формування поля signature (приклад на PHP):
$login = 'WDISHOP';
$payeeId = '1185';
$shopOrderNumber = 'test123';
$billAmount='150';
$key = 'BDFC166F8AE2F5323A557DB6CA16758D';
$dt = date("YmdHis");
$strToSignature = $payeeId.$dt.bin2hex($shopOrderNumber).$billAmount;
$strToSignature = strtoupper($strToSignature).strtoupper(bin2hex($login));
$signature = strtoupper(hash_hmac('sha256', $strToSignature, $key));
Набір параметрів для формування підпису може відрізнятись для різних методів. У разі відмінностей від наведеного вище прикладу, набір параметрів, що беруть участь у генеруванні підпису, буде наведений безпосередньо в описі відповідного методу.
2.3. Асинхронний режим
Якщо у запиті оплати замовлення використовувався параметр mode зі значенням 1111, на вашу URL-адресу для сповіщень надійде повідомлення наступного вигляду:
Успішна відповідь:
{
"transactionId": "419344443",
"attemptId": "9m304ghzzl0k8c4cko08soww0sokcws",
"errorCode": "0",
"error": ""
}
Опис параметрів:
| Параметр | Опис |
|---|---|
| transactionId | Ідентифікатор транзакції у системі Portmone.com |
| attemptId | Ідентифікатор запиту, який ініціює оплату. Значення генерується випадковим чином, довжина – 31 символ (наприклад, 3wlk66m64q0wokcgkwog4040osw04ks) |
| errorCode | Код помилки (0 у разі успішного платежу) |
| error | Опис помилки |
Після успішної оплати на URL для сповіщень надійде повідомлення зі структурою, що описана в розділі 9.3 "Повідомлення у форматі JSON".