diff --git a/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/datatrans/data/DatatransRemoteDataSource.kt b/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/datatrans/data/DatatransRemoteDataSource.kt index 0b35034b24..8864d96654 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/datatrans/data/DatatransRemoteDataSource.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/datatrans/data/DatatransRemoteDataSource.kt @@ -14,7 +14,7 @@ import okhttp3.RequestBody.Companion.toRequestBody internal interface DatatransRemoteDataSource { - suspend fun sendUserData(customerDataDto: CustomerDataDto): Result + suspend fun sendUserData(customerDataDto: CustomerDataDto, projectId: String): Result } internal class DatatransRemoteDataSourceImpl( @@ -24,9 +24,10 @@ internal class DatatransRemoteDataSourceImpl( override suspend fun sendUserData( customerDataDto: CustomerDataDto, + projectId: String ): Result { - val project = - snabble.checkedInProject.value ?: return Result.failure(Exception("Missing projectId")) + val project = snabble.projects.find { it.id == projectId } + ?: return Result.failure(Exception("Missing projectId")) val customerInfoPostUrl = project.paymentMethodDescriptors.getTokenizationUrlFor(customerDataDto.paymentMethod) diff --git a/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/datatrans/data/DatatransRepositoryImpl.kt b/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/datatrans/data/DatatransRepositoryImpl.kt index c57084858d..ecb51ff51c 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/datatrans/data/DatatransRepositoryImpl.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/datatrans/data/DatatransRepositoryImpl.kt @@ -17,14 +17,15 @@ internal class DatatransRepositoryImpl( override suspend fun sendUserData( customerInfo: CustomerInfo, - paymentMethod: PaymentMethod + paymentMethod: PaymentMethod, + projectId: String ): Result { - return datatransRemoteDataSource.sendUserData(createTokenizationRequest(customerInfo, paymentMethod)) + return datatransRemoteDataSource.sendUserData(createCustomerData(customerInfo, paymentMethod), projectId) .map { it.toResponse() } } } -private fun createTokenizationRequest( +private fun createCustomerData( customerInfo: CustomerInfo, paymentMethod: PaymentMethod ) = CustomerDataDto( diff --git a/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/datatrans/domain/DatatransRepository.kt b/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/datatrans/domain/DatatransRepository.kt index 7b1e0d59c4..66c5745f0e 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/datatrans/domain/DatatransRepository.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/datatrans/domain/DatatransRepository.kt @@ -8,6 +8,7 @@ internal interface DatatransRepository { suspend fun sendUserData( customerInfo: CustomerInfo, - paymentMethod: PaymentMethod + paymentMethod: PaymentMethod, + projectId: String ): Result } diff --git a/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/datatrans/ui/DatatransFragment.kt b/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/datatrans/ui/DatatransFragment.kt index ff143f1669..abd2fef999 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/datatrans/ui/DatatransFragment.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/datatrans/ui/DatatransFragment.kt @@ -24,7 +24,7 @@ import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.launch -class DatatransFragment : Fragment() { +open class DatatransFragment : Fragment() { private val viewModel: DatatransViewModel by viewModels { DatatransViewModelFactory(requireContext()) } diff --git a/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/datatrans/ui/DatatransViewModel.kt b/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/datatrans/ui/DatatransViewModel.kt index af1ed348d6..ad7d1e99c9 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/datatrans/ui/DatatransViewModel.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/datatrans/ui/DatatransViewModel.kt @@ -45,7 +45,9 @@ internal class DatatransViewModel( fun sendUserData(customerInfo: CustomerInfo) { viewModelScope.launch { paymentMethod ?: return@launch - datatransRepository.sendUserData(customerInfo, paymentMethod) + projectId ?: return@launch + + datatransRepository.sendUserData(customerInfo, paymentMethod, projectId) .onSuccess { info -> _uiState.update { it.copy(isLoading = false) } _event.update { Event.TransActionCreated(createTransaction(info.mobileToken, info.isTesting)) } diff --git a/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/fiserv/FiservInputFragment.kt b/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/fiserv/FiservInputFragment.kt index 18b122c1a1..07b906c34c 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/fiserv/FiservInputFragment.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/fiserv/FiservInputFragment.kt @@ -11,17 +11,17 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.lifecycle.compose.collectAsStateWithLifecycle import io.snabble.sdk.PaymentMethod -import io.snabble.sdk.Snabble import io.snabble.sdk.ui.payment.PaymentMethodMetaDataHelper import io.snabble.sdk.ui.payment.creditcard.shared.CustomerInfoInputScreen import io.snabble.sdk.ui.utils.ThemeWrapper import io.snabble.sdk.ui.utils.serializableExtra -class FiservInputFragment : Fragment() { +open class FiservInputFragment : Fragment() { private val viewModel: FiservViewModel by viewModels { FiservViewModelFactory(requireContext()) } private lateinit var paymentMethod: PaymentMethod + private lateinit var projectId: String override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -30,6 +30,9 @@ class FiservInputFragment : Fragment() { arguments?.serializableExtra(FiservInputView.ARG_PAYMENT_TYPE) ?: kotlin.run { activity?.onBackPressed(); return } + projectId = arguments?.serializableExtra(FiservInputView.ARG_PROJECT_ID) + ?: kotlin.run { activity?.onBackPressed(); return } + (requireActivity() as? AppCompatActivity)?.supportActionBar?.title = PaymentMethodMetaDataHelper(requireContext()).labelFor(paymentMethod) } @@ -57,7 +60,7 @@ class FiservInputFragment : Fragment() { FiservInputView(context) .apply { load( - Snabble.checkedInProject.value?.id, + projectId, paymentMethod, uiState.formUrl, uiState.deletePreAuthUrl diff --git a/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/fiserv/FiservViewModel.kt b/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/fiserv/FiservViewModel.kt index 82afbb8075..369e3ef667 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/fiserv/FiservViewModel.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/fiserv/FiservViewModel.kt @@ -20,18 +20,22 @@ internal class FiservViewModel( savedStateHandle: SavedStateHandle ) : ViewModel() { - private val _uiState = MutableStateFlow(UiState(countryItems = countryItemsRepo.loadCountryItems())) + private val _uiState = + MutableStateFlow(UiState(countryItems = countryItemsRepo.loadCountryItems())) val uiState: StateFlow = _uiState.asStateFlow() - private val paymentMethod = savedStateHandle.get(FiservInputView.ARG_PAYMENT_TYPE) + private val paymentMethod = + savedStateHandle.get(FiservInputView.ARG_PAYMENT_TYPE) + private val projectId = savedStateHandle.get(FiservInputView.ARG_PROJECT_ID) fun sendUserData(customerInfo: CustomerInfo) { viewModelScope.launch { paymentMethod ?: return@launch + projectId ?: return@launch _uiState.update { it.copy(isLoading = true, showError = false) } - fiservRepo.sendUserData(customerInfo, paymentMethod) + fiservRepo.sendUserData(customerInfo, paymentMethod, projectId) .onSuccess { info -> _uiState.update { it.copy( diff --git a/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/fiserv/data/FiservRemoteDataSource.kt b/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/fiserv/data/FiservRemoteDataSource.kt index 527a9e4b8d..170abcfae4 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/fiserv/data/FiservRemoteDataSource.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/fiserv/data/FiservRemoteDataSource.kt @@ -17,7 +17,8 @@ internal interface FiservRemoteDataSource { suspend fun sendUserData( customerInfo: CustomerInfoDto, - paymentMethod: PaymentMethod + paymentMethod: PaymentMethod, + projectId: String ): Result } @@ -28,10 +29,11 @@ internal class FiservRemoteDataSourceImpl( override suspend fun sendUserData( customerInfo: CustomerInfoDto, - paymentMethod: PaymentMethod + paymentMethod: PaymentMethod, + projectId: String ): Result { - val project = - snabble.checkedInProject.value ?: return Result.failure(Exception("Missing projectId")) + val project = snabble.projects.find { it.id == projectId } + ?: return Result.failure(Exception("Missing projectId")) val customerInfoPostUrl = project.paymentMethodDescriptors.getTokenizationUrlFor(paymentMethod) diff --git a/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/fiserv/data/FiservRepositoryImpl.kt b/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/fiserv/data/FiservRepositoryImpl.kt index 2d4cba6208..b6a068c77a 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/fiserv/data/FiservRepositoryImpl.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/fiserv/data/FiservRepositoryImpl.kt @@ -13,10 +13,11 @@ internal class FiservRepositoryImpl( override suspend fun sendUserData( customerInfo: CustomerInfo, - paymentMethod: PaymentMethod + paymentMethod: PaymentMethod, + projectId: String ): Result = remoteDataSource - .sendUserData(customerInfo.toDto(), paymentMethod) + .sendUserData(customerInfo.toDto(), paymentMethod, projectId) .map { AuthData(it.links.formUrl.href, it.links.deleteUrl.href) } } diff --git a/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/fiserv/domain/FiservRepository.kt b/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/fiserv/domain/FiservRepository.kt index c8da727488..9e21da0885 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/fiserv/domain/FiservRepository.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/fiserv/domain/FiservRepository.kt @@ -8,6 +8,7 @@ internal interface FiservRepository { suspend fun sendUserData( customerInfo: CustomerInfo, - paymentMethod: PaymentMethod + paymentMethod: PaymentMethod, + projectId: String ): Result } diff --git a/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/shared/CustomerInfoInputScreen.kt b/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/shared/CustomerInfoInputScreen.kt index 9045bc2c23..ec58da206a 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/shared/CustomerInfoInputScreen.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/shared/CustomerInfoInputScreen.kt @@ -209,6 +209,6 @@ private fun List?.loadDefaultCountry(): CountryItem = ?: CountryItem( displayName = Locale.GERMANY.country.displayName, code = Locale.GERMANY.country, - numericCode = "", + numericCode = "276", stateItems = null ) diff --git a/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/shared/Extensions.kt b/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/shared/Extensions.kt index 4061601d52..55c5eb5868 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/shared/Extensions.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/payment/creditcard/shared/Extensions.kt @@ -39,6 +39,7 @@ internal suspend inline fun OkHttpClient.post(request: Request, gson } val result = if (data == null) { + Log.e("Payment", body ?: "Unkown cause") Result.failure(Exception("Missing content")) } else { Result.success(data) @@ -47,13 +48,15 @@ internal suspend inline fun OkHttpClient.post(request: Request, gson } else -> { - response.body?.string() + val body = response.body?.string() + Log.e("Payment", body ?: "Unkown cause") it.resume(Result.failure(Exception(response.message))) } } } override fun onFailure(call: Call, e: IOException) { + Log.e("Payment", e.localizedMessage ?: "Unkown cause") it.resume(Result.failure(e)) } })