Інтеграція SDKЦей розділ містить опис методів для взаємодії додатку партнеру з SDK для реалізації flow приймання платежів. Перелік версій, та змін відокремлено у розділ Історія версій SDK
Залежності
Додайте наступні залежності до вашого build.gradle
файлу:
Copy implementation 'androidx.core:core-ktx:1.10.1'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.retrofit2:converter-scalars:2.9.0'
implementation 'com.squareup.okhttp3:okhttp:4.9.3'
implementation 'com.squareup.okhttp3:logging-interceptor:4.9.3'
implementation 'com.squareup.okhttp3:okhttp-urlconnection:4.9.3'
Ініціалізація
Ви можете ініціалізувати SDK наступним чином:
Copy suspend fun Defin.init(
merchantId: String,
terminalId: String,
cashierId: String,
deviceId: String
) : Defin
або:
Copy fun Defin.init(
merchantId: String,
terminalId: String,
cashierId: String,
deviceId: String,
listener: DefinInitListener
)
Слухач має наступний формат:
Copy object : DefinInitListener {
override fun onSuccess(defin: Defin) {
this@MainActivity.defin = defin
}
override fun onFailure(error: DefinException) {
Toast.makeText(this@MainActivity, error.getFullMessage(), Toast.LENGTH_SHORT).show()
}
}
Оплата
Посилання на оплату буде лише у випадку оплати картою
Метод checkout
використовується для створення замовлення.
Copy suspend fun defin.checkout(
paymentType: String,
purpose: String,
ttn: String,
customer: DefinCustomer, // Опціонально
goods: List<DefinGood>
) : Defin.Order
або:
Copy fun defin.checkout(
paymentType: String,
purpose: String,
ttn: String,
goods: List<DefinGood>,
customer: DefinCustomer, // Опціонально
listener: DefinCheckoutListener
)
де:
paymentType
// ідентифікатор виду оплати
purpose
// Призначення платежу (ТТН)
Методи оплати
Перелік доступних методів для оплати можна отримати у відповідь на ініціалізацію, а також окремим методом, якщо потрібно
Copy defin?.availablePaymentTypes()
Існує метод отримання статусу методу оплати. Повертає true
якщо переданий paymentType
доступний цьому мерчанту
Copy defin?.isAvailablePaymentType(
paymentType: DefinPaymentType
)
Існуючі методи в системі:
DefinPaymentType
— enum що містить всі можливі варианти оплати, серед них:
DefinPaymentType.CASH
— Готівка
DefinPaymentType.QR
— Інтернет-еквайринг (QR). Отримуємо лінку на динамічну сторінку оплати банка чи фінансової компанії
DefinPaymentType.PBT2PH
— tap2phone від Приватбанку
Перелік продуктів
Перелік продуктів формується з класів DefinGood
Copy DefinGood(
name: String,
amount: Double,
quantity: Float
)
Для відправки чеку клієнту є класс DefinCustomer?
Copy DefinCustomer(
email: String,
phone: String, // у форматі 380991234567
)
Інтерфейс слухача оплати
Copy DefinCheckoutListener {
fun onSuccess(order: Defin.Order)
fun onFailure(error: DefinException)
}
Приклад використання
Copy
launch{
try{
// Ініциалізаця
val defin = Defin.init(merchantId, terminalId, cashierId, deviceId)
// створення ордеру
val goods = listOf(
DefinGood(name = "Кава з молоком", amount = 2.34, quantity = 1f)
)
val order = defin.checkout(paymentType, purpose, ttn, goods)
}catch(e: DefinException){
Log.e("Defin", e.getFullMessage())
}
}
// Або
private lateinit var defin: Defin
// Ініциалізаця
Defin.init(merchantId, terminalId, cashierId, deviceId, object : DefinInitListener{
override fun onSuccess(defin: Defin) {
this@MainActivity.defin = defin
}
override fun onFailure(error: DefinException) {
Toast.makeText(this@MainActivity, error.getFullMessage(), Toast.LENGTH_SHORT).show()
}
})
// створення ордеру
val goods = listOf(
DefinGood(name = "Кава з молоком", amount = 2.34, quantity = 1f)
)
fun defin.checkout(paymentType, purpose, ttn, goods, object : DefinCheckoutListener {
override fun onSuccess(order: Defin.Order) {
// Ваш код
}
override fun onFailure(error: DefinException) {
// Обробка помилки
}
})
Варіанти оплати
На поточний момент реалізовано три методи оплати (готівка, інвойсинг та tap2phone)
У випадку оплати готівкою, зарахування виконується одразу;
Для сплати через банківську форму, слід використати order.paymentUrl;
Для можливості сплати через tap2phone, використовуйте наступну реалізацію:
tap2phone
Для того щоб мати можливість виклику зовнішнього додатку програмного терміналу, ініціалізуйте клас на рівні активності:
Copy private val tapToPhone = TapToPhone(this)
Реалізуйте виклик терміналу в методі onSuccess(order: Defin.Order)
:
Copy tapToPhone.pay(order, object : TapToPhone.Callback{
override fun onSuccess() {
PaymentDialog(this@MainActivity,
order).show()
}
override fun onFailure(error: DefinException) {
Toast.makeText(this@MainActivity,
error.message,
Toast.LENGTH_SHORT).show()
}
})
Перевірка статусу оплати
Для отримання інформації про плату, використовуйте метод order.check
з інтерфейсом DefinCheckListener
.
Інтерфейс DefinCheckListener
Copy DefinCheckListener{
fun onSuccess(status: GoodsStatus)
fun onFailure(error: DefinException)
}
Приклад використання
Copy suspend fun order.check() : GoodsStatus
// або
fun order.check(object : DefinCheckListener{
override fun onSuccess(status: GoodsStatus) {
// Ваш код
}
override fun onFailure(error: DefinException) {
// Обробка помилки
}
})
Варіанти status:GoodsStatus
DRAFT
// Драфтове замовлення
CREATED
// Замовлення очікує оплати
COMPLETED
// Замовлення завершено
Отримання чеку
В order: Defin.Order
присутній метод receipt
, який приймає обʼєкт, реалізуючий інтерфейс DefinReceiptListener
.
Інтерфейс DefinReceiptListener
Copy suspend fun receipt(): DefinReceipt
// або
fun order.receipt(object : DefinReceiptListener{
override fun onSuccess(receipt: DefinReceipt) {
// Ваш код
}
override fun onFailure(error: DefinException) {
// Обробка помилки
}
})
Last updated 7 months ago