diff --git a/build.gradle b/build.gradle index 3c6103c1..2e5c0d7f 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension buildscript { ext { - androidGradlePluginVersion = '9.1.0' + androidGradlePluginVersion = '9.1.1' kotlinVersion = '2.1.20' kspVersion = '2.1.20-1.0.32' dokkaVersion = '1.9.20' diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/model/request/napm/v2/PONativeAlternativePaymentRequestConfiguration.kt b/sdk/src/main/kotlin/com/processout/sdk/api/model/request/napm/v2/PONativeAlternativePaymentRequestConfiguration.kt index 29bb78ca..4ffa0faa 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/model/request/napm/v2/PONativeAlternativePaymentRequestConfiguration.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/model/request/napm/v2/PONativeAlternativePaymentRequestConfiguration.kt @@ -1,16 +1,19 @@ package com.processout.sdk.api.model.request.napm.v2 +import android.os.Parcelable import com.processout.sdk.api.model.request.napm.v2.PONativeAlternativePaymentRequestConfiguration.ReturnRedirectType.AUTOMATIC import com.squareup.moshi.JsonClass +import kotlinx.parcelize.Parcelize /** * Payment configuration. * * @param[returnRedirectType] Return redirect type. By default [AUTOMATIC]. */ +@Parcelize data class PONativeAlternativePaymentRequestConfiguration( val returnRedirectType: ReturnRedirectType = AUTOMATIC -) { +) : Parcelable { /** * Return redirect type. diff --git a/ui/src/main/kotlin/com/processout/sdk/ui/napm/NativeAlternativePaymentInteractor.kt b/ui/src/main/kotlin/com/processout/sdk/ui/napm/NativeAlternativePaymentInteractor.kt index 5bbd8c1f..9795201e 100644 --- a/ui/src/main/kotlin/com/processout/sdk/ui/napm/NativeAlternativePaymentInteractor.kt +++ b/ui/src/main/kotlin/com/processout/sdk/ui/napm/NativeAlternativePaymentInteractor.kt @@ -22,7 +22,6 @@ import com.processout.sdk.R import com.processout.sdk.api.dispatcher.POEventDispatcher import com.processout.sdk.api.model.event.PODeepLinkReceivedEvent import com.processout.sdk.api.model.request.napm.v2.* -import com.processout.sdk.api.model.request.napm.v2.PONativeAlternativePaymentRequestConfiguration.ReturnRedirectType import com.processout.sdk.api.model.request.napm.v2.PONativeAlternativePaymentSubmitData.Parameter.Companion.phoneNumber import com.processout.sdk.api.model.request.napm.v2.PONativeAlternativePaymentSubmitData.Parameter.Companion.string import com.processout.sdk.api.model.response.POAlternativePaymentMethodResponse @@ -150,9 +149,7 @@ internal class NativeAlternativePaymentInteractor( val request = PONativeAlternativePaymentAuthorizationRequest( invoiceId = flow.invoiceId, gatewayConfigurationId = flow.gatewayConfigurationId, - configuration = PONativeAlternativePaymentRequestConfiguration( - returnRedirectType = ReturnRedirectType.MANUAL - ), + configuration = flow.configuration, source = flow.customerTokenId ) invoicesService.authorize(request) @@ -177,9 +174,7 @@ internal class NativeAlternativePaymentInteractor( customerId = flow.customerId, customerTokenId = flow.customerTokenId, gatewayConfigurationId = flow.gatewayConfigurationId, - configuration = PONativeAlternativePaymentRequestConfiguration( - returnRedirectType = ReturnRedirectType.MANUAL - ) + configuration = flow.configuration ) customerTokensService.tokenize(request) .onSuccess { response -> @@ -589,6 +584,13 @@ internal class NativeAlternativePaymentInteractor( redirect = response.redirect ) }.onFailure { failure -> + val isInvalidRedirectResult = when (val code = failure.code) { + is Validation -> code.validationCode == ValidationCode.invalidRedirectResult + else -> false + } + if (isInvalidRedirectResult) { + return@onFailure + } _completion.update { Failure(failure) } } } @@ -909,9 +911,7 @@ internal class NativeAlternativePaymentInteractor( val request = PONativeAlternativePaymentAuthorizationRequest( invoiceId = flow.invoiceId, gatewayConfigurationId = flow.gatewayConfigurationId, - configuration = PONativeAlternativePaymentRequestConfiguration( - returnRedirectType = ReturnRedirectType.MANUAL - ), + configuration = flow.configuration, submitData = stateValue.fields.toSubmitData(), redirectConfirmation = redirectConfirmation ) @@ -940,9 +940,7 @@ internal class NativeAlternativePaymentInteractor( customerId = flow.customerId, customerTokenId = flow.customerTokenId, gatewayConfigurationId = flow.gatewayConfigurationId, - configuration = PONativeAlternativePaymentRequestConfiguration( - returnRedirectType = ReturnRedirectType.MANUAL - ), + configuration = flow.configuration, submitData = stateValue.fields.toSubmitData(), redirectConfirmation = redirectConfirmation ) @@ -1089,9 +1087,7 @@ internal class NativeAlternativePaymentInteractor( request = PONativeAlternativePaymentAuthorizationRequest( invoiceId = flow.invoiceId, gatewayConfigurationId = flow.gatewayConfigurationId, - configuration = PONativeAlternativePaymentRequestConfiguration( - returnRedirectType = ReturnRedirectType.MANUAL - ) + configuration = flow.configuration ) ).map() is Tokenization -> customerTokensService.tokenize( @@ -1099,9 +1095,7 @@ internal class NativeAlternativePaymentInteractor( customerId = flow.customerId, customerTokenId = flow.customerTokenId, gatewayConfigurationId = flow.gatewayConfigurationId, - configuration = PONativeAlternativePaymentRequestConfiguration( - returnRedirectType = ReturnRedirectType.MANUAL - ) + configuration = flow.configuration ) ).map() } diff --git a/ui/src/main/kotlin/com/processout/sdk/ui/napm/PONativeAlternativePaymentConfiguration.kt b/ui/src/main/kotlin/com/processout/sdk/ui/napm/PONativeAlternativePaymentConfiguration.kt index 4253ad78..91931d1c 100644 --- a/ui/src/main/kotlin/com/processout/sdk/ui/napm/PONativeAlternativePaymentConfiguration.kt +++ b/ui/src/main/kotlin/com/processout/sdk/ui/napm/PONativeAlternativePaymentConfiguration.kt @@ -4,6 +4,7 @@ import android.os.Parcelable import androidx.annotation.ColorRes import androidx.annotation.DrawableRes import androidx.annotation.IntRange +import com.processout.sdk.api.model.request.napm.v2.PONativeAlternativePaymentRequestConfiguration import com.processout.sdk.ui.core.shared.image.PODrawableImage import com.processout.sdk.ui.core.style.* import com.processout.sdk.ui.napm.PONativeAlternativePaymentConfiguration.CancelButton @@ -67,7 +68,8 @@ data class PONativeAlternativePaymentConfiguration( data class Authorization( val invoiceId: String, val gatewayConfigurationId: String, - val customerTokenId: String? = null + val customerTokenId: String? = null, + val configuration: PONativeAlternativePaymentRequestConfiguration = PONativeAlternativePaymentRequestConfiguration() ) : Flow() /** @@ -81,7 +83,8 @@ data class PONativeAlternativePaymentConfiguration( data class Tokenization( val customerId: String, val customerTokenId: String, - val gatewayConfigurationId: String + val gatewayConfigurationId: String, + val configuration: PONativeAlternativePaymentRequestConfiguration = PONativeAlternativePaymentRequestConfiguration() ) : Flow() }