diff --git a/gradle.properties b/gradle.properties
index 71d1fc98..ebee680e 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,5 +1,5 @@
-VERSION_NAME=2.10.1
-VERSION_CODE=17
+VERSION_NAME=2.12.0
+VERSION_CODE=18
GROUP=ru.tinkoff.acquiring
POM_DESCRIPTION=Library which allows you to use internet acquiring in your android app
diff --git a/gradle/versions.gradle b/gradle/versions.gradle
index 30fc6657..061aa7a1 100644
--- a/gradle/versions.gradle
+++ b/gradle/versions.gradle
@@ -3,8 +3,8 @@ ext {
versionName = isRelease ? VERSION_NAME : "$VERSION_NAME-SNAPSHOT"
compileSdk = 31
- minSdk = 21
- yandexPayMinSdk = 23
+ minSdk = 24
+ yandexPayMinSdk = 24
targetSdk = 31
buildTools = '30.0.3'
diff --git a/readme.md b/readme.md
index 2c9dbddf..ce2f9189 100644
--- a/readme.md
+++ b/readme.md
@@ -20,7 +20,7 @@ Acquiring SDK позволяет интегрировать [Интернет-Э
- Совершение оплаты из уведомления
### Требования
-Для работы Tinkoff Acquiring SDK необходим Android версии 5.0 и выше (API level 21).
+Для работы Tinkoff Acquiring SDK необходим Android версии 7.0 и выше (API level 24).
### Подключение
Для подключения SDK добавьте в [_build.gradle_][build-config] вашего проекта следующие зависимости:
@@ -34,6 +34,19 @@ implementation 'ru.tinkoff.acquiring:threeds-wrapper:$latestVersion'
implementation 'ru.tinkoff.acquiring:cardio:$latestVersion'
```
+Так же необходимо добавить в [_network-security-config_][network-security-config] содержащий
+сертификаты от минцифр и доп. сертификат от тинькофф. Пример можно посмотреть в `sample` выглядит он так:
+```xml
+
+
+
+
+
+
+
+
+```
+
### Подготовка к работе
Для начала работы с SDK вам понадобятся:
* Terminal key
@@ -382,3 +395,4 @@ implementation 'ru.tinkoff.acquiring:core:$latestVersion'
[init-documentation]: https://oplata.tinkoff.ru/develop/api/payments/init-request/
[google-pay-brand]: https://developers.google.com/pay/api/android/guides/brand-guidelines
[full-doc]: https://github.com/Tinkoff/AcquiringSdkAndroid/blob/master/Android%20SDK.pdf
+[network-security-config]:https://developer.android.com/training/articles/security-config
diff --git a/sample/src/main/res/xml/network_security_config.xml b/sample/src/main/res/xml/network_security_config.xml
index e1eb89e5..1a767bf5 100644
--- a/sample/src/main/res/xml/network_security_config.xml
+++ b/sample/src/main/res/xml/network_security_config.xml
@@ -1,9 +1,8 @@
-
-
-
-
-
-
+
+
+
+
+
\ No newline at end of file
diff --git a/ui/src/main/java/ru/tinkoff/acquiring/sdk/TinkoffAcquiring.kt b/ui/src/main/java/ru/tinkoff/acquiring/sdk/TinkoffAcquiring.kt
index 8e8452f4..ec30f37e 100644
--- a/ui/src/main/java/ru/tinkoff/acquiring/sdk/TinkoffAcquiring.kt
+++ b/ui/src/main/java/ru/tinkoff/acquiring/sdk/TinkoffAcquiring.kt
@@ -21,9 +21,7 @@ import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import androidx.fragment.app.Fragment
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.launch
+import kotlinx.coroutines.*
import ru.tinkoff.acquiring.sdk.localization.LocalizationSource
import ru.tinkoff.acquiring.sdk.models.*
import ru.tinkoff.acquiring.sdk.models.options.FeaturesOptions
@@ -33,6 +31,7 @@ import ru.tinkoff.acquiring.sdk.models.paysources.CardData
import ru.tinkoff.acquiring.sdk.models.paysources.GooglePay
import ru.tinkoff.acquiring.sdk.payment.PaymentProcess
import ru.tinkoff.acquiring.sdk.requests.performSuspendRequest
+import ru.tinkoff.acquiring.sdk.responses.GetTerminalPayMethodsResponse
import ru.tinkoff.acquiring.sdk.responses.TerminalInfo
import ru.tinkoff.acquiring.sdk.responses.TinkoffPayStatusResponse
import ru.tinkoff.acquiring.sdk.threeds.ThreeDsHelper
@@ -43,6 +42,7 @@ import ru.tinkoff.acquiring.sdk.ui.activities.NotificationPaymentActivity
import ru.tinkoff.acquiring.sdk.ui.activities.PaymentActivity
import ru.tinkoff.acquiring.sdk.ui.activities.QrCodeActivity
import ru.tinkoff.acquiring.sdk.ui.activities.SavedCardsActivity
+import kotlin.coroutines.suspendCoroutine
/**
* Точка входа для взаимодействия с Acquiring SDK
@@ -209,11 +209,12 @@ class TinkoffAcquiring(
onFailure: ((Throwable) -> Unit)? = null
) {
CoroutineScope(Dispatchers.IO).launch {
- sdk.tinkoffPayStatus().execute({
- launch(Dispatchers.Main) { onSuccess(it) }
- }, {
- launch(Dispatchers.Main) { onFailure?.invoke(it) }
- })
+ val mainScope = this
+ val result = sdk.tinkoffPayStatus().performSuspendRequest()
+ withContext(Dispatchers.Main) {
+ result.fold(onSuccess = onSuccess, onFailure = { onFailure?.invoke(it) })
+ mainScope.cancel()
+ }
}
}
@@ -221,18 +222,16 @@ class TinkoffAcquiring(
* Проверка доступных спосбов оплаты
*/
fun checkTerminalInfo(onSuccess: (TerminalInfo?) -> Unit,
- onFailure: ((Throwable) -> Unit)? = null) {
-
- val onFailureOrThrow = onFailure ?: { throw it }
-
+ onFailure: ((Throwable) -> Unit)? = null
+ ) {
CoroutineScope(Dispatchers.IO).launch {
-
+ val mainScope = this
val result = sdk.getTerminalPayMethods()
.performSuspendRequest()
.map { it.terminalInfo }
-
- launch(Dispatchers.Main) {
- result.fold(onSuccess, onFailureOrThrow)
+ withContext(Dispatchers.Main) {
+ result.fold(onSuccess = onSuccess, onFailure = { onFailure?.invoke(it) })
+ mainScope.cancel()
}
}
}
diff --git a/ui/src/main/res/raw/acq_ministry_of_digital_development_root_cert.cer b/ui/src/main/res/raw/acq_ministry_of_digital_development_root_cert.cer
new file mode 100644
index 00000000..253d971e
--- /dev/null
+++ b/ui/src/main/res/raw/acq_ministry_of_digital_development_root_cert.cer
@@ -0,0 +1,33 @@
+-----BEGIN CERTIFICATE-----
+MIIFwjCCA6qgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwcDELMAkGA1UEBhMCUlUx
+PzA9BgNVBAoMNlRoZSBNaW5pc3RyeSBvZiBEaWdpdGFsIERldmVsb3BtZW50IGFu
+ZCBDb21tdW5pY2F0aW9uczEgMB4GA1UEAwwXUnVzc2lhbiBUcnVzdGVkIFJvb3Qg
+Q0EwHhcNMjIwMzAxMjEwNDE1WhcNMzIwMjI3MjEwNDE1WjBwMQswCQYDVQQGEwJS
+VTE/MD0GA1UECgw2VGhlIE1pbmlzdHJ5IG9mIERpZ2l0YWwgRGV2ZWxvcG1lbnQg
+YW5kIENvbW11bmljYXRpb25zMSAwHgYDVQQDDBdSdXNzaWFuIFRydXN0ZWQgUm9v
+dCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMfFOZ8pUAL3+r2n
+qqE0Zp52selXsKGFYoG0GM5bwz1bSFtCt+AZQMhkWQheI3poZAToYJu69pHLKS6Q
+XBiwBC1cvzYmUYKMYZC7jE5YhEU2bSL0mX7NaMxMDmH2/NwuOVRj8OImVa5s1F4U
+zn4Kv3PFlDBjjSjXKVY9kmjUBsXQrIHeaqmUIsPIlNWUnimXS0I0abExqkbdrXbX
+YwCOXhOO2pDUx3ckmJlCMUGacUTnylyQW2VsJIyIGA8V0xzdaeUXg0VZ6ZmNUr5Y
+Ber/EAOLPb8NYpsAhJe2mXjMB/J9HNsoFMBFJ0lLOT/+dQvjbdRZoOT8eqJpWnVD
+U+QL/qEZnz57N88OWM3rabJkRNdU/Z7x5SFIM9FrqtN8xewsiBWBI0K6XFuOBOTD
+4V08o4TzJ8+Ccq5XlCUW2L48pZNCYuBDfBh7FxkB7qDgGDiaftEkZZfApRg2E+M9
+G8wkNKTPLDc4wH0FDTijhgxR3Y4PiS1HL2Zhw7bD3CbslmEGgfnnZojNkJtcLeBH
+BLa52/dSwNU4WWLubaYSiAmA9IUMX1/RpfpxOxd4Ykmhz97oFbUaDJFipIggx5sX
+ePAlkTdWnv+RWBxlJwMQ25oEHmRguNYf4Zr/Rxr9cS93Y+mdXIZaBEE0KS2iLRqa
+OiWBki9IMQU4phqPOBAaG7A+eP8PAgMBAAGjZjBkMB0GA1UdDgQWBBTh0YHlzlpf
+BKrS6badZrHF+qwshzAfBgNVHSMEGDAWgBTh0YHlzlpfBKrS6badZrHF+qwshzAS
+BgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsF
+AAOCAgEAALIY1wkilt/urfEVM5vKzr6utOeDWCUczmWX/RX4ljpRdgF+5fAIS4vH
+tmXkqpSCOVeWUrJV9QvZn6L227ZwuE15cWi8DCDal3Ue90WgAJJZMfTshN4OI8cq
+W9E4EG9wglbEtMnObHlms8F3CHmrw3k6KmUkWGoa+/ENmcVl68u/cMRl1JbW2bM+
+/3A+SAg2c6iPDlehczKx2oa95QW0SkPPWGuNA/CE8CpyANIhu9XFrj3RQ3EqeRcS
+AQQod1RNuHpfETLU/A2gMmvn/w/sx7TB3W5BPs6rprOA37tutPq9u6FTZOcG1Oqj
+C/B7yTqgI7rbyvox7DEXoX7rIiEqyNNUguTk/u3SZ4VXE2kmxdmSh3TQvybfbnXV
+4JbCZVaqiZraqc7oZMnRoWrXRG3ztbnbes/9qhRGI7PqXqeKJBztxRTEVj8ONs1d
+WN5szTwaPIvhkhO3CO5ErU2rVdUr89wKpNXbBODFKRtgxUT70YpmJ46VVaqdAhOZ
+D9EUUn4YaeLaS8AjSF/h7UkjOibNc4qVDiPP+rkehFWM66PVnP1Msh93tc+taIfC
+EYVMxjh8zNbFuoc7fzvvrFILLe7ifvEIUqSVIC/AzplM/Jxw7buXFeGP1qVCBEHq
+391d/9RAfaZ12zkwFsl+IKwE/OZxW8AHa9i1p4GO0YSNuczzEm4=
+-----END CERTIFICATE-----
diff --git a/ui/src/main/res/raw/acq_tinkoff_root_cert.cer b/ui/src/main/res/raw/acq_tinkoff_root_cert.cer
new file mode 100644
index 00000000..6890b432
--- /dev/null
+++ b/ui/src/main/res/raw/acq_tinkoff_root_cert.cer
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFVDCCAzygAwIBAgIQchJ4p+qpbrJMjzfTwBLEajANBgkqhkiG9w0BAQsFADAy
+MRkwFwYDVQQKExBKU0MgVGlua29mZiBCYW5rMRUwEwYDVQQDEwxUaW5rb2ZmIEJh
+bmswHhcNMjAwNjIzMTgwNzE0WhcNMzUwNjIzMTgxNzEyWjAyMRkwFwYDVQQKExBK
+U0MgVGlua29mZiBCYW5rMRUwEwYDVQQDEwxUaW5rb2ZmIEJhbmswggIiMA0GCSqG
+SIb3DQEBAQUAA4ICDwAwggIKAoICAQDqZxVwDoTYSks4X1ifr4JmDMjqcqqKDzXy
+LHClq7VeNfiI2TwBq4fFozSlLtvXj5EzwPnGLI9FvaV7AUxNE/ZWe8yGmuIlmKwh
+AgH1pwlpTyDyFKVYShSPZAwnJ81glm+df5Zh7/Z9D02DbqzYPRi0jMxgGYaO0i+S
+f7GUjp0oJQFOjbRDhjftD7m79oJyS5I3QeAS8l/OoD8zjZTr3GgUwPPyBds7uvic
+uDEZVHxBvtk5Jv8TbWID/bV/rV4yEIihqpQE8rKAFEhOCEo0riRxsrIljfgMyJaD
+jhrUOFVcwE3PMA1JjemnjfkL2ONoC9Ec0qZTql6Y3AgYQOn+aZr9t/H5Pe/01IYx
+q1r2lNO6WFXsiDIQi9Qne47PwvNrdU6NX6pOEj9I5wo1TnO2O4aYYtN2FKUj3aRi
+cGZ+kTm99bCFDU/7QvE6n+vh4AAryXQLyWQixz3/om18zr4/d407Swu3ru/jcUrg
+3HSK68+2xJBW93wG3yW2nwIjEzRyfEnYDBd35eO+Cb8DZPsRtX44oKv3Qf7R1qn3
+90cCutJjQkcOZdbjSu+2ZMOUyCsX8Ynn2nRCaz+1hmTLIqas8gSBCfl47neUYZJL
+bjvAcsr7P8yPrqcLn/U9zOFGAYEEY33xtiAX4SuFucLrLLem9dLj4YKP5NlJYM/5
+QztwNJOl6wIDAQABo2YwZDATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMC
+AYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjLyGIYW+vWwPQ9Jl6x+dfQu/
+MXYwEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQELBQADggIBAEHlSuuQxdJC
++hNdJW7bidnoOrMVdraRlw7pCC+B7TVEvuecinGjrJpqm3j34HLP1NBto1QVnqQ/
+pDjZ253ILxfa9acBGxdHnRnmymKxl14S/vVsdCVvpM1iZ+ss8jPCWT3JUX4PjuWI
+fW8xI6NvQUdxKt/GdqMJvGMinRV4Vg2XkX0BkIJH/F4VdORPhTiDZjNOIke9lta2
+PG2sKlzL4RW2NOjv5bbzL1l6dn3wJUeYBzyss1AuBjcBCHYtZEeTyDQGigYq/YRj
+S2z/fZMdia6iTPu3XsSERekttMi/8K3/NCIHcN79Ws0q0nOKR5RzAyxnILDggnRs
+bq2Ab0H/1BcMCCLx8DOzH+3ViAMlbIEWDb5dKwUJBCMJpHjdoMV2AHFPwGPQxjv3
+WOG+RsN+oJqZmPLrrTD+PWkdho5pTG8qu2ijKRzJgsUXPiiSAPCy+UtkDd/2OL/z
+EYEEkKcCXc99euWnl1w/FYIsnKwPwxPP0sNC9mcKtN2j6sdUjKa94ttSd6NrkE4F
+4E36iKlWtaZIXbC4jlpyuyQwbuvRzU/l3NIX7e3fYPsz9o0eDgl7hx2jsUKimEIv
+FSqFYA5n0x1jx2fgScxYDQaGGFM6Ox/BjPZvG32DbUb+9UXB/u0fjoJ7D/6Mw3H7
+vlyNOVXLq10yfyxkmJpF8IGvDK1UXhhB
+-----END CERTIFICATE-----