All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ru.tinkoff.acquiring.sdk.responses.GetTerminalPayMethodsResponse.kt Maven / Gradle / Ivy

There is a newer version: 4.2.1
Show newest version
package ru.tinkoff.acquiring.sdk.responses

import com.google.gson.JsonDeserializationContext
import com.google.gson.JsonDeserializer
import com.google.gson.JsonElement
import com.google.gson.annotations.JsonAdapter
import com.google.gson.annotations.SerializedName
import com.google.gson.reflect.TypeToken
import ru.tinkoff.acquiring.sdk.AcquiringSdk
import java.io.Serializable
import java.lang.reflect.Type


/**
 * Ответ на запрос /v2/GetTerminalPayMethods
 *
 * @param terminalInfo -  Характеристики терминала
 *
 *
 * Created by Ivan Golovachev
 */
class GetTerminalPayMethodsResponse(

    @SerializedName("TerminalInfo")
    val terminalInfo: TerminalInfo? = null

) : AcquiringResponse()


/**
 *
 * @param terminalInfo      - Характеристики терминала
 * @param paymethods        - Перечень доступных методов оплаты
 * @param addCardScheme     - Признак возможности сохранения карт
 * @param tokenRequired     - Признак необходимости подписания токеном
 * @param initTokenRequired - Признак необходимости подписания токеном запроса /init
 *
 *
 * Created by Ivan Golovachev
 */
class TerminalInfo(

    @JsonAdapter(PaymethodDataListDeserializer::class)
    @SerializedName("Paymethods")
    val paymethods: List = emptyList(),

    @SerializedName("AddCardScheme")
    val addCardScheme: Boolean = false,

    @SerializedName("TokenRequired")
    val tokenRequired: Boolean = true,

    @SerializedName("InitTokenRequired")
    val initTokenRequired: Boolean = false
) : Serializable

/**
 *  @param params - Перечень параметров подключения в формате ключ-значение
 */
class PaymethodData(

    @SerializedName("PayMethod")
    val paymethod: Paymethod? = null,

    @SerializedName("Params")
    val params: Map = emptyMap()
) : Serializable

enum class Paymethod : Serializable {
    @SerializedName("MirPay")
    MirPay,

    @SerializedName("TinkoffPay")
    TinkoffPay,

    @SerializedName("SBP")
    SBP,

    @SerializedName("Cards")
    Cards,
}

/**
 * Парсер возвращает список информации о поддерживаемых способах оплаты
 * ([ru.tinkoff.acquiring.sdk.responses.Paymethod]), другие способы оплаты игнорируются.
 */
internal class PaymethodDataListDeserializer : JsonDeserializer> {
    override fun deserialize(
        json: JsonElement,
        typeOfT: Type,
        context: JsonDeserializationContext
    ): List {
        val result = mutableListOf()
        try {
            json.asJsonArray.forEach { item ->
                val data = context.deserialize(
                    item,
                    TypeToken.get(PaymethodData::class.java).type
                )
                if (data.paymethod == null) {
                    AcquiringSdk.log("Unsupported pay method $item")
                } else {
                    result.add(data)
                }
            }
        } catch (e: Exception) {
            AcquiringSdk.log(e)
        }
        return result
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy