Digio and Razorpay SDK Integration (#7957)

This commit is contained in:
Aparna Vadlamani
2023-10-10 11:05:31 +05:30
committed by GitHub
parent 7d17d9de88
commit 128b5f2aa4
17 changed files with 478 additions and 22 deletions

View File

@@ -18,8 +18,14 @@ import com.navi.ap.common.models.lambdamodels.ConsentResponse
import com.navi.ap.common.sdk.helper.FinarkeinHelper
import com.navi.ap.common.ui.ApplicationPlatformActivity
import com.navi.ap.common.viewmodel.LambdaVM
import com.navi.ap.utils.constants.DEV_DIGIO_E_SIGN
import com.navi.ap.utils.constants.DEV_RAZORPAY_START_PAYMENT
import com.navi.ap.utils.constants.FINARKEIN_CONSENT_DATA
import com.navi.ap.utils.logApEvent
import com.navi.common.managers.UserManager
import com.navi.common.uitron.model.action.DigioSDKAction
import com.navi.common.uitron.model.action.FinarkeinSDKAction
import com.navi.common.uitron.model.action.RazorpaySDKAction
import com.navi.common.uitron.model.action.SDKType
import com.navi.common.uitron.model.action.ThirdPartySdkAction
import getInputId
@@ -75,6 +81,40 @@ private fun handleThirdPartySdkAction(
?.let { finarkeinHelper.openFinarkein(it) }
}
}
SDKType.DIGIO.name -> {
(action.value as? DigioSDKAction)?.let { actionData ->
activity.sdkHandler.digioHandler.getDigioHelper().let { helper ->
logApEvent(eventName = DEV_DIGIO_E_SIGN)
helper.eSign(
documentId = actionData.mandateId.orEmpty(),
identifier = UserManager.getPhoneNumber(),
accessToken = actionData.accessToken,
logo = actionData.logo,
preferredAuthtype = actionData.preferredAuthType
)
activity.sdkHandler.digioHandler.postDigioSdkResultAction(
viewModel = viewModel,
action = actionData
)
}
}
}
SDKType.RAZORPAY.name -> {
(action.value as? RazorpaySDKAction)?.let { actionData ->
activity.sdkHandler.razorpayHandler.getRazorpayHelper().let { helper ->
logApEvent(eventName = DEV_RAZORPAY_START_PAYMENT)
helper.startPayment(
actionData.razorpayData,
activity,
actionData.accountKey.orEmpty()
)
activity.sdkHandler.razorpayHandler.postRazorpaySdkResultAction(
viewModel = viewModel,
action = actionData
)
}
}
}
else -> {}
}
}

View File

@@ -0,0 +1,60 @@
/*
*
* * Copyright © 2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.navi.ap.common.sdk.handler
import androidx.lifecycle.viewModelScope
import com.navi.ap.common.sdk.helper.DigioHelper
import com.navi.ap.common.ui.ApplicationPlatformActivity
import com.navi.ap.common.viewmodel.LambdaVM
import com.navi.ap.utils.constants.DIGIO_RESPONSE
import com.navi.ap.utils.constants.DIGIO_STATUS_CODE
import com.navi.ap.utils.constants.DIGIO_STATUS_KEY
import com.navi.ap.utils.constants.FAILURE
import com.navi.ap.utils.constants.SUCCESS
import com.navi.common.uitron.model.action.DigioSDKAction
import `in`.digio.sdk.esign.DigioResponse
import kotlinx.coroutines.launch
import javax.inject.Inject
/**
* This class is responsible for handling Digio SDK related actions
*/
class DigioHandler @Inject constructor(private val digioHelper: DigioHelper) {
fun init(activity: ApplicationPlatformActivity) {
digioHelper.initConfig(activity)
}
fun getDigioHelper(): DigioHelper {
return digioHelper
}
fun postDigioSdkResultAction(action: DigioSDKAction, viewModel: LambdaVM) {
viewModel.viewModelScope.launch {
if (viewModel.digioCallback == null) {
viewModel.digioCallback =
viewModel.handle.getStateFlow<String?>(DIGIO_STATUS_KEY, null)
viewModel.digioCallback?.collect {
if (it == SUCCESS) {
viewModel.handleActions(action.onSuccess)
} else if (it == FAILURE) {
viewModel.handleActions(action.onFailure)
}
}
}
}
}
fun handleDigioSdkResult(digioStatus: String, data: DigioResponse, viewModel: LambdaVM?) {
viewModel?.handle?.apply {
set(DIGIO_STATUS_CODE, data.code.toString())
set(DIGIO_RESPONSE, data.toString())
set(DIGIO_STATUS_KEY, digioStatus)
}
}
}

