LiqPay Android SDK
Будь ласка, ознайомтесь з нашою документацією Liqpay — там ви знайдете інформацію про те, як використовувати методи Gpay та Privatpay.
Будь ласка, прочитайте https://www.liqpay.ua/en/information/handbook перед тим, як почати використовувати Liqpay як еквайєра.
Також, якщо вам потрібен метод оплати карткою або інший — ви можете використовувати веб-сторінку оформлення платежу (checkout) у вашому застосунку.
Також ми маємо SDK для Android із підтримкою Masterpass. Якщо ви зацікавлені — зверніться, будь ласка, за адресою liqpay.support@privatbank.ua.
- Викачати проект як .zip файл, він містить папку
repoз бібліотекою та її транзитивними залежностями. - Додати папку
repoу кореневу директорію проекту. - У файлі проекту
settings.gradleу блоціdependencyResolutionManagementдодати папкуrepoяк maven репозиторій
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
//Додання папки `repo` у якості репозиторія
maven { url = uri("repo") }
}
}
- У
build.gradleна рівні модуля (:app) додатиimplementation("ua.privatbank:liqpay_x:1.0")
Перед викликом методів оплати потрібно викликати ініціалізацію у Application класі застосунку - LiqPay.init(this)
class SampleApp : Application() {
override fun onCreate() {
super.onCreate()
LiqPay.init(this)
}
}
Для виконання операції оплати потрібно сформувати data та signature, можна зробити за посиланням https://www.liqpay.ua/doc/forming_test_data
1. P24Pay
Для оплати використовується застосунок Privat24 (ua.privatbank.ap24).
Ініціалізувати обʼєкт LiqPay.p24Pay(this) (приймає Activity або Fragment) та викликати метод
confirmPay(data, signature)
Колбеки:
onSuccess()- викликається при успішній оплатіonError(LiqpayException)- у разі помилок. Можливі помилки:AppNotExistException– застосунок Privat24 не встановленийNoInternetConnectionException- відсутнє підключення до ІнтернетуIncorrectDataException- проблема із вхідними даними
Приклад використання:
import ua.privatbank.liqpay.LiqPay
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
button.setOnClickListener {
LiqPay.p24Pay(this)
.confirmPay(
PaymentData.p24PayDataAndSignature.first,
PaymentData.p24PayDataAndSignature.second
)
.onSuccess {
Handler(Looper.getMainLooper()).post {
tvResult.text = "onSuccess p24 pay"
}
}
.onError {
Handler(Looper.getMainLooper()).post {
tvResult.text = "onError p24 pay; {$it}";
}
}
}
}
}
Використовують механізм androidx.activity.result.contract.ActivityResultContract
Викликати LiqPay.cardPay().createActivityResultContract() або LiqPay.tokenPay().createActivityResultContract() та зарєєструвати за допомогою registerForActivityResult()
private val cardPayActivityResultLauncher =
registerForActivityResult(LiqPay.cardPay().createActivityResultContract()) {
handleActivityResult(it)
}
Отриманний ActivityResultLauncher готовий для використання, на вхід приймає обʼєкт InputData(data, signature).
Повертає ActivityResult. Якщо операція пройшла успішно та отримано resultCode: RESULT_OK, то по константі EXTRA_LIQPAY_RESULT можно отримати LiqpayActivityResult
private fun handleActivityResult(it: ActivityResult) {
if (it.resultCode == RESULT_OK) {
val intent = it.data ?: return
val result =
intent.getSerializableExtra(EXTRA_LIQPAY_RESULT) as LiqpayActivityResult
val text = "Got result OK with data: $result"
Toast.makeText(this, text, Toast.LENGTH_SHORT).show()
tvResult.text = text
} else if (it.resultCode == RESULT_CANCELED) {
val text = "Got RESULT_CANCELED"
Toast.makeText(this, text, Toast.LENGTH_SHORT).show()
tvResult.text = text
}
}
LiqpayActivityResult
LiqpayActivityResult містить наступні поля
val payment: PaymentResponse.Payment? = null- наявне в результаті успіхуval exception: java.lang.Exception? = null- навяне в резульаті помилки
В свою чергу PaymentResponse.Payment має:
- confirmToken
- paymentId
- status
- errCode
- errDescription
2. Приклад оплати картою
class MainActivity : AppCompatActivity() {
private val cardPayActivityResultLauncher =
registerForActivityResult(LiqPay.cardPay().createActivityResultContract()) {
handleActivityResult(it)
}
override fun onCreate(savedInstanceState: Bundle?) {
btnLiqpayCard.setOnClickListener {
cardPayActivityResultLauncher.launch(
InputData(
PaymentData.dataCardPay.first,
PaymentData.dataCardPay.second
)
)
}
}
private fun handleActivityResult(it: ActivityResult) {
if (it.resultCode == RESULT_OK) {
val intent = it.data ?: return
val payment =
intent.getSerializableExtra(EXTRA_LIQPAY_RESULT) as LiqpayActivityResult
val text = "Got result OK with data: $payment"
Toast.makeText(this, text, Toast.LENGTH_SHORT).show()
tvResult.text = text
} else if (it.resultCode == RESULT_CANCELED) {
val text = "Got RESULT_CANCELED"
Toast.makeText(this, text, Toast.LENGTH_SHORT).show()
tvResult.text = text
}
}
3. Приклад оплати токеном
class MainActivity : AppCompatActivity() {
private val tokenPayActivityResultLauncher =
registerForActivityResult(LiqPay.tokenPay().createActivityResultContract()) {
handleActivityResult(it)
}
override fun onCreate(savedInstanceState: Bundle?) {
btnLiqpayToken.setOnClickListener {
tokenPayActivityResultLauncher.launch(
InputData(
PaymentData.dataLiqpayToken.first,
PaymentData.dataLiqpayToken.second
)
)
}
}
private fun handleActivityResult(it: ActivityResult) {
if (it.resultCode == RESULT_OK) {
val intent = it.data ?: return
val payment =
intent.getSerializableExtra(EXTRA_LIQPAY_RESULT) as LiqpayActivityResult
val text = "Got result OK with data: $payment"
Toast.makeText(this, text, Toast.LENGTH_SHORT).show()
tvResult.text = text
} else if (it.resultCode == RESULT_CANCELED) {
val text = "Got RESULT_CANCELED"
Toast.makeText(this, text, Toast.LENGTH_SHORT).show()
tvResult.text = text
}
}
4. Оплата за допомогою GooglePay
- Ініціалізувати обʼєкт
googlePayProvider: GooglePayProvider.
ВикликатиgooglePayProvider.init()із відповіднимиdataтаsignatureКолбеки:
onSuccess(GooglePayInitResponse)- викликається при успішній ініціалізації, потрібен для подальшого запуску механізму оплатиonError(LiqpayException)- у разі помилок.onTerminate()- для зручності, викликається післаonSuccess()таonError()
-
Далі необхідно самостійно отримати
payment tokenза допомогою Google Pay API - https://developers.google.com/pay/api/android/overview -
Отримати відповідний
ActivityResultLauncherза допомогоюgooglePayProvider.createActivityResultContract()та обробити результат. Див розділ Інші методи оплати
private val googleTokenPayActivityResultLauncher =
registerForActivityResult(googlePayProvider.createActivityResultContract()) {
handleActivityResult(it)
}
private fun handleActivityResult(it: ActivityResult) {
if (it.resultCode == RESULT_OK) {
val intent = it.data ?: return
val result =
intent.getSerializableExtra(EXTRA_LIQPAY_RESULT) as LiqpayActivityResult
val text = "Got result OK with data: $result"
Toast.makeText(this, text, Toast.LENGTH_SHORT).show()
} else if (it.resultCode == RESULT_CANCELED) {
val text = "Got RESULT_CANCELED"
Toast.makeText(this, text, Toast.LENGTH_SHORT).show()
}
}