NTP-21170 | PS | fix no token found error, added sdk params to cache repo (#14336)
This commit is contained in:
@@ -224,9 +224,14 @@ class NaviPaymentAnalytics private constructor() {
|
||||
)
|
||||
}
|
||||
|
||||
fun onUpiAppLaunched(selectedUpiApp: String, baseAttributes: Map<String, String>) {
|
||||
fun onUpiAppLaunched(
|
||||
selectedUpiApp: String,
|
||||
intentUri: String,
|
||||
baseAttributes: Map<String, String>
|
||||
) {
|
||||
val eventAttributes = buildMap {
|
||||
put("selected_upi_app", selectedUpiApp)
|
||||
put("intent_uri", intentUri)
|
||||
putAll(baseAttributes)
|
||||
}
|
||||
NaviTrackEvent.trackEventOnClickStream(
|
||||
@@ -380,9 +385,14 @@ class NaviPaymentAnalytics private constructor() {
|
||||
)
|
||||
}
|
||||
|
||||
fun onUpiAppLaunched(selectedUpiApp: String, baseAttributes: Map<String, String>) {
|
||||
fun onUpiAppLaunched(
|
||||
selectedUpiApp: String,
|
||||
intentUri: String,
|
||||
baseAttributes: Map<String, String>
|
||||
) {
|
||||
val eventAttributes = buildMap {
|
||||
put("selected_upi_app", selectedUpiApp)
|
||||
put("intent_uri", intentUri)
|
||||
putAll(baseAttributes)
|
||||
}
|
||||
NaviTrackEvent.trackEventOnClickStream(
|
||||
|
||||
@@ -7,8 +7,13 @@
|
||||
|
||||
package com.navi.payment.nativepayment.dataprovider
|
||||
|
||||
import com.google.gson.Gson
|
||||
import com.navi.base.cache.model.NaviCacheEntity
|
||||
import com.navi.base.cache.repository.NaviCacheRepository
|
||||
import com.navi.common.utils.SoftRefLruCache
|
||||
import com.navi.payment.model.common.PaymentSdkInitParams
|
||||
import com.navi.payment.nativepayment.model.BasePaymentMethodResponse
|
||||
import com.navi.payment.network.util.PaymentsSdkRetrofit
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
@@ -16,7 +21,12 @@ import kotlinx.coroutines.flow.asStateFlow
|
||||
import kotlinx.coroutines.flow.update
|
||||
|
||||
@Singleton
|
||||
class PaymentDataProvider @Inject constructor() {
|
||||
class PaymentDataProvider
|
||||
@Inject
|
||||
constructor(
|
||||
private val naviCacheRepository: NaviCacheRepository,
|
||||
@PaymentsSdkRetrofit private val gson: Gson,
|
||||
) {
|
||||
|
||||
private val cache: SoftRefLruCache<String, Any> = SoftRefLruCache(maxSize = 10)
|
||||
private val analyticsEventParams = mutableMapOf<String, String>()
|
||||
@@ -51,10 +61,11 @@ class PaymentDataProvider @Inject constructor() {
|
||||
cache.remove(key)
|
||||
}
|
||||
|
||||
fun clear() {
|
||||
suspend fun clear() {
|
||||
cache.clear()
|
||||
analyticsEventParams.clear()
|
||||
sourceEventProperties.clear()
|
||||
naviCacheRepository.clear(SDK_PARAMS)
|
||||
_paymentMethodResponse.update { null }
|
||||
_isDiscountPreApplied.update { false }
|
||||
}
|
||||
@@ -86,6 +97,21 @@ class PaymentDataProvider @Inject constructor() {
|
||||
_isDiscountPreApplied.update { isDiscountApplied }
|
||||
}
|
||||
|
||||
suspend fun saveSdkInitParams(paymentSdkInitParams: PaymentSdkInitParams) {
|
||||
naviCacheRepository.save(
|
||||
NaviCacheEntity(
|
||||
value = gson.toJson(paymentSdkInitParams),
|
||||
version = 1,
|
||||
key = SDK_PARAMS
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
suspend fun getSdkInitParams(): PaymentSdkInitParams? {
|
||||
val sdkInitParams = naviCacheRepository.get(SDK_PARAMS)
|
||||
return sdkInitParams?.let { gson.fromJson(it.value, PaymentSdkInitParams::class.java) }
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val MAX_CONSUMPTION_LIMIT = 100
|
||||
private const val MAX_TTL = 60 * 60 * 1000L
|
||||
|
||||
@@ -694,6 +694,7 @@ private fun EffectsHandler(
|
||||
upiIntentResultLauncher.launch(intent)
|
||||
naviPaymentAnalytics.onUpiAppLaunched(
|
||||
selectedUpiApp = effect.payload.upiAppPackageName,
|
||||
intentUri = effect.payload.intentUri,
|
||||
baseAttributes = npsViewModel.getAnalyticsParams()
|
||||
)
|
||||
} catch (e: Exception) {
|
||||
|
||||
@@ -299,8 +299,9 @@ private fun EffectsHandler(
|
||||
}
|
||||
is NPSBaseContract.Effect.StartUpiAppPayment -> {
|
||||
naviPaymentAnalytics.onUpiAppLaunched(
|
||||
effect.payload.upiAppPackageName,
|
||||
upiIntentViewModel.getAnalyticsParams()
|
||||
selectedUpiApp = effect.payload.upiAppPackageName,
|
||||
intentUri = effect.payload.intentUri,
|
||||
baseAttributes = upiIntentViewModel.getAnalyticsParams()
|
||||
)
|
||||
try {
|
||||
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(effect.payload.intentUri))
|
||||
|
||||
@@ -21,12 +21,12 @@ import com.navi.payment.model.common.PaymentSdkInitParams
|
||||
import com.navi.payment.model.initiatesdk.PaymentPrefetchDetail
|
||||
import com.navi.payment.model.initiatesdk.PaymentPrefetchMethodRequest
|
||||
import com.navi.payment.nativepayment.NaviPaymentAnalyticScreenName
|
||||
import com.navi.payment.nativepayment.common.usecase.TransactionStatusUseCase
|
||||
import com.navi.payment.nativepayment.dataprovider.PaymentDataProvider
|
||||
import com.navi.payment.nativepayment.dataprovider.PaymentDataProvider.Companion.ACTION_TYPE
|
||||
import com.navi.payment.nativepayment.dataprovider.PaymentDataProvider.Companion.ERROR_RESPONSE
|
||||
import com.navi.payment.nativepayment.dataprovider.PaymentDataProvider.Companion.PAYMENT_INITIATE_START_TIME
|
||||
import com.navi.payment.nativepayment.dataprovider.PaymentDataProvider.Companion.SCREEN_TYPE
|
||||
import com.navi.payment.nativepayment.dataprovider.PaymentDataProvider.Companion.SDK_PARAMS
|
||||
import com.navi.payment.nativepayment.model.NaviPaymentScreenType
|
||||
import com.navi.payment.nativepayment.model.NetBankingPaymentInstrument
|
||||
import com.navi.payment.nativepayment.model.PaymentActionType
|
||||
@@ -49,6 +49,7 @@ import com.navi.payment.utils.getPMSMetricInfo
|
||||
import com.navi.paymentclients.model.thirdparty.UpiResultResponse
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||
import kotlinx.coroutines.flow.asSharedFlow
|
||||
import org.json.JSONObject
|
||||
@@ -63,6 +64,7 @@ constructor(
|
||||
@PaymentsSdkRetrofit private val deserializer: Gson,
|
||||
private val netBankingUseCase: NetBankingUseCase,
|
||||
private val pmsLinkedAccountUseCase: PmsLinkedAccountUseCase,
|
||||
private val transactionStatusUseCase: TransactionStatusUseCase,
|
||||
private val litmusExperimentsUseCase: LitmusExperimentsUseCase
|
||||
) : NaviPaymentBaseVM(NaviPaymentAnalyticScreenName.CHECKOUT_SCREEN.screenName) {
|
||||
|
||||
@@ -132,7 +134,7 @@ constructor(
|
||||
PaymentErrorData(error = error, errorReason = PMSErrorReason.GetMethodsError)
|
||||
)
|
||||
}
|
||||
paymentDataProvider.add(SDK_PARAMS, paymentSdkInitParams)
|
||||
paymentDataProvider.saveSdkInitParams(paymentSdkInitParams)
|
||||
paymentDataProvider.add(
|
||||
SCREEN_TYPE,
|
||||
(response.data as? S2sPaymentMethodResponse)?.methodDetails?.paymentScreenType
|
||||
@@ -147,6 +149,9 @@ constructor(
|
||||
)
|
||||
_paymentResponse.emit(true)
|
||||
}
|
||||
viewModelScope.safeLaunch(Dispatchers.IO) {
|
||||
transactionStatusUseCase.postTransactionStatusRequest()
|
||||
}
|
||||
}
|
||||
|
||||
private fun fetchPmsExperimentsData(paymentSource: String) {
|
||||
@@ -194,7 +199,7 @@ constructor(
|
||||
}
|
||||
}
|
||||
|
||||
private fun clearPaymentData() {
|
||||
private suspend fun clearPaymentData() {
|
||||
paymentDataProvider.clear()
|
||||
pmsLinkedAccountUseCase.clear()
|
||||
}
|
||||
|
||||
@@ -39,7 +39,6 @@ import com.navi.payment.juspay.JusPayCardConstants.PAYMENT_METHOD
|
||||
import com.navi.payment.juspay.JusPayCardConstants.RESP_ERROR
|
||||
import com.navi.payment.juspay.JuspayCallbackWrapper
|
||||
import com.navi.payment.model.clientmodels.juspay.JuspaySDKEvents
|
||||
import com.navi.payment.model.common.PaymentSdkInitParams
|
||||
import com.navi.payment.model.common.SignalPaymentData
|
||||
import com.navi.payment.nativepayment.NaviPaymentAnalyticScreenName
|
||||
import com.navi.payment.nativepayment.NaviPaymentAnalytics
|
||||
@@ -146,12 +145,7 @@ constructor(
|
||||
init {
|
||||
recordScreenLandTime(NaviPaymentAnalyticScreenName.CARD_SCREEN.screenName)
|
||||
processPaymentMethodResponse()
|
||||
updateInternalState(internalState.copy(paymentSdkInitParams = getSDKInitParams()))
|
||||
baseAnalyticsParams.apply {
|
||||
put(TOKEN, internalState.paymentSdkInitParams?.token.orEmpty())
|
||||
put(SOURCE, internalState.paymentSdkInitParams?.paymentSource.orEmpty())
|
||||
put(CATEGORY_ID, internalState.paymentSdkInitParams?.categoryId.orEmpty())
|
||||
}
|
||||
updateSDKInitParams()
|
||||
isInteractionAllowed = true
|
||||
}
|
||||
|
||||
@@ -298,8 +292,16 @@ constructor(
|
||||
internalState = newState
|
||||
}
|
||||
|
||||
private fun getSDKInitParams(): PaymentSdkInitParams? {
|
||||
return (paymentDataProvider.get(PaymentDataProvider.SDK_PARAMS) as? PaymentSdkInitParams)
|
||||
private fun updateSDKInitParams() {
|
||||
viewModelScope.safeLaunch {
|
||||
val sdkInitParams = paymentDataProvider.getSdkInitParams()
|
||||
updateInternalState(internalState.copy(paymentSdkInitParams = sdkInitParams))
|
||||
baseAnalyticsParams.apply {
|
||||
put(TOKEN, sdkInitParams?.token.orEmpty())
|
||||
put(SOURCE, sdkInitParams?.paymentSource.orEmpty())
|
||||
put(CATEGORY_ID, sdkInitParams?.categoryId.orEmpty())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onEvent(event: CardDetailScreenEvent) {
|
||||
|
||||
@@ -45,7 +45,6 @@ import com.navi.payment.nativepayment.NaviPaymentAnalytics
|
||||
import com.navi.payment.nativepayment.common.usecase.TransactionStatusUseCase
|
||||
import com.navi.payment.nativepayment.dataprovider.PaymentDataProvider
|
||||
import com.navi.payment.nativepayment.dataprovider.PaymentDataProvider.Companion.PAYMENT_ORDER_REFERENCE_ID
|
||||
import com.navi.payment.nativepayment.dataprovider.PaymentDataProvider.Companion.SCREEN_TYPE
|
||||
import com.navi.payment.nativepayment.dataprovider.PaymentDataProvider.Companion.TRANSACTION_REFERENCE_ID
|
||||
import com.navi.payment.nativepayment.db.model.TransactionStatus
|
||||
import com.navi.payment.nativepayment.db.model.TransactionStatusRequestEntity
|
||||
@@ -82,7 +81,6 @@ import com.navi.payment.turbocheckout.ui.PayNowState
|
||||
import com.navi.payment.utils.Constants
|
||||
import com.navi.payment.utils.Constants.COIN_DISCOUNT_APPLY_DELAY
|
||||
import com.navi.payment.utils.Constants.LINKED_ACCOUNT_SYNC_DELAY
|
||||
import com.navi.payment.utils.Constants.MINI_PAYMENT_SCREEN
|
||||
import com.navi.payment.utils.Constants.SCREEN_NAME
|
||||
import com.navi.payment.utils.getPMSMetricInfo
|
||||
import com.navi.payment.utils.roundTo
|
||||
@@ -204,27 +202,14 @@ constructor(
|
||||
init {
|
||||
recordScreenLandTime(screenName)
|
||||
recordApiStartTime(screenName)
|
||||
initSdkInitParams()
|
||||
getPaymentMethodData()
|
||||
viewModelScope.launch {
|
||||
updateSDKInitParams()
|
||||
getPaymentMethodData()
|
||||
}
|
||||
viewModelScope.launch(Dispatchers.IO) { getNaviUpiConnectedAccounts() }
|
||||
viewModelScope.safeLaunch { collectIsDiscountAlreadyApplied() }
|
||||
}
|
||||
|
||||
private fun initSdkInitParams() {
|
||||
paymentSdkInitParams = getSDKInitParams()
|
||||
paymentDataProvider.updateAnalyticsParams(
|
||||
mapOf(
|
||||
SCREEN_NAME to NaviPaymentAnalyticScreenName.MINI_PAYMENT_SCREEN.screenName,
|
||||
"source" to paymentSdkInitParams?.paymentSource.orEmpty(),
|
||||
"category_id" to paymentSdkInitParams?.categoryId.orEmpty(),
|
||||
"token" to paymentSdkInitParams?.token.orEmpty(),
|
||||
"payment_method" to "UPI_LINKED_BANK_ACCOUNTS",
|
||||
"payment_sdk_type" to "compose",
|
||||
"is_navi_upi_onboarded" to naviPayManager.isUserOnboarded().toString()
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
private fun getPaymentMethodData() {
|
||||
viewModelScope.launch {
|
||||
val errorData =
|
||||
@@ -471,8 +456,19 @@ constructor(
|
||||
_payNowResponse.update { PayNowState.Nothing }
|
||||
}
|
||||
|
||||
private fun getSDKInitParams(): PaymentSdkInitParams? {
|
||||
return (paymentDataProvider.get(PaymentDataProvider.SDK_PARAMS) as? PaymentSdkInitParams)
|
||||
private suspend fun updateSDKInitParams() {
|
||||
paymentSdkInitParams = paymentDataProvider.getSdkInitParams()
|
||||
paymentDataProvider.updateAnalyticsParams(
|
||||
mapOf(
|
||||
SCREEN_NAME to NaviPaymentAnalyticScreenName.MINI_PAYMENT_SCREEN.screenName,
|
||||
"source" to paymentSdkInitParams?.paymentSource.orEmpty(),
|
||||
"category_id" to paymentSdkInitParams?.categoryId.orEmpty(),
|
||||
"token" to paymentSdkInitParams?.token.orEmpty(),
|
||||
"payment_method" to "UPI_LINKED_BANK_ACCOUNTS",
|
||||
"payment_sdk_type" to "compose",
|
||||
"is_navi_upi_onboarded" to naviPayManager.isUserOnboarded().toString()
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
fun refreshMPSScreen() {
|
||||
|
||||
@@ -75,9 +75,11 @@ abstract class NPSBaseViewModel(
|
||||
|
||||
init {
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
updateSdkInitParams()
|
||||
launch(Dispatchers.IO) { getNaviUpiConnectedAccounts() }
|
||||
launch(Dispatchers.IO) { processPaymentMethods() }
|
||||
launch(Dispatchers.IO) {
|
||||
updateSdkInitParams()
|
||||
processPaymentMethods()
|
||||
}
|
||||
launch(Dispatchers.IO) { vpaHandleChangeObserver() }
|
||||
}
|
||||
}
|
||||
@@ -98,9 +100,8 @@ abstract class NPSBaseViewModel(
|
||||
|
||||
abstract fun getMainCtaState(): PaymentsMainCtaState
|
||||
|
||||
private fun updateSdkInitParams() {
|
||||
paymentSdkInitParams =
|
||||
(paymentDataProvider.get(PaymentDataProvider.SDK_PARAMS) as? PaymentSdkInitParams)
|
||||
private suspend fun updateSdkInitParams() {
|
||||
paymentSdkInitParams = paymentDataProvider.getSdkInitParams()
|
||||
}
|
||||
|
||||
private suspend fun getNaviUpiConnectedAccounts() {
|
||||
|
||||
@@ -13,7 +13,6 @@ import com.navi.common.usecase.SyncLitmusExperimentUseCase
|
||||
import com.navi.payment.analytics.NaviPaymentScreenAnalytics
|
||||
import com.navi.payment.model.common.PaymentSdkInitParams
|
||||
import com.navi.payment.nativepayment.NaviPaymentAnalyticScreenName
|
||||
import com.navi.payment.nativepayment.common.usecase.TransactionStatusUseCase
|
||||
import com.navi.payment.nativepayment.dataprovider.PaymentDataProvider
|
||||
import com.navi.payment.nativepayment.dataprovider.PaymentDataProvider.Companion.PAYMENT_INITIATE_START_TIME
|
||||
import com.navi.payment.nativepayment.dataprovider.PaymentDataProvider.Companion.SCREEN_TYPE
|
||||
@@ -21,7 +20,6 @@ import com.navi.payment.nativepayment.dataprovider.PaymentDataProvider.Companion
|
||||
import com.navi.payment.nativepayment.model.NaviPaymentScreenType
|
||||
import com.navi.payment.nativepayment.model.PaymentActionType
|
||||
import com.navi.payment.nativepayment.repository.PaymentRepository
|
||||
import com.navi.payment.nativepayment.usecase.PmsLinkedAccountUseCase
|
||||
import com.navi.payment.paymentscreen.model.PaymentFeedbackConfig
|
||||
import com.navi.payment.paymentscreen.model.PaymentFeedbackRequest
|
||||
import com.navi.payment.utils.Constants.LITMUS_EXPERIMENT_NAVI_PMT_NPS_MIGRATION
|
||||
@@ -38,22 +36,19 @@ constructor(
|
||||
private val paymentDataProvider: PaymentDataProvider,
|
||||
private val paymentRepository: PaymentRepository,
|
||||
private val syncLitmusExperimentsUseCase: SyncLitmusExperimentUseCase,
|
||||
private val transactionStatusUseCase: TransactionStatusUseCase,
|
||||
private val pmsLinkedAccountUseCase: PmsLinkedAccountUseCase,
|
||||
) : NaviPaymentBaseVM(NaviPaymentAnalyticScreenName.PAYMENT_SCREEN.screenName) {
|
||||
|
||||
var paymentSdkInitParams: PaymentSdkInitParams? = null
|
||||
private var paymentSdkInitParams: PaymentSdkInitParams? = null
|
||||
|
||||
init {
|
||||
paymentSdkInitParams = getSDKInitParams()
|
||||
viewModelScope.safeLaunch {
|
||||
getSDKInitParams()
|
||||
syncLitmusExperimentsUseCase.execute(experiments = PMS_LITMUS_EXPERIMENTS)
|
||||
transactionStatusUseCase.postTransactionStatusRequest()
|
||||
}
|
||||
}
|
||||
|
||||
private fun getSDKInitParams(): PaymentSdkInitParams? {
|
||||
return (paymentDataProvider.get(PaymentDataProvider.SDK_PARAMS) as? PaymentSdkInitParams)
|
||||
private suspend fun getSDKInitParams() {
|
||||
paymentSdkInitParams = paymentDataProvider.getSdkInitParams()
|
||||
}
|
||||
|
||||
private val naviPayAnalytics: NaviPaymentScreenAnalytics.TurboCheckoutAnalytics =
|
||||
|
||||
@@ -11,6 +11,9 @@ import androidx.lifecycle.viewModelScope
|
||||
import com.navi.payment.model.common.PaymentSdkInitParams
|
||||
import com.navi.payment.model.common.SignalPaymentData
|
||||
import com.navi.payment.nativepayment.NaviPaymentAnalyticScreenName
|
||||
import com.navi.payment.nativepayment.NaviPaymentAnalytics.Companion.CATEGORY_ID
|
||||
import com.navi.payment.nativepayment.NaviPaymentAnalytics.Companion.SOURCE
|
||||
import com.navi.payment.nativepayment.NaviPaymentAnalytics.Companion.TOKEN
|
||||
import com.navi.payment.nativepayment.dataprovider.PaymentDataProvider
|
||||
import com.navi.payment.nativepayment.model.SdkPaymentMethodResponse
|
||||
import com.navi.payment.nativepayment.presentation.reducer.SdkIntegrationEffect
|
||||
@@ -57,7 +60,7 @@ constructor(
|
||||
|
||||
init {
|
||||
processPaymentMethodResponse()
|
||||
paymentSdkInitParams = getSDKInitParams()
|
||||
updateSDKInitParams()
|
||||
baseAnalyticsParams.apply {
|
||||
put("token", paymentSdkInitParams?.token.orEmpty())
|
||||
put("source", paymentSdkInitParams?.paymentSource.orEmpty())
|
||||
@@ -65,8 +68,15 @@ constructor(
|
||||
}
|
||||
}
|
||||
|
||||
private fun getSDKInitParams(): PaymentSdkInitParams? {
|
||||
return (paymentDataProvider.get(PaymentDataProvider.SDK_PARAMS) as? PaymentSdkInitParams)
|
||||
private fun updateSDKInitParams() {
|
||||
viewModelScope.safeLaunch {
|
||||
paymentSdkInitParams = paymentDataProvider.getSdkInitParams()
|
||||
baseAnalyticsParams.apply {
|
||||
put(TOKEN, paymentSdkInitParams?.token.orEmpty())
|
||||
put(SOURCE, paymentSdkInitParams?.paymentSource.orEmpty())
|
||||
put(CATEGORY_ID, paymentSdkInitParams?.categoryId.orEmpty())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun processPaymentMethodResponse() {
|
||||
|
||||
Reference in New Issue
Block a user