🔥 Інтеграція 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 4 months ago