Платіжний шлюз 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';
$password = 'wdi451';
$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".
3. Платіжні методи
3.1. Оплата карткою
3.1.1. Створення нового платежу
Опис:
Для проведення оплати необхідно надіслати запит на URL: https://www.portmone.com.ua/r3/pm/.
Доступність і обмеження:
Portmone.com не підтримує запити типу CORS. Це означає, що запит слід надсилати лише з вашого сервера.
Структура запиту:
Будь ласка, зверніться до "3.1.1 Запит створення нового платежу для оплати карткою" для вивчення структури запиту.
Опис параметрів запиту:
Параметр | Опис | Обов’язковий |
---|---|---|
paymentType | Необхідно вказати значення "card" для цього параметру | Так |
payeeId | Ідентифікатор Партнера. Надається кожному Партнерові індивідуально при підключенні до системи Portmone.com | Так |
shopOrderNumber | Номер замовлення, що сплачується, у системі Партнера | Ні |
billAmount | Сума платежу | Так |
emailAddress | Адреса електронної пошти платника | Ні |
shopSiteId | Цифровий ідентифікатор каналу продажу | Ні |
billCurrency | Валюта проведення платежу. Значення без задання: UAH | Ні |
description | Опис платежу (коментар до замовлення/ призначення оплати) | Так |
token | Залишити порожнім | Ні |
cardData | Зашифроване значення даних платіжної картки (номер картки, термін дії (місяць та рік), CVV2) | Так |
preauthFlag | Ознака преавторизації платежу (значення "Y" вказує на те, що ця оплата здійснюється з використанням процедури преавторизації (див. розділ 5 "Підтвердження та скасування платежу з преавторизацією"), значення "N" – звичайна оплата без преавторизації). Значення без задання – "N") | Ні |
cvvVerifyFlag | Значення без задання – "Y", для платежів без CVV2 необхідно встановлювати значення "N" | Ні |
clientId | Залишити порожнім | Ні |
dt | Час створення запиту. Використовується для перевірки підпису. Передається у форматі: yyyymmddhhmmss (наприклад, 20181208130724) | Так |
signature | Підпис запиту. Формування підпису див. у розділі 2.2 "Підпис запиту" | Так |
mode | Для роботи в асинхронному режимі використовується значення "1111" | Ні |
attribute1 | Службове поле, заповнюється на розсуд компанії | Ні |
attribute2 | Службове поле, заповнюється на розсуд компанії | Ні |
attribute3 | Службове поле, заповнюється на розсуд компанії | Ні |
attribute4 | Службове поле, заповнюється на розсуд компанії | Ні |
lang | Мова інтерфейсу платіжної системи: uk – українська мова, en – англійська, az – азербайджанська, kz – казахська | Ні |
Структура відповіді:
Будь ласка, зверніться до "3.1.1 Відповідь на запит створення нового платежу для оплати карткою" для вивчення структури відповіді.
Опис параметрів відповіді:
Параметр | Опис |
---|---|
shopBillId | Ідентифікатор транзакції (платіжного документу) у системі Portmone.com |
shopOrderNumber | Номер замовлення (рахунку) у системі Партнера |
description | Коментар до замовлення/ опис призначення оплати |
cardMask | Маска Картки платника |
billAmount | Передана у запиті сума транзакції |
authCode | Код авторизації банку (проставляється якщо замовлення оплачене) |
status | Статус замовлення. Можливі значення: PAYED, PREAUTH, REJECTED, CREATED |
token | Значення Токену для подальших оплат |
MD | Параметр, який треба передати на acsUrl при проходженні 3D Secure перевірки |
PaReq | Параметр, який треба передати на acsUrl при проходженні 3D Secure перевірки |
is3DS | Ознака необхідності проходження перевірки 3D Secure ("Y" – необхідно пройти процедуру перевірки 3D Secure, "N" – 3D Secure перевірка не потрібна |
acsUrl | URL банку, на який треба перенаправити клієнта для проходження 3D Secure перевірки |
attribute1 | Службове поле, заповнюється на розсуд компанії |
attribute2 | Службове поле, заповнюється на розсуд компанії |
attribute3 | Службове поле, заповнюється на розсуд компанії |
attribute4 | Службове поле, заповнюється на розсуд компанії |
errorCode | Код помилки (0 у разі успішного платежу) |
error | Опис помилки |
3.1.2. Перенаправлення клієнта на ACS-сервер банку-емітента
Для проходження процедури перевірки 3D Secure необхідно перенаправити Клієнта на сторінку перевірки від банку-емітента (acsUrl
), передавши на неї POST-запитом параметри перевірки (PaReq, MD
) та URL для повернення після проходження 3D Secure (TermUrl
).
Приклад:
var f = document.createElement("form");
f.setAttribute('method',"POST");
f.setAttribute('action',response.acsUrl);
var i = document.createElement("input");
i.setAttribute('type',"hidden");
i.setAttribute('name',"MD");
i.setAttribute('value',response.MD);
var i1 = document.createElement("input");
i1.setAttribute('type',"hidden");
i1.setAttribute('name',"TermUrl");
i1.setAttribute('value',TermUrl);
var i2 = document.createElement("input");
i2.setAttribute('type',"hidden");
i2.setAttribute('name',"PaReq");
i2.setAttribute('value',response.PaReq);
f.appendChild(i);
f.appendChild(i1);
f.appendChild(i2);
document.body.appendChild(f);
f.submit();
де acsUrl
, MD
, PaReq
– параметри, отримані у відповіді від Portmone.com,
TermUrl
– URL партнера, на який мають повернутись параметри відповіді від банку після проходження перевірки 3D Secure.
Після вводу коду на сторінці банку Клієнт буде повернений назад на TermUrl, що вказаний у запиті, і на нього банком будуть передані параметри MD
та PaRes
, значення яких необхідно надіслати у Portmone.com для завершення оплати (див. розділ "3.1.3. Завершення оплати").
3.1.3. Завершення оплати
Опис:
Для завершення оплати необхідно надіслати запит на URL: https://www.portmone.com.ua/r3/pm-mpi/.
Доступність і обмеження:
Немає обмежень.
Структура запиту:
Будь ласка, зверніться до "3.1.3 Запит завершення оплати" для вивчення структури запиту.
Опис параметрів запиту:
Параметр | Опис | Обов’язковий |
---|---|---|
id | Ідентифікатор транзакції (платіжного документу) у системі Portmone.com | Так |
PaRes | Значення PaRes, отримане від банку на ваш URL | Так |
MD | Значення MD, отримане від банку на ваш URL | Так |
Структура відповіді:
Будь ласка, зверніться до "3.1.3 Успішна відповідь на запит завершення оплати" для вивчення структури відповіді. Опис параметрів відповіді:
Параметр | Опис |
---|---|
shopBillId | Ідентифікатор транзакції (платіжного документу) у системі Portmone.com |
shopOrderNumber | Номер замовлення ( рахунку) у системі Партнера |
description | Коментар до замовлення/ опис призначення оплати |
cardMask | Маска Картки платника |
billAmount | Передана у запиті сума транзакції |
authCode | Код авторизації банку (проставляється якщо замовлення оплачене) |
status | Статус замовлення |
receiptUrl | Посилання для отримання квитанції |
attribute1 | Службове поле, заповнюється на розсуд компанії |
attribute2 | Службове поле, заповнюється на розсуд компанії |
attribute3 | Службове поле, заповнюється на розсуд компанії |
attribute4 | Службове поле, заповнюється на розсуд компанії |
errorCode | Код помилки (0 у разі успішного платежу) |
error | Опис помилки |
is3DS | Ознака необхідності проходження перевірки 3D Secure ("Y" – необхідно пройти процедуру перевірки 3D Secure, "N" – 3D Secure перевірка не потрібна |
3.2. Отримання токену для оплати
Опис:
Цей метод дозволяє отримати значення Токену та маски картки Клієнта. Після проведення цього методу оплати ви отримаєте значення Токену та маску Платіжної картки Клієнта, яку можете пропонувати Клієнтові в якості способу оплати на своєму ресурсі. У процесі виконання операції зі створення Токена, Portmone.com проведе авторизацію на 1 грн за карткою Клієнта, з наступним поверненням цієї суми на картку Клієнта.
Запит необхідно виконати на адресу: https://www.portmone.com.ua/r3/pm/.
Доступність і обмеження:
Поле description
, що передається при виконанні цього методу, є ключовим для подальших оплат за Токеном. При зміні цього параметру у подальших оплатах за Токеном Клієнт буде отримувати повідомлення про помилку.
Структура запиту:
Будь ласка, зверніться до "3.2 Запит createToken" для вивчення структури запиту.
Опис параметрів запиту:
Параметр | Опис | Обов’язковий |
---|---|---|
paymentType | Для створення Токену необхідно вказати значення "createToken" для цього параметру | Так |
payeeId | Ідентифікатор Партнера. Надається кожному Партнерові індивідуально при підключенні до системи Portmone.com | Так |
shopOrderNumber | Номер замовлення, що сплачується, у системі Партнера | Ні |
billAmount | Сума платежу | Так |
emailAddress | Адреса електронної пошти платника | Ні |
shopSiteId | Цифровий ідентифікатор каналу продажу. Залишити порожнім | Ні |
billCurrency | Валюта проведення платежу. Значення без задання: UAH | Ні |
description | Опис платежу (коментар до замовлення/ призначення оплати) | Обов’язковий, ідентифікує Токен у подальших оплатах |
token | Залишити порожнім | Ні |
cardData | Зашифроване значення даних платіжної картки (номер картки, термін дії (місяць та рік), CVV2) | Так |
preauthFlag | Ознака преавторизації платежу.Залишити порожнім | Ні |
cvvVerifyFlag | Значення без задання – "Y", для платежів без CVV2 необхідно встановлювати значення "N" | Ні |
clientId | Залишити порожнім | Так |
dt | Час створення запиту. Використовується для перевірки підпису. Передається у форматі: yyyymmddhhmmss (наприклад, 20181208130724) | Так |
signature | Підпис запиту. Формування підпису див. у розділі 2.2 "Підпис запиту" | Так |
attribute1 | Службове поле, заповнюється на розсуд компанії | Ні |
attribute2 | Службове поле, заповнюється на розсуд компанії | Ні |
attribute3 | Службове поле, заповнюється на розсуд компанії | Ні |
attribute4 | Службове поле, заповнюється на розсуд компанії | Ні |
Структура відповіді:
Будь ласка, зверніться до "3.2 Відповідь на запит createToken" для вивчення структури відповіді.
Опис параметрів відповіді:
Параметр | Опис |
---|---|
notificationType | Результат запиту. У випадкузначення success - успішний, при іншому занченні - неуспішний |
shopBillId | Ідентифікатор транзакції (платіжного документу) у системі Portmone.com |
shopOrderNumber | Номер замовлення (рахунку) у системі Партнера |
description | Коментар до замовлення/ опис призначення оплати |
cardMask | Маска Картки платника |
billAmount | Передана у запиті сума транзакції |
status | Статус замовлення |
token | Значення Токену для подальших оплат |
authCode | Код авторизації банку (проставляється якщо замовлення оплачене) |
attribute1 | Службове поле, заповнюється на розсуд компанії |
attribute2 | Службове поле, заповнюється на розсуд компанії |
attribute3 | Службове поле, заповнюється на розсуд компанії |
attribute4 | Службове поле, заповнюється на розсуд компанії |
errorCode | Код помилки (0 у разі успішного платежу) |
error | Опис помилки |