Portmone eCommerce Android SDK
Терміни та визначення
| Термін | Визначення |
|---|---|
| Мерчант, Інтернет-магазин або Партнер | Організація, що уклала договір з Portmone.com про надання послуг з приймання платежів |
| Покупець, Клієнт | Відвідувач Інтернет-магазину Мерчанта з метою ознайомлення з асортиментом товарів (послуг) та здійснення покупки |
| Картка, Платіжна картка | Платіжні картки міжнародних платіжних систем Visa, Mastercard та Національної платіжної системи ПРОСТІР |
| Токен | Цифровий ідентифікатор картки, що генерується при першій операції і далі використовується для швидкої оплати |
| CVV2/CVC2 | CVV2 (Card Verification Value 2) – тризначний код перевірки дійсності картки платіжної системи Visa. Платіжна система MasterCard має аналогічний код перевірки дійсності – CVC2 (Card Validation Code 2) |
| Авторизація | Процедура отримання підтвердження від банка-емітента на проведення операції оплати карткою |
| Біометрична авторизація | Процес підтвердження платежу за допомогою технології ідентифікації біометричних даних (відбитків пальців) |
| Банк-емітент банківських карток | Банк, що є учасником платіжної системи та здійснює випуск (емісію) та обслуговування банківських карток |
| 3-D Secure | 3-D Secure – це протокол, який використовувався для забезпечення додаткового рівня безпеки онлайн-платежів з використанням банківських карток |
Загальний опис
Portmone SDK підтримує версію Android 5.0, API level 21 та пізніші версії.
Інтеграція
settings.gradle (project level)
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
jcenter()
maven {
url "https://github.com/Portmone/Android-e-Commerce-SDK/raw/master/"
}
}
}
rootProject.name = "TestSDK_v3" include ':app'
build.gradle (project level)
allprojects {
repositories {
google()
jcenter()
mavenCentral()
maven {
url "https://github.com/Portmone/Android-e-Commerce-SDK/raw/master/"
}
}
}
build.gradle (app level)
dependencies {
implementation 'com.portmone.ecomsdk:ecomsdk:1.3.4'
}
Ініціалізація SDK через PortmoneSDK.init(this) у Application.onCreate().
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
PortmoneSDK.init(this);
}
}
У версіях SDK до 3.0.11 сканування картки реалізовувалося через бібліотеку card.io і могло бути виключене із залежностей додатку. Починаючи з версії SDK 3.0.11 механізм сканування картки замінено на Google Payment Card Recognition API. Використання або виключення бібліотеки card.io у поточних версіях SDK не застосовується.
Сканування картки (Google Payment Card Recognition API)
Починаючи з версії SDK 3.0.11 у UI SDK доступне сканування картки на основі Google Payment Card Recognition API. Функціонал є опційним: якщо необхідні налаштування не виконані, кнопка/іконка «Сканувати картку» в інтерфейсі SDK не відображатиметься або не працюватиме.
Налаштування Google Payment Card Recognition (для користувачів SDK)
-
Google Cloud Console
Створіть або оберіть існуючий Google Cloud Project.
Переконайтесь, що у верхній панелі вибрано правильний проєкт. -
Увімкніть Google Wallet API
Перейдіть у APIs & Services → Library.
Знайдіть Google Wallet API та натисніть Enable. -
Створіть OAuth 2.0 Client ID для Android
Перейдіть у APIs & Services → Credentials.
Оберіть Create Credentials → OAuth client ID.
Тип застосунку: Android.Вкажіть:
- Package name вашого застосунку
- SHA-1 сертифіката підпису
Примітка:
У поточній реалізації SDK сканування може відображатися або пра цювати лише для release-збірки (потрібен SHA-1 релізного підпису).
Функціонал доступний на пристроях із Google Play Services.
Якщо використовуєте proguard потрібно дадати наступний рядок: keep class com.portmone.ecomsdk.** { *; }
Сценарії використання
- Оплата карткою.
- Збереження картки.
- Оплата за токеном (токен картки може бути отриманий за сценарієм 1 або 2).
- Переказ коштів з картки на картку за токеном картки відправника.
- Оплата з підтвердженням відбитком пальця.
- Оплата з використанням Google Pay.
- Масова оплата комунальних рахунків.
Опис програмного інтерфейсу
1. Встановлення мови
SDK надає можливість локалізації системного тексту та відповідей з сервера за допомогою методу:
PortmoneSDK.setLanguage(languageСode);
Метод приймає в папарметрах константу з класу Constant$Language.* і може встановлювати українську, англійську або російську мови. У випадку, якщо ця функція не була викликана, буде використовуватись мова, що встановлена на рівні системи. У випадку не знаходження перекладів відповідно до мови системи, буде використовуватись українська мова.
2. Стилізація екранів
Для екранів, які використовуються в SDK, передбачена можливість брендування: зміна кольорів елементів та шрифту, а також кольору текстів. Для цього використовується клас AppStyle. Клас містить набір параметрів, що відповідають за певні елементи на екранах. Можуть бути заповнені тільки потрібні параметри. Всі кольори задаються у форматі hex.
Для задання стилів використовується функція:
PortmoneSDK.setAppStyle(...);
Починаючи з версії 3.0.15 метод викликається з додатковим параметром:
PortmoneSDK.setAppStyle(appStyle, true);
Значення параметра: true — стилі зберігаються між перезапусками застосунку. false — стилі застосовуються лише під час поточної роботи застосунку.
App style
| Поле | Тип | Опис |
|---|---|---|
| background | int | Колір заднього фону екранів |
| toolbar | int | Колір панелі інструментів на всіх екранах |
| iconSuccess | int | Дозволяє змінити іконку успішної оплати (доступна з версії 1.2.1 SDK) |
| iconError | int | Дозволяє змінити іконку неуспішної оплати (доступна з версії 1.2.1 SDK) |
| type | Constant$Type.* | Цей параметр встановлюється за допомогою значень, які знаходяться у файлі Constant$Type. Можливі три варіанти: 1. Default – стандартний варіант; 2. Phone – відбувається заміна текста заголовка опису “Опис замовлення” на “Номер телефону”, а також до самого значення опису додається “+380” (доступна з версії 1.2.1 SDK) 3. Account – відбувається заміна текста заголовка опису “Опис замовлення” на “Номер особового рахунку” (доступна з версії 1.3.3 SDK) |
| buttonStyle | ButtonStyle | Містить колір тексту кнопки та заднього фону в звичайному та натиснутому станах, шрифт для тексту кнопки, а також величину заокруглення кнопок |
| editTextStyle | EditTextStyle | Використовується для полей вводу тексту. Дозволяє змінювати колір основного тексту, тексту підказки та помилки, а також відповідні шрифти |
| blockTitleTextStyle | BlockTitleTextStyle | Використовується для заголовків блоків на екранах. Дозволяє вказувати колір фону, тексту та шрифт |
| titleTextStyle | TitleTextStyle | Дозволяє вказувати колір та шрифт заголовків на екранах |
| descriptionTextStyle | TextStyle | Дозволяє вказувати колір та шрифт основних текстів на екранах |
| additionalInfoTextStyle | TextStyle | Дозволяє вказувати колір та шрифт додаткових текстів на екранах |
| fingerprintButton | TextStyle | Дозволяє вказувати колір та шрифт тексту кнопки оплати за допомогою відбитку пальця (доступна з версії 1.1.4 SDK) |
| paymentSuccessDownload | TextStyle | Дозволяє вказувати колір та шрифт тексту кнопки збереження квитанції на екрані успішної оплати (доступна з версії 1.2.1 SDK) |
| dialogInfoStyle | DialogInfoStyle | Дозволяє вказувати колір та шрифт заголовку, тексту та тексту кнопки у діалогових вікнах |
| paymentDivider | TextStyle | Колір текстового розділювача поміж видами оплат (Google Pay та картка) |
| googlePayButtonTheme | Auto / Light / Dark | Налаштування кольору кнопки Google Pay, за замовчуванням Auto. (доступна з версії 3.0.15 SDK) |
З версії 2.2.5 SDK доступні такі властивост і стилів та невелика зміна логіки екранів:
PortmoneSDK.setStandartResultFlow(false); - дозволяє відключити екрани про результат операції з боку SDK. Тоді результат можна обробити - дивись пункт 11.2
PortmoneSDK.setAdditionalCustomize(true); - додаткова кастомізація екранів для зберігання картки та оплати карткою.
Додаткова кастомізація екранів для зберігання картки та оплати карткою.
Збереження картки метод PreAuthCardPreActivity
Стандартний текст
PortmoneSDK.setDescriptionSaveCard("");
PortmoneSDK.setTitleSaveCard("");
Без тексту
PortmoneSDK.setDescriptionSaveCard(" ");
PortmoneSDK.setTitleSaveCard(" ");
Кастомний текст
PortmoneSDK.setDescriptionSaveCard("Збережи картку");
PortmoneSDK.setTitleSaveCard("Хочешь 100 млн грн?");
Збереження картки метод PreAuthCardPreActivity та оплату карткою метод CardActivity
PortmoneSDK.setNameCompany("PORTMONE"); - вcтановлення назви компанії. PortmoneSDK.setUAHSymbol(true); - встановлення знаку грн, заміст грн після сумми.
appStyle.setIconPayment(R.drawable.ic_portmone);- можна встановити іконку компанії.
Нова стилизація полів вводу:
| Поле | Опис |
|---|---|
| EditTextStyleAdditional editTextStyleAdditional = new EditTextStyleAdditional(); | створюємо новий стиль |
| editTextStyleAdditional.setTextColor(Color.parseColor("#6A5ACD")); | колір тексту |
| editTextStyleAdditional.setErrorTextColor(Color.parseColor("#90EE90")); | колір помилки |
| editTextStyleAdditional.setHintTextColor(Color.parseColor("#C0C0C0")); | колір підказки |
| editTextStyleAdditional.setFocusedBorderColor(Color.parseColor("#7FFFD4")); | рамка в фокусі, тобто коли користувач щось вводить |
| editTextStyleAdditional.setUnfocusedBorderColor(Color.parseColor("#4682B4")); | рамка не фокусі, тобто коли користувач на іншому елементі |
| editTextStyleAdditional.setSizeFocusedBorderThickness(4); | товщина рамки поля вводу, якщо в фокусі поле вводу |
| editTextStyleAdditional.setSizeUnfocusedBorderThickness(2); | товщина рамки поля вводу, якщо в не фокусі поле вводу |
| editTextStyleAdditional.setSizeRoundedCornerShape(16); | закруглення рамки поля вводу |
| appStyle.setEditTextStyleAdditional(editTextStyleAdditional); | додаємо стиль до appStyle |
3. Встановлення кастомного UID
(* функція доступна з версії 1.3.0 SDK)
SDK надає можливість встановити власний UID (ідентифікато р каналу продажів для спецналаштувань, встановлюється за погодженням з менеджером Portmone.com). Для цього слід використати статичний метод із SDK:
PortmoneSDK.setUid("customUID");
UID (shop_site_ID). У разі відсутності UID не передавати значення.
4. Підтвердження оплати відбитком пальця
(* функція доступна з версії 1.1.4 SDK)
SDK надає можливість здійснювати оплату за токеном з використанням сканування відбитку пальця для підтвердження оплати. Для увімкнення цієї можливості потрібно використати:
PortmoneSDK.setFingerprintPaymentEnable(true);
Однак ця можливість недоступна для переказу з токена на картку.
SDK перевіряє наявність фізичного сканера біометрії та збереженого відбитку, у разі їх відсутності ця функція працювати не буде.
Зверніть увагу - для того, щоб увімкнути можливість біометричної авторизації, необхідно надіслати відповідн ого листа з зареєстрованої адреси електронної пошти менеджерам Portmone.com по співпраці на адресу [email protected].
5. Оплата карткою
5.1. Ініціалізація оплати карткою
Відкрити екран оплати, створений на рівні SDK (CardPaymentActivity), можна двома способами:
- за допомогою статичного методу performTransaction;
- за допомогою Activity Result APIs.
5.1.1. Метод performTransaction
Цей метод є перевантаженим і дозволяє приймати Activity або Fragment.
Для отримання Bill про оплату необхідно реалізувати callback onActivityResult, в якому ідентифікувати потрібний результат за допомогою переданого requestCode.
Параметри методу performTransaction
| Параметр | Тип | Опис |
|---|---|---|
| activity/fragment | Activity/Fragment | Об’єкт Activity/Fragment, необхідний для запуску екрану оплати, а також для отримання результату оплати |
| requestCode | int | Унікальний код для ідентифікації результату проведеної оплати, необхідний для callback onActivityResult |
| CardPaymentParams | CardPaymentParams | Набір параметрів, необхідних для проведення оплати |
| showReceiptScreen | boolean | Параметр, за допомогою якого можна вимкнути відображення екрану із збереженням квитанції після успішної оплати (default true) (* параметр доступний з версії 1.3.2 SDK) |
| returnToDetailsAfterErrorEnabled | boolean | Параметр, за допомогою якого можна заборонити повернення до в ведення реквізитів після виникнення помилки (default false) (* параметр доступний з версії 1.3.4 SDK) |
Об’єкт CardPaymentParams
| Поле | Тип | Опис | Nullability |
|---|---|---|---|
| payeeId | String | Унікальний ідентифікатор компанії-отримувача в системі Portmone | Nonnull |
| billNumber | String | Унікальний номер платежу | Nullable |
| shopBillId | String | Ідентифікатор рахунку, що використовується для здійснення оплати за вже створеним рахунком. Якщо передається shopBillId, значення параметра preauthFlag, вказаного при створенні рахунку, має збігатися зі значенням у запиті на оплату. Параметр shopBillId необхідно розміщувати після billNumber (або після payeeId, якщо billNumber відсутній). Якщо shopBillId не використовується, залиште це поле порожнім ("") — у цьому випадку система працюватиме за стандартними налаштуваннями. Щоб коректно відображати користувачу номер замовлення, опис платежу та комісію, ці дані зі створеного shopBillId мають дублюватися і в параметрах запиту на оплату. Використання цього параметра є необов’язковим і потрібне лише тоді, коли оплата має виконуватися за попередньо створеним рахунком | Nullable |
| preAuth | boolean | Оплата з преавторизацією. Якщо не встановлено значення – false | Nullable |
| billCurrency | String | Валюта, в якій здійснюватиметься платіж. Приймаються значення тільки з набору констант: Constant$BillCurrency. Можливі значення: UAH (стандартна), USD, EUR, GBP, KZT | Nullable |
| attribute1 | String | Атрибут оплати 1 | Nullable |
| attribute2 | String | Атрибут оплати 2 | Nullable |
| attribute3 | String | Атрибут оплати 3 | Nullable |
| attribute4 | String | Атрибут оплати 4 | Nullable |
| attribute5 | String | Атрибут оплати 5. Використовується для передачі параметрів розщеплення платежу (детальний опис процедури наведений у розділі «Розщеплення платежу») | Nullable |
| billAmount | double | Сума платежу | Nonnull |
| description | String | Опис платежу | Nullable |
| onlyGooglePay | boolean | Для оплат виключно через Google Pay | Nullable |
| testEnvironment | boolean | Використання тестового середовища для Google Pay | Nullable |
| emailAddress | String | Електронна пошта | Nullable |
| privatPayEnabled | boolean | Оплата через систему LiqPay, з вибором картки з Інтернет-банкінгу Приват24. Параметр можна використовувати лише при виклику конструктора з Google Pay. Якщо оплата через через систему LiqPay не потрібна, цей параметр можна встановити як false | Nonnull |
| subscriptionInitPayment | String | Ознака ініціюючої оплати підписки. Значення "Y" – оплата оформлює підписку: проводиться з проходженням 3D Secure, після успішної оплати повертається Токен для списань за підпискою; "N" або значення не передано – звичайна оплата. Використовується лише для оплати карткою. Обов’язковий для оформлення підписки. Умови списань за підпискою див. у розділі «Проведення оплати за токеном без CVV2 (рекурентний платіж)» документації Payment Gateway (* параметр доступний з версії 3.0.18 SDK) | Nullable |
Примітка: поля
attribute 1-5– необов’язкові поля для додаткових даних, необхідних при оплаті.
Приклад:
final CardPaymentParams testParamsWithoutGooglePay = new PaymentParams(
"1234", // payeeId
"BILL-2025-0001", // billNumber
"2102095545", // shopBillId
false, // preAuth
"UAH", // billCurrency
"A1", // attribute1
"A2", // attribute2
"A3", // attribute3
"A4", // attribute4
"A5", // attribute5
123.45, // billAmount
"Test order 001", // description
"[email protected]", // emailAddress
"N" // subscriptionInitPayment
);
final CardPaymentParams testParamsWithGooglePay = new PaymentParams(
"1234", // payeeId
"BILL-2025-0001", // billNumber
"2102095545", // shopBillId
false, // preAuth
"UAH", // billCurrency
"A1", // attribute1
"A2", // attribute2
"A3", // attribute3
"A4", // attribute4
"A5", // attribute5
123.45, // billAmount
"Test order 001", // description
true, // onlyGooglePay
false, // testEnvironment
"[email protected]", // emailAddress
false // privatPayEnabled
);
CardPaymentActivity.performTransaction(
this,
111,
testParamsWithGooglePay,
false
);

Мал. 1a. Приклад відображення екрану оплати карткою (без стилізації)

Мал. 1б. Приклад відображення екрану оплати карткою (без стилізації)

Мал. 2a. Екран оплати карткою (приклад стилізації)