View File

@@ -0,0 +1,65 @@
/*
*
* * Copyright © 2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.navi.ap.common.sdk.handler
import androidx.lifecycle.viewModelScope
import com.navi.ap.common.ui.ApplicationPlatformActivity
import com.navi.ap.common.viewmodel.LambdaVM
import com.navi.ap.utils.constants.FAILURE
import com.navi.ap.utils.constants.RAZORPAY_RESPONSE
import com.navi.ap.utils.constants.RAZORPAY_STATUS_CODE
import com.navi.ap.utils.constants.RAZORPAY_STATUS_KEY
import com.navi.ap.utils.constants.SUCCESS
import com.navi.common.uitron.model.action.RazorpaySDKAction
import com.navi.payment.razorpay.RazorpayHelper
import kotlinx.coroutines.launch
import javax.inject.Inject
/**
* This class is responsible for handling Razorpay SDK related actions
*/
class RazorpayHandler @Inject constructor(private val razorpayHelper: RazorpayHelper) {
fun init(activity: ApplicationPlatformActivity) {
razorpayHelper.initializeRazorpay(activity)
}
fun getRazorpayHelper(): RazorpayHelper {
return razorpayHelper
}
fun postRazorpaySdkResultAction(action: RazorpaySDKAction, viewModel: LambdaVM) {
viewModel.viewModelScope.launch {
if (viewModel.razorpayCallback == null) {
viewModel.razorpayCallback = viewModel.handle.getStateFlow<String?>(
RAZORPAY_STATUS_KEY, null
)
viewModel.razorpayCallback?.collect {
if (it == SUCCESS) {
viewModel.handleActions(action.onSuccess)
} else if (it == FAILURE) {
viewModel.handleActions(action.onFailure)
}
}
}
}
}
fun handleRazorpaySdkResult(
code: Int,
razorpayStatus: String,
responseString: String?,
viewModel: LambdaVM?
) {
viewModel?.handle?.apply {
set(RAZORPAY_STATUS_CODE, code.toString())
set(RAZORPAY_RESPONSE, responseString)
set(RAZORPAY_STATUS_KEY, razorpayStatus)
}
}
}

View File

@@ -9,4 +9,10 @@ package com.navi.ap.common.sdk.handler
import javax.inject.Inject
class SdkHandler @Inject constructor(val finoramicHandler: FinoramicHandler)
class SdkHandler
@Inject
constructor(
val finoramicHandler: FinoramicHandler,
val digioHandler: DigioHandler,
val razorpayHandler: RazorpayHandler
)

View File

@@ -0,0 +1,80 @@
/*
*
* * Copyright © 2020-2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.navi.ap.common.sdk.helper
import android.app.Activity
import android.text.TextUtils
import androidx.appcompat.app.AppCompatActivity
import com.navi.ap.utils.constants.DEV_DIGIO_INIT_FAILURE
import com.navi.ap.utils.constants.DIGIO_PREFERRED_AUTH_TYPE
import com.navi.ap.utils.constants.FAILURE_REASON
import com.navi.ap.utils.logApEvent
import com.navi.base.utils.PROD
import com.navi.common.CommonLibManager
import com.navi.common.utils.log
import `in`.digio.sdk.esign.Digio
import `in`.digio.sdk.gateway.enums.DigioEnvironment
import `in`.digio.sdk.gateway.model.DigioConfig
class DigioHelper {
private var digio: Digio? = null
fun initConfig(activity: Activity) {
init(activity)
}
private fun init(activity: Activity) {
digio = Digio()
val digioConfig = DigioConfig()
if (TextUtils.equals(CommonLibManager.buildConfigDetails.flavor, PROD))
digioConfig.environment = DigioEnvironment.PRODUCTION
else digioConfig.environment = DigioEnvironment.SANDBOX
try {
digio?.init(activity as AppCompatActivity, digioConfig)
} catch (e: Exception) {
e.log()
logApEvent(
Pair(FAILURE_REASON, e.message.orEmpty()),
eventName = DEV_DIGIO_INIT_FAILURE
)
}
}
fun eSign(
documentId: String?,
identifier: String?,
accessToken: String? = null,
logo: String? = null,
preferredAuthtype: String? = null
) {
val digioConfig = DigioConfig()
logo?.let { digioConfig.logo = logo }
if (TextUtils.equals(CommonLibManager.buildConfigDetails.flavor, PROD))
digioConfig.environment = DigioEnvironment.PRODUCTION
else digioConfig.environment = DigioEnvironment.SANDBOX
digio?.setConfig(digioConfig)
val additionalData = getAdditionalData(preferredAuthtype)
accessToken?.let { token ->
additionalData?.let {
digio?.start(documentId.orEmpty(), identifier.orEmpty(), token, additionalData)
} ?: run { digio?.start(documentId.orEmpty(), identifier.orEmpty(), token) }
} ?: run { digio?.start(documentId.orEmpty(), identifier.orEmpty()) }
}
private fun getAdditionalData(
preferredAuthType: String?
): HashMap<String, String>? {
var additionalData: HashMap<String, String>? = null
preferredAuthType?.let {
additionalData = hashMapOf(Pair(DIGIO_PREFERRED_AUTH_TYPE, it))
}
return additionalData
}
}

View File

@@ -12,7 +12,6 @@ import android.os.Bundle
import androidx.activity.compose.setContent
import androidx.activity.viewModels
import androidx.navigation.NavHostController
import com.navi.ap.common.sdk.handler.SdkHandler
import com.navi.ap.common.viewmodel.ApSharedVM
import com.navi.ap.common.viewmodel.LambdaVM
import com.navi.ap.navigator.ApDeepLinkNavigator
@@ -20,7 +19,6 @@ import com.navi.ap.utils.constants.FINORAMIC_USER_ID
import com.navi.ap.utils.handler.UtilsHandler
import com.navi.base.utils.EMPTY
import com.navi.common.model.ModuleNameV2
import com.navi.common.ui.activity.BaseActivity
import com.navi.design.theme.NaviMaterialTheme
import com.ramcosta.composedestinations.rememberNavHostEngine
import dagger.hilt.android.AndroidEntryPoint
@@ -28,16 +26,12 @@ import java.lang.ref.WeakReference
import javax.inject.Inject
@AndroidEntryPoint
class ApplicationPlatformActivity : BaseActivity() {
class ApplicationPlatformActivity : SdkHandlingActivity() {
@Inject lateinit var navigator: ApDeepLinkNavigator
@Inject lateinit var sdkHandler: SdkHandler
@Inject lateinit var utilsHandler: UtilsHandler
private var apScreenVM: WeakReference<LambdaVM>? = null
private val apSharedVM by viewModels<ApSharedVM>()
lateinit var navController: NavHostController
@@ -45,9 +39,15 @@ class ApplicationPlatformActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
super.initContent()
initSdk()
initComposableContent()
}
private fun initSdk() {
sdkHandler.digioHandler.init(this)
sdkHandler.razorpayHandler.init(this)
}
private fun initComposableContent() {
setContent {
NaviMaterialTheme {

View File

@@ -0,0 +1,77 @@
/*
*
* * Copyright © 2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.navi.ap.common.ui
import com.navi.ap.common.sdk.handler.SdkHandler
import com.navi.ap.common.viewmodel.LambdaVM
import com.navi.ap.utils.constants.CODE
import com.navi.ap.utils.constants.DATA
import com.navi.ap.utils.constants.DESCRIPTION
import com.navi.ap.utils.constants.FAILURE
import com.navi.ap.utils.constants.RAZORPAY_DATA
import com.navi.ap.utils.constants.SUCCESS
import com.navi.ap.utils.constants.SUCCESS_CODE
import com.navi.common.ui.activity.BaseActivity
import com.razorpay.PaymentData
import com.razorpay.PaymentResultWithDataListener
import `in`.digio.sdk.esign.DigioResponse
import `in`.digio.sdk.esign.DigioResponseListener
import `in`.digio.sdk.gateway.event.model.GatewayEvent
import org.json.JSONObject
import java.lang.ref.WeakReference
import javax.inject.Inject
abstract class SdkHandlingActivity :
BaseActivity(), DigioResponseListener, PaymentResultWithDataListener {
@Inject lateinit var sdkHandler: SdkHandler
protected var apScreenVM: WeakReference<LambdaVM>? = null
override fun onDigioSuccess(digioResponse: DigioResponse) {
sdkHandler.digioHandler.handleDigioSdkResult(
digioStatus = SUCCESS,
data = digioResponse,
viewModel = apScreenVM?.get()
)
}
override fun onDigioFailure(digioResponse: DigioResponse) {
sdkHandler.digioHandler.handleDigioSdkResult(
digioStatus = FAILURE,
data = digioResponse,
viewModel = apScreenVM?.get()
)
}
override fun onGatewayEvent(gatewayEvent: GatewayEvent) {}
override fun onPaymentSuccess(description: String?, data: PaymentData?) {
sdkHandler.razorpayHandler.handleRazorpaySdkResult(
code = SUCCESS_CODE,
razorpayStatus = SUCCESS,
responseString =
JSONObject(mapOf(Pair(DESCRIPTION, description), Pair(DATA, data))).toString(),
viewModel = apScreenVM?.get()
)
}
override fun onPaymentError(code: Int, description: String?, data: PaymentData?) {
apScreenVM?.get()?.handle?.set(RAZORPAY_DATA, false)
sdkHandler.razorpayHandler.handleRazorpaySdkResult(
code = code,
razorpayStatus = FAILURE,
responseString =
JSONObject(
mapOf(Pair(CODE, code), Pair(DESCRIPTION, description), Pair(DATA, data))
)
.toString(),
viewModel = apScreenVM?.get()
)
}
}

View File

@@ -83,6 +83,7 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
@@ -94,6 +95,9 @@ open class LambdaVM constructor(val repository: LambdaRepository) :
private val _lambdaState = MutableStateFlow<LambdaState>(LambdaState.Nothing)
val lambdaState = _lambdaState.asStateFlow()
var digioCallback: StateFlow<String?>? = null
var razorpayCallback: StateFlow<String?>? = null
private val _clonedScreenDefinitionState = MutableStateFlow<ApScreenDefinitionStructure?>(null)
private var bankDataResponse: BankDataResponse? = null

View File

@@ -7,11 +7,15 @@
package com.navi.ap.di
import com.navi.ap.common.sdk.handler.DigioHandler
import com.navi.ap.common.sdk.handler.FinoramicHandler
import com.navi.ap.common.sdk.handler.RazorpayHandler
import com.navi.ap.common.sdk.handler.SdkHandler
import com.navi.ap.common.sdk.helper.DigioHelper
import com.navi.ap.navigator.ApDeepLinkNavigator
import com.navi.ap.utils.handler.UtilsHandler
import com.navi.common.permission.CommonSmsUtil
import com.navi.payment.razorpay.RazorpayHelper
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
@@ -24,9 +28,24 @@ object ProviderModule {
@Singleton @Provides fun getApNavigator(): ApDeepLinkNavigator = ApDeepLinkNavigator()
@Singleton @Provides fun getFinoramicHandler(): FinoramicHandler = FinoramicHandler()
@Singleton @Provides fun getDigioHelper(): DigioHelper = DigioHelper()
@Singleton @Provides fun getDigioHandler(digioHelper: DigioHelper): DigioHandler = DigioHandler(digioHelper = digioHelper)
@Singleton @Provides fun getRazorpayHelper(): RazorpayHelper = RazorpayHelper()
@Singleton @Provides fun getRazorpayHandler(razorpayHelper: RazorpayHelper): RazorpayHandler = RazorpayHandler(razorpayHelper = razorpayHelper)
@Singleton
@Provides
fun getSdkHandler(): SdkHandler = SdkHandler(finoramicHandler = FinoramicHandler())
fun getSdkHandler(finoramicHandler: FinoramicHandler, digioHandler: DigioHandler, razorpayHandler: RazorpayHandler): SdkHandler =
SdkHandler(
finoramicHandler,
digioHandler,
razorpayHandler
)
@Singleton
@Provides

View File

@@ -17,9 +17,11 @@ import com.navi.ap.network.utils.getNetworkInfo
import com.navi.ap.utils.registerApUiTronDeSerializers
import com.navi.common.CommonLibManager
import com.navi.common.model.NetworkInfo
import com.navi.common.uitron.model.action.ThirdPartySdkAction
import com.navi.common.uitron.model.action.UploadDataConfig
import com.navi.common.uitron.serializer.AnySerializer
import com.navi.common.uitron.serializer.UiTronActionSerializer
import com.navi.common.uitron.serializer.UiTronSDKActionSerializer
import com.navi.common.uitron.serializer.UiTronTriggerApiActionSerializer
import com.navi.common.uitron.serializer.UiTronUploadDataSerializer
import com.navi.naviwidgets.models.NaviWidget
@@ -83,6 +85,7 @@ object APNetworkModule {
VisualTransformationData::class.java,
VisualTransformationDataSerializer()
)
.registerTypeAdapter(ThirdPartySdkAction::class.java, UiTronSDKActionSerializer())
.registerTypeAdapter(Any::class.java, AnySerializer())
.create()

View File

@@ -15,6 +15,7 @@ import com.navi.ap.utils.constants.APP_PLATFORM_SCREEN_ID
import com.navi.ap.utils.constants.APP_PLATFORM_SHORT_FORM
import com.navi.ap.utils.getGsonBuilders
import com.navi.common.CommonLibManager
import com.navi.common.model.ModuleName
import com.navi.common.model.NetworkInfo
import com.navi.common.network.ApiConstants
import com.navi.common.network.getGlobalErrorType
@@ -34,7 +35,7 @@ fun getNetworkInfo(timeOutInSeconds: Long = ApiConstants.API_CONNECT_TIMEOUT_VAL
baseUrl = CommonLibManager.buildConfigDetails.baseUrl,
appVersionName = CommonLibManager.buildConfigDetails.appVersionName,
appVersionCode = CommonLibManager.buildConfigDetails.appVersionCode,
moduleName = null,
moduleName = ModuleName.AP,
timeoutInSec = timeOutInSeconds
)
}

View File

@@ -33,13 +33,6 @@ const val DEFAULT_SOURCE_SCREEN = SUPER_APP_HOME
const val SCREEN_VISIBILITY = "screenVisibility"
const val BOTTOM_SHEET_VISIBILITY = "bottomSheetVisibility"
const val BOTTOMSHEET = "BOTTOMSHEET"
const val FINORAMIC = "FINORAMIC"
const val FINORAMIC_USER_ID = "user_id"
const val FINORAMIC_USER_ID_KEY = "finoramicUserId"
const val FINORAMIC_LOGIN_STATUS = "login"
const val FINORAMIC_LOGIN_STATUS_KEY = "finoramicLoginStatus"
const val FINORAMIC_EMAIL = "email"
const val FINORAMIC_EMAIL_KEY = "finoramicEmail"
const val SUCCESS = "success"
const val CUSTOMER = "customer"
const val APPLICANT_TYPE = "APPLICANT_TYPE"
@@ -72,4 +65,6 @@ val noLoaderScreenTypes: MutableSet<String> = mutableSetOf(
ScreenType.LOADER_SCREEN.name,
ScreenType.ERROR_TRANSIENT_SCREEN.name,
ScreenType.SUCCESS_TRANSIENT_SCREEN.name
)
)
const val SUCCESS_CODE = 200
const val FAILURE = "failure"

View File

@@ -1,3 +1,10 @@
/*
*
* * Copyright © 2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.navi.ap.utils.constants
const val DEV_NETWORK_FAILURE_RESPONSE = "dev_network_failure_response"
@@ -8,3 +15,9 @@ const val DEV_NETWORK_SSL_HANDSHAKE_EXCEPTION = "dev_network_ssl_handshake_excep
const val DEV_NETWORK_API_CODE_ERROR = "dev_network_api_code_error"
const val JOURNEY_SOURCE = "journey_source"
const val SOURCE_AP = "AP"
// DIGIO
const val DEV_DIGIO_INIT_FAILURE = "dev_digio_init_failure"
const val FAILURE_REASON = "reason"
const val DEV_DIGIO_E_SIGN = "dev_digio_e_sign"
const val DEV_RAZORPAY_START_PAYMENT = "dev_razorpay_start_payment"

View File

@@ -0,0 +1,26 @@
/*
*
* * Copyright © 2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.navi.ap.utils.constants
const val FINORAMIC_USER_ID = "user_id"
const val FINORAMIC_USER_ID_KEY = "finoramicUserId"
const val FINORAMIC_LOGIN_STATUS = "login"
const val FINORAMIC_LOGIN_STATUS_KEY = "finoramicLoginStatus"
const val FINORAMIC_EMAIL = "email"
const val FINORAMIC_EMAIL_KEY = "finoramicEmail"
const val DIGIO_STATUS_KEY = "digioStatus"
const val DIGIO_STATUS_CODE = "digioStatusCode"
const val DIGIO_RESPONSE = "digioResponseString"
const val RAZORPAY_STATUS_KEY = "razorpayStatus"
const val RAZORPAY_STATUS_CODE = "razorpayStatusCode"
const val RAZORPAY_RESPONSE = "razorpayResponseString"
const val RAZORPAY_DATA = "razorpayData"
const val DIGIO_PREFERRED_AUTH_TYPE = "dg_preferred_auth_type"
const val CODE = "code"
const val DATA = "data"
const val DESCRIPTION = "description"

View File

@@ -10,8 +10,10 @@ package com.navi.common.uitron.deserializer
import com.google.gson.JsonDeserializationContext
import com.google.gson.JsonDeserializer
import com.google.gson.JsonElement
import com.navi.common.uitron.model.action.DigioSDKAction
import com.navi.common.uitron.model.action.FinarkeinSDKAction
import com.navi.common.uitron.model.action.FinoramicSDKAction
import com.navi.common.uitron.model.action.RazorpaySDKAction
import com.navi.common.uitron.model.action.SDKType
import com.navi.common.uitron.model.action.ThirdPartySdkAction
import java.lang.reflect.Type
@@ -26,8 +28,13 @@ class UiTronSDKActionDeserializer : JsonDeserializer<ThirdPartySdkAction> {
val jsonObject = it.asJsonObject
val type = jsonObject["sdkName"] ?: return null
return when (type.asString) {
SDKType.FINARKEIN.name -> context?.deserialize(jsonObject, FinarkeinSDKAction::class.java)
SDKType.FINORAMIC.name -> context?.deserialize(jsonObject, FinoramicSDKAction::class.java)
SDKType.FINARKEIN.name ->
context?.deserialize(jsonObject, FinarkeinSDKAction::class.java)
SDKType.FINORAMIC.name ->
context?.deserialize(jsonObject, FinoramicSDKAction::class.java)
SDKType.DIGIO.name -> context?.deserialize(jsonObject, DigioSDKAction::class.java)
SDKType.RAZORPAY.name ->
context?.deserialize(jsonObject, RazorpaySDKAction::class.java)
else -> null
}
}

View File

@@ -30,9 +30,30 @@ open class ThirdPartySdkAction(
class FinarkeinSDKAction() : ThirdPartySdkAction()
class FinoramicSDKAction(): ThirdPartySdkAction()
class FinoramicSDKAction() : ThirdPartySdkAction()
data class DigioSDKAction(
@SerializedName("mandateId") val mandateId: String? = null,
@SerializedName("accessToken") val accessToken: String? = null,
@SerializedName("logo") val logo: String? = null,
@SerializedName("redirectUrl") val redirectUrl: String? = null,
@SerializedName("preferredAuthType") val preferredAuthType: String? = null,
) : ThirdPartySdkAction()
data class RazorpaySDKAction(
@SerializedName("razorpayData") val razorpayData: RazorpayData? = null,
@SerializedName("accountKey") val accountKey: String? = null,
) : ThirdPartySdkAction()
data class RazorpayData(
@SerializedName("mandateId") val mandateId: String? = null,
@SerializedName("razorpayCustomerId") val razorpayCustomerId: String? = null,
@SerializedName("recurring") val recurring: Int? = 1 // default value for razorpay mandate
)
enum class SDKType {
FINORAMIC,
FINARKEIN
FINARKEIN,
DIGIO,
RAZORPAY
}

View File

@@ -0,0 +1,39 @@
/*
*
* * Copyright © 2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.navi.common.uitron.serializer
import com.google.gson.JsonElement
import com.google.gson.JsonSerializationContext
import com.google.gson.JsonSerializer
import com.navi.common.uitron.model.action.DigioSDKAction
import com.navi.common.uitron.model.action.FinarkeinSDKAction
import com.navi.common.uitron.model.action.FinoramicSDKAction
import com.navi.common.uitron.model.action.RazorpaySDKAction
import com.navi.common.uitron.model.action.SDKType
import com.navi.common.uitron.model.action.ThirdPartySdkAction
import java.lang.reflect.Type
class UiTronSDKActionSerializer : JsonSerializer<ThirdPartySdkAction> {
override fun serialize(
src: ThirdPartySdkAction?,
typeOfSrc: Type?,
context: JsonSerializationContext?
): JsonElement? {
return when (src?.sdkName) {
SDKType.FINARKEIN.name ->
context?.serialize(src as FinarkeinSDKAction, FinarkeinSDKAction::class.java)
SDKType.FINORAMIC.name ->
context?.serialize(src as FinoramicSDKAction, FinoramicSDKAction::class.java)
SDKType.DIGIO.name ->
context?.serialize(src as DigioSDKAction, DigioSDKAction::class.java)
SDKType.RAZORPAY.name ->
context?.serialize(src as RazorpaySDKAction, RazorpaySDKAction::class.java)
else -> null
}
}
}