package spay.sdk.api
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
/**
* Класс с возможными ошибками SDK
*/
@Parcelize
sealed class MerchantError(
open val description: String? = null
) : Parcelable {
/**
* Ошибка, если не переданы необходимые данные
*/
data class RequiredDataNotSent(override val description: String) : MerchantError(description)
/**
* Ошибка при взаимодействии с SPayApi
*/
data class SPayApiError(override val description: String) : MerchantError(description)
/**
* Ошибка, возникающая если время ожидания ответа от сервера привысило заданный лимит
*/
data class TimeoutException(override val description: String) : MerchantError(description)
/**
* Ошибка при отсутствии подключния к интернету
*/
data class NoInternetConnection(override val description: String = "Отсутствует подключение к интернету") : MerchantError(description)
/**
* Ошибка при оплате бонусами Спасибо
*/
data class PayWithBonusesError(override val description: String) : MerchantError(description)
/**
* Ошибка при оплате по связке
*/
data class PayWithBindingError(override val description: String) : MerchantError(description)
/**
* Непредвиденная ошибка при работе SPaySDK
*/
data class UnexpectedError(override val description: String) : MerchantError(description)
/**
* Ошибка при проверке готовности к проведению оплаты
*/
data class IsReadyCheckHasNotBeenCalled(override val description: String = "Перед проведением оплаты необходимо вызвать метод isReadyForSPaySdk()") : MerchantError(description)
/**
* Ошибка внутренних компонентов SPaySdk
*/
data class InnerSdkComponentsError(override val description: String = "Ошибка внутренних компонентов SPaySdk") : MerchantError(description)
}
/** Объект результата инициализации SPaySdk */
sealed class InitializationResult {
/** SPaySdk инициализирована успешно */
object Success : InitializationResult()
/**
* Произошел сбой при получении или обработке конфига
*
* @param message сообщение об ошибке
*/
data class ConfigError(val message: String) : InitializationResult()
}
package spay.sdk.api
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
/**
* Класс обёртка для предоставления результата оплаты
* */
@Parcelize
sealed class PaymentResult : Parcelable {
/**
* @object [Success] возвращается в случае, если оплата была произведена успешно
*
* @param localSessionId [String] localSessionId в рамках операции
*/
data class Success(val localSessionId: String) : PaymentResult()
/**
* @class [Error] возвращается в случае, если во время выполнения операции оплаты произошла ошибка
*
* @param localSessionId [String] localSessionId в рамках операции
* @param merchantError - объект класса, описывающий ошибки для предоставления мерчанту
* @see MerchantError
*/
data class Error(val localSessionId: String, val merchantError: MerchantError? = null) : PaymentResult()
/**
* @object [Processing] возвращается в случае, если оплата находится в процессе выполнения
*
* @param localSessionId [String] localSessionId в рамках операции
*/
data class Processing(val localSessionId: String) : PaymentResult()
/**
* @object [Cancel] возвращается в случае, если пользователь прервал процесс оплаты
*
* @param localSessionId [String] localSessionId в рамках операции
*/
data class Cancel(val localSessionId: String) : PaymentResult()
}
package spay.sdk.api
/**
* Класс обёртка для результата запроса на получение PaymentToken
* */
sealed class PaymentTokenResult {
/**
* @class [Success] возвращается в случае, если токен был успешно получен
*
* @param paymentToken - платежный токен
*/
data class Success(val paymentToken: String) : PaymentTokenResult()
/**
* @class [Error] возвращается в случае, если при получении токена произошла ошибка
*
* @param merchantError [MerchantError] - ошибка
*/
data class Error(val merchantError: MerchantError) : PaymentTokenResult()
}
/**
* Структура состояния готовности SDK к работе. Результат вызова метода isReadyForSPaySdk
*/
sealed class SdkReadyCheckResult {
/**
* Состояние SDK готово к использованию
*/
object Ready : SdkReadyCheckResult()
/**
* Состояние SDK не готово к использованию
*
* @param cause [String] Причина не готовности SDK
*/
data class NotReady(val cause: String) : SdkReadyCheckResult()
}