Modelos e Estruturas de Dados
Referência das estruturas públicas do SDK (com.tupifintech.apossdk.sdk.api.model, salvo indicação). Valores monetários são sempre Long em centavos.
PaymentResult
Resultado de uma venda, captura ou estorno. Retornado por onTransactionCompleted e onRefundCompleted.
data class PaymentResult(
var status: PaymentStatus,
var errorCode: SdkErrorCode? = null,
var displayMessage: String? = null,
val slip: String? = null,
val receipt: TransactionReceipt? = null, // null em DECLINED/ERROR
val requiresCardRemoval: Boolean = false, // true se o cartão foi lido pelo chip (ICC)
val voucherBalance: Long? = null
) {
enum class PaymentStatus { APPROVED, DECLINED, ERROR }
}
| Campo | Tipo | Descrição |
|---|---|---|
status | PaymentStatus | APPROVED, DECLINED ou ERROR |
errorCode | SdkErrorCode? | Código do erro quando não aprovado |
displayMessage | String? | Mensagem amigável pronta para exibição |
slip | String? | Texto do comprovante para impressão |
receipt | TransactionReceipt? | Dados estruturados (apenas quando aprovado) |
requiresCardRemoval | Boolean | true sempre que o cartão foi lido pelo chip, em qualquer status: chame removeCard() e peça a retirada |
voucherBalance | Long? | Saldo do voucher, quando a adquirente informa. Vem também em negadas. null significa não informado |
TransactionReceipt
Comprovante estruturado da transação aprovada.
data class TransactionReceipt(
val transactionId: String,
val amount: Long,
val feeAmount: Long? = null, // valor de juros, quando houver
val transactionType: TransactionType,
val paymentMethod: PaymentMethod,
val authCode: String,
val installments: Int? = null,
val installmentValue: Long? = null,
val timestamp: Date = Date(),
val merchantId: String? = null,
val merchantName: String? = null,
val merchantCnpj: String? = null,
val merchantDocument: String,
val merchantAddress: String,
val merchantIdentifier: String? = null, // código EC no adquirente
val cardBrand: String? = null,
val cardLastDigits: String? = null,
val cardFirstDigits: String? = null, // BIN (6 primeiros dígitos); o número completo nunca sai do SDK
val cvmMethod: CvmMethod? = null,
val arqc: String? = null,
val aid: String? = null,
val serialNumber: String? = null,
val terminalId: String? = null, // TID do adquirente
val signature: Boolean? = null,
val cardHolderName: String? = null,
val captureMethod: String? = null, // "CHIP", "CLESS" (aproximação), "TARJA"
val nsuLocal: String? = null, // NSU do autorizador
val codVenda: String? = null, // STAN do gateway
val originalAmount: Long? = null, // ex.: captura de pré-autorização com valor diferente
val voucherBalance: Long? = null,
val acquirerName: String? = null // adquirente que processou (ex.: "pagseguro")
)
nsuLocalé o NSU do autorizador, o que concilia com o portal e o adquirente. O nome foi mantido por compatibilidade: não é um contador local.codVendaé o STAN do gateway (código da venda), impresso na via do estabelecimento.acquirerNameevoucherBalancenullsignificam "não informado".
Enums
PaymentMethod
Serializado para a API conforme o @SerializedName.
enum class PaymentMethod { DEBIT, CREDIT, PIX, CASH, VOUCHER, UNKNOWN }
| Valor | API | Descrição |
|---|---|---|
DEBIT | debit_card | Débito (com PIN) |
CREDIT | credit_card | Crédito (à vista/parcelado) |
PIX | pix | PIX (use createPixPayment) |
CASH | cash | Dinheiro |
VOUCHER | voucher | Vale-refeição e vale-alimentação (sempre à vista) |
UNKNOWN | unknown | Não mapeado |
TransactionType
enum class TransactionType {
AUTHORIZATION, VOID, PRE_AUTHORIZE, CONFIRM_PRE_AUTHORIZED,
TRANSACTION_CONFIRM, REVERSAL, ADVICE, PIXQR_CODE,
PIX_PAYMENT_STATUS_CHECK, UNKNOWN
}
| Valor | API | Descrição |
|---|---|---|
AUTHORIZATION | authorization | Autorização (venda) |
VOID | void | Cancelamento/estorno |
PRE_AUTHORIZE | pre_authorization | Pré-autorização (reserva) |
CONFIRM_PRE_AUTHORIZED | capture | Captura de pré-autorização |
TRANSACTION_CONFIRM | confirmation | Confirmação de transação |
REVERSAL | reversal | Reversão (desfazimento) |
ADVICE | advice | Advice |
PIXQR_CODE | pix_qr_code_generate | Geração de QR PIX |
PIX_PAYMENT_STATUS_CHECK | pix_payment_status_check | Consulta de status PIX |
UNKNOWN | — | Não mapeado |
Em createPayment, use AUTHORIZATION para venda e PRE_AUTHORIZE para pré-autorização. Os demais tipos aparecem em consultas e comprovantes.
CardReadType
Retornado por waitForCard().
enum class CardReadType { CHIP, CONTACTLESS, MAGSTRIPE, UNKNOWN }
CvmMethod
com.tupifintech.apossdk.domain.model.CvmMethod — método de verificação do portador.
enum class CvmMethod(val displayName: String) {
NO_CVM("Sem verificação"),
SIGNATURE("Assinatura"),
ONLINE_PIN("Senha online"),
OFFLINE_PIN_CLEAR("Senha offline"),
OFFLINE_PIN_ENCRYPTED("Senha offline criptografada"),
CONTACTLESS("Aproximação"),
UNKNOWN("Desconhecido")
}
InputCode
Tipo de dado solicitado em onRequestUserInput.
enum class InputCode { CVV, LAST_4_DIGITS }
NotificationType
Categoria da mensagem em onUiNotify. ERROR é reservado: o SDK não o emite hoje.
enum class NotificationType { INFO, ERROR, WAITING_CARD, PROCESSING }
Transação
TransactionMetadata
Dados do app que seguem com a transação até o gateway. O SDK não os lê. Veja Configuração.
@JvmInline
value class TransactionMetadata(val values: Map<String, String>) {
companion object {
const val MAX_ENTRIES = 20
const val MAX_KEY_LENGTH = 40
const val MAX_VALUE_LENGTH = 256
const val MAX_TOTAL_BYTES = 4_096
val EMPTY: TransactionMetadata
}
}
Chaves em [A-Za-z0-9_.-]. Fora dos limites, ou com valor que pareça número de cartão, o construtor lança IllegalArgumentException. Não envie dado de portador.
CardReadTimeouts
Tempo de espera do cartão, aplicado com posPinpad.setCardReadTimeouts(...). Veja Configuração.
data class CardReadTimeouts(
val perAttemptSeconds: Int = 30, // 1..300
val maxAttempts: Int = 3, // 1..10
val totalSeconds: Int = 60 // perAttemptSeconds..300
)
totalSeconds é o teto da captura no estorno e na pré-autorização. Na venda valem só perAttemptSeconds e maxAttempts.
Impressão
PrintAttributes
data class PrintAttributes(
val align: Align = Align.LEFT,
val textSize: Int = 24,
val typeface: Typeface = Typeface.NORMAL,
val marginLeft: Int = 1,
val lineSpace: Int = 10, // mínimo aceito pela Positivo (~2mm)
val weight: Int = 10 // divisão proporcional em printColumns (ignorado em printText)
)
enum class Align(val value: Int) { CENTER(0), LEFT(1), RIGHT(2) }
enum class Typeface(val value: Int) { NORMAL(0), BOLD(1), SERIF(2), ARIAL(3) }
Align e Typeface são do SDK (com.tupifintech.apossdk.sdk.api.model), não de android.graphics.
Configuração e Inicialização
TerminalConfigResponse
Personalização do terminal por parceiro, retornada por getTerminalConfig().
data class TerminalConfigResponse(
val partner: PartnerIdentity,
val scope: OrganizationScope,
val registrationSchema: RegistrationSchema? = null,
val dashboardButtons: Map<DashboardFeature, DashboardButtonConfig>? = null,
val legalDocuments: LegalDocuments,
val receiptCustom: ReceiptCustom? = null,
val resourceId: String? = null, // identificador da configuração
val updatedAt: String? = null // data da última alteração
)
data class PartnerIdentity(
val brandName: String, val companyName: String,
val logoUrl: String, val logoPrintUrl: String? = null, val logoNegativeUrl: String? = null,
val supportPhone: String, val website: String,
val primaryColor: String, // #RRGGBB
val uiAlias: String? = null,
val fontFamily: String? = null // "roboto", "inter", "open_sans", "poppins"
)
data class OrganizationScope( // ao menos 1 não-nulo; viram headers nas chamadas
val acquirerId: String? = null, // X-Acquirer-Id
val subAcquirerId: String? = null, // X-Subacquirer-Id
val independentSalesOrganizationId: String? = null // X-Independent-Sales-Organization-Id
)
data class LegalDocuments(
val privacyPolicyUrl: String? = null,
val termsOfUseUrl: String? = null
)
RegistrationSchema
Define os campos da tela de registro. O app renderiza cada campo aplicando máscara/validação conforme type.
data class RegistrationSchema(
val title: String,
val submitLabel: String,
val fields: List<RegistrationSchemaField>
)
data class RegistrationSchemaField(
val id: String, // chave usada no payload de register (ex.: "cnpj", "token")
val type: String, // "EMAIL", "PASSWORD", "CNPJ", "TOKEN", ...
val label: String? = null,
val required: Boolean? = false,
val minLength: Int? = null,
val maxLength: Int? = null
)
DashboardFeature / DashboardButtonConfig
enum class DashboardFeature {
PAYMENT, REFUND, PRE_AUTH, CONFIRM_PRE_AUTH, REPRINT, SALES_HISTORY
}
data class DashboardButtonConfig(
val visible: Boolean = true,
val requiresPassword: Boolean = false
)
ReceiptCustom
data class ReceiptCustom(
val title: String? = null,
val description: String? = null,
val ouvidoriaPhone: String? = null // SAC/Ouvidoria (requisito BACEN)
)
AuthenticationRequest / AuthenticationResponse
data class AuthenticationRequest(val identifier: String, val password: String) // identifier: e-mail ou CNPJ
data class AuthenticationResponse(
val user: AuthenticatedUser? = null,
val expiresIn: Int? = null,
val issuedAt: String? = null,
val error: AuthError? = null,
val success: Boolean = (error == null) && (user != null)
)
data class AuthenticatedUser(val id: String, val name: String, val email: String, val role: String)
data class AuthError(val code: String, val message: String, val details: String? = null)
RegistrationResult
data class RegistrationResult(
val token: String? = null,
val refreshToken: String? = null,
val user: AuthenticatedUser? = null,
val terminalId: String? = null,
val merchantId: String? = null,
val merchantName: String? = null,
val acquirerId: String? = null,
val subacquirerId: String? = null,
val independentSalesOrganizationId: String? = null,
val error: AuthError? = null // recusa com mensagem pronta para exibir
) {
val success: Boolean get() = error == null && (terminalId != null || token != null)
}
TerminalInitializationRequest / Response
data class TerminalInitializationRequest(val merchantId: String)
data class TerminalInitializationResponse(
val terminalId: String? = null,
val success: Boolean = true,
val merchant: MerchantInfo? = null
)
MerchantInfo
Dados do estabelecimento (header, recibo). accessPassword é sensível — nunca logar.
data class MerchantInfo(
val merchantId: String? = null,
val name: String? = null, val corporateName: String? = null,
val taxId: String? = null, val personType: String? = null, val mcc: String? = null,
val address: String? = null, val city: String? = null, val state: String? = null,
val postalCode: String? = null, val phone: String? = null,
val accessPassword: String? = null, // senha numérica de acesso a operações restritas
val accessibilityKeyboard: Boolean = false, // true: exibir o teclado de senha de acessibilidade
val voucherEnabled: Boolean = false // voucher habilitado para o estabelecimento
)
accessibilityKeyboard: quandotrue, exiba o teclado de senha de acessibilidade (4 colunas, compatível com a película tátil da Positivo). Afeta só a tela de senha do cartão.voucherEnabled: para decidir se oferece voucher, usegetAvailableProducts(PaymentMethod.VOUCHER).
Terminal e Dispositivo
DeviceInfo
Retornado por getDeviceInfo().
data class DeviceInfo(
val manufacturer: String,
val hardwareModel: String,
val firmwareVersion: String,
val applicationVersion: String,
val specificationVersion: String,
val serialNo: String,
val deviceInterfaces: DeviceInterfacesInfo,
val ctlsVersion: String, val masterCtlsVersion: String, val visaCtlsVersion: String,
val amexCtlsVersion: String, val discoverCtlsVersion: String,
val jcbCtlsVersion: String, val unionPayCtlsVersion: String,
val soVersion: String,
val acquirerName: String, val acquirerVersion: String, val acquirerProprietaryInfo: String
) {
data class DeviceInterfacesInfo(
val hasCtlsInterface: Boolean,
val hasChipInterface: Boolean,
val hasMagstripeInterface: Boolean
)
}
TablesInfo
Retornado por getTablesInfo(); null se as tabelas nunca foram carregadas.
data class TablesInfo(val versions: List<TableVersionInfo>, val lastUpdateAtMs: Long?)
data class TableVersionInfo(
val acquirerName: String,
val tableVersion: String,
val keyTableVersion: String? = null,
val normalizedHash: String? = null
)
TransactionLimits
Limites por operação, retornado por getTransactionLimits(). Campos com 0 significam "sem limite": compare só quando o limite for maior que zero.
data class TransactionLimits(
val featureCode: Int, // código da operação no gateway (ex.: 1 = crédito à vista, 3 = crédito sem juros)
val transactionName: String, // nome da operação no gateway (ex.: "CREDITO A VISTA")
val minTransactionValueCents: Long, val maxTransactionValueCents: Long,
val minInstallments: Int, val maxInstallments: Int,
val minInstallmentValueCents: Long, val maxInstallmentValueCents: Long
)
ProductInfo
Retornado por getAvailableProducts(...).
data class ProductInfo(val name: String, val productCode: Int, val aidCode: Int? = null)
SimInfo
Retornado por getSimInfo().
data class SimInfo(val iccid: String?, val operatorName: String?, val transport: NetworkTransport)
enum class NetworkTransport { WIFI, MOBILE, ETHERNET, OTHER, NONE }
HealthCheckResult
data class HealthCheckResult(
val isConnected: Boolean,
val hasNetworkConnection: Boolean,
val isApiReachable: Boolean,
val latencyMs: Long?,
val errorMessage: String?
)
PixQrCodeData
data class PixQrCodeData(
val qrCode: String,
val transactionId: String,
val expiresInSeconds: Int? = null
)
Consulta de Transações
QueryFilterBuilder
Builder para os filtros das consultas. Padrão da API: <campo>_<operador>=<valor> (para EQ, apenas <campo>=<valor>). Valores nulos ou em branco são ignorados.
val filters = QueryFilterBuilder()
.pagination(cursor = null, limit = 20, preloads = true)
.add(FilterField.STATUS, FilterOperator.EQ, "approved")
.add(FilterField.CREATED_AT, FilterOperator.GE, "2026-10-01")
.addIn(FilterField.CARD_BRAND, listOf("visa", "mastercard"))
.addContains(FilterField.AUTHORIZATION_CODE, "12")
val copia = filters.copyOf() // cópia independente
FilterOperator | Significado |
|---|---|
EQ, NE | Igual, diferente |
GT, LT, GE, LE | Maior, menor, maior ou igual, menor ou igual |
LK | Contém (LIKE) |
IN | Lista de valores |
Campos (FilterField): STATUS, PAYMENT_METHOD, ACQUIRER, CREATED_AT, UPDATED_AT, TERMINAL_ID, CARD_BRAND, CARD_FIRST_DIGITS, CARD_LAST_DIGITS, TYPE, SYSTEM_TRACE_AUDIT_NUMBER, RETRIEVAL_REFERENCE_NUMBER, AUTHORIZATION_CODE, GATEWAY_TRANSACTION_ID.
TransactionSummaryResponse / TransactionSummary
data class TransactionSummaryResponse(
val metadata: Metadata, // nextCursor, previousCursor, limit
val links: Links?, // first
val data: List<TransactionSummary>
) {
val isEmpty: Boolean
val isNotEmpty: Boolean
val count: Int
}
data class TransactionCycleListResponse(
val metadata: Metadata,
val data: List<TransactionCycle>
)
data class TransactionSummary(
val id: String,
val acquirerId: String?,
val createdAt: String, val updatedAt: String?, // ISO-8601
val gatewayTransactionId: String?,
val acquirer: String?, val currency: String?,
val paymentMethod: PaymentMethod,
val status: String, // "approved", "denied", "pre_approved", "refunded", "partial_refunded", "voided", "pending", "expired", "failed", ...
val amount: Amount, // Amount(amount, scale)
val installments: Int? = null,
val installmentsInterest: Boolean? = null,
val card: TransactionCard?,
val payer: Payer? = null, // PIX
val endToEndId: String? = null,
val acquirerTerminalIdentifier: String? = null,
val terminalId: String? = null,
val acquirerMerchantIdentifier: String? = null,
val gatewayStan: String? = null,
val productAid: String? = null,
val cycles: List<TransactionCycle>? = null, // com preloads = true ou em getTransactionSummary
val transactionType: TransactionType? = null
)
Atalhos de TransactionSummary:
| Grupo | Atalhos |
|---|---|
| Valor | amountInCents, amountAsDouble, refundedAmountInCents (soma dos estornos aprovados) |
| Cartão | cardBrand, cardFirstDigits, cardLastDigits, cardHolderName |
| PIX | payerName, payerTaxId, payerBankName |
| Status | isApproved, isDenied, isRefunded, isVoided, isPartialRefunded, isPreApproved, isPending, isExpired, isFailed, isUnknown |
| Ciclos | nsu, authorizationCode, rrn (no PIX, o end-to-end), displayNsu (o NSU a exibir), compactNsu, refundNsu, deviceSerialNumber, hasCycles, getCycleByType(type) |
isDeclined e isPartialRefund estão obsoletos: use isDenied e isPartialRefunded.
data class Amount(val amount: Long, val scale: Int) {
fun toDouble(): Double // Amount(15000, 2).toDouble() == 150.0
fun toCents(): Long
}
data class TransactionCard(
val brand: String?, val firstDigits: String?, val lastDigits: String?,
val holderName: String?, val expirationMonth: Int?, val expirationYear: Int?,
val arqc: String? = null, val entryMode: String? = null
)
data class TransactionCycle(
val type: String?, // authorization, pre_authorization, refund, void, ...
val authorizationCode: String?,
val systemTraceAuditNumber: String?, // NSU (STAN)
val retrievalReferenceNumber: String?, // RRN (no PIX, o end-to-end)
val processedAt: String?, // ISO-8601
val status: String? = null,
val amount: Amount? = null,
val transactionSummaryId: String? = null, // id do TransactionSummary a que o ciclo pertence
val device: TransactionDevice? = null // serialNumber, manufacturer, model, communicationType
)
data class Payer(val name: String?, val taxId: String?, val bankName: String?)
TransactionStats
Totais do conjunto filtrado, retornados por getTransactionStats.
data class TransactionStats(
val approvedAmount: Amount, // soma das aprovadas pelo valor original, sem descontar estornos
val netAmount: Amount? = null,
val count: Long
)
Usuários Locais
| Modelo | Descrição |
|---|---|
LocalUserInfo | id, name, cpf, profile. Nunca traz senha nem hash |
LocalUserProfile | SUPERVISOR, OPERATOR |
LocalUserResult<T> | Success(value) ou Failure(error) |
LocalUserError | INVALID_DATA, INVALID_PASSWORD, DUPLICATE_CPF, NOT_FOUND, LAST_SUPERVISOR, SUPERVISOR_LIMIT, SUPERVISOR_REQUIRED, STORAGE_UNAVAILABLE |
LegacyLocalUser | id, name, cpf, profile, sha256Hex. Só para importLegacy (exige @OptIn(LegacyLocalUserImport::class)) |
Constantes: LOCAL_USER_PASSWORD_LENGTH = 6 e MAX_LOCAL_SUPERVISORS = 10. Veja Configuração.
MtlsCertificate
Certificado cliente opcional para PosPinpad.create(...). Veja Configuração.
MtlsCertificate.fromAssets(context, certificateChainAsset, privateKeyAsset)
MtlsCertificate.fromPem(certificateChain: String, privateKey: String)
MtlsCertificate.fromPem(certificateChain: ByteArray, privateKey: ByteArray)
SdkErrorCode
com.tupifintech.apossdk.sdk.model.SdkErrorCode — catálogo de erros recebido em onAppError(error, message) e PaymentResult.errorCode. Cada valor tem um code: Int. Os códigos PP_* (0 a 155 e PP_UNKNOWN = 1000) vêm do pinpad; UNKNOWN_ERROR (-1) e os códigos de 1001 em diante são do SDK. Para título e mensagem a partir do código, use ErrorMessageProvider (veja Callbacks).
Erros do pinpad
| Código | Valor | Descrição |
|---|---|---|
PP_OK | 0 | Sucesso |
PP_PROCESSING | 1 | Em processamento |
PP_NOTIFY | 2 | Notificação |
PP_SECURITYERR | 3 | Erro de segurança |
PP_SECPACKETERR | 9 | Erro de segurança no pacote |
PP_INVCALL | 10 | Chamada inválida |
PP_INVPARM | 11 | Parâmetro inválido |
PP_TIMEOUT | 12 | Tempo esgotado |
PP_CANCEL | 13 | Operação cancelada |
PP_ALREADYCONNECTED | 14 | Conexão já estabelecida |
PP_NOTCONNECTED | 15 | Conexão não estabelecida |
PP_EXECERR | 16 | Erro de execução |
PP_NOPARAM | 19 | Parâmetro obrigatório não informado |
PP_TABEXP | 20 | Tabela desatualizada |
PP_TABERR | 21 | Erro no carregamento de tabela |
PP_RSPERR | 33 | Resposta em formato inválido |
PP_MCDATAERR | 41 | Erro na leitura da tarja |
PP_ERRPIN | 42 | Erro na captura da senha |
PP_CARDREMOVED | 43 | Cartão removido |
PP_PINBUSY | 44 | Terminal ocupado |
PP_DUMBCARD | 60 | Cartão ausente ou sem resposta |
PP_ERRCARD | 61 | Erro de comunicação com o chip |
PP_CARDINV | 62 | Cartão inválido |
PP_CARDBLOCKED | 63 | Cartão bloqueado |
PP_CARDNAUTH | 64 | Cartão não autorizado |
PP_CARDEXPIRED | 65 | Cartão expirado |
PP_CARDINVALIDAT | 67 | Cartão inválido |
PP_CARDPROBLEMS | 68 | Falha ao processar o cartão |
PP_CARDINVDATA | 69 | Dados do cartão inválidos |
PP_CARDAPPNAV | 70 | Sem aplicação válida no chip: use a tarja |
PP_CARDAPPNAUT | 71 | Aplicação do cartão não autorizada |
PP_ERRFALLBACK | 76 | Use a tarja magnética (fallback) |
PP_CTLSMULTIPLE | 80 | Mais de um cartão por aproximação detectado |
PP_CTLSCOMMERR | 81 | Erro de comunicação na aproximação |
PP_CTLSINVALIDAT | 82 | Cartão inválido na aproximação |
PP_CTLSPROBLEMS | 83 | Falha ao processar o cartão na aproximação |
PP_CTLSAPPNAV | 84 | Sem aplicação para aproximação: use o chip |
PP_CTLSAPPNAUT | 85 | Aplicação não autorizada na aproximação |
PP_CTLSEXTCVM | 86 | Confirme no dispositivo do portador e aproxime de novo |
PP_CTLSINTERFACECHANGE | 87 | Use o chip ou passe o cartão |
PP_DEVICEFAULT | 152 | Falha no dispositivo |
PP_ABORTED | 154 | Operação abortada |
PP_ERRKEY | 155 | Chave do adquirente ausente no terminal. Acione o suporte |
PP_UNKNOWN | 1000 | Erro desconhecido do pinpad |
Erros do SDK
| Código | Valor | Descrição |
|---|---|---|
UNKNOWN_ERROR | -1 | Erro desconhecido |
NO_CONTEXT | 1001 | Contexto de transação indisponível |
TERMINAL_NOT_INITIALIZED | 1002 | Operação chamada antes de terminalInitialization() |
TERMINAL_INITIALIZATION_FAILED | 1003 | Falha na inicialização do terminal |
INVALID_CARD_ENTRYMODE | 1004 | Modo de entrada do cartão não suportado |
MAGNETIC_STRIPE_WITH_CHIP | 1005 | Cartão com chip passado na tarja |
PRODUCT_NOT_FOUND | 1006 | Produto do cartão não aceito: tente outro meio de pagamento ou cartão |
INVALID_SELECTION | 1007 | Seleção inválida |
INVALID_LAST_DIGITS | 1008 | Últimos dígitos não conferem |
INVALID_CVV | 1009 | CVV inválido |
ENCRYPTION_ERROR | 1010 | Erro de criptografia |
PIN_ERROR | 1011 | Erro na senha |
GO_ON_CHIP_DENIED | 1012 | O chip recusou a transação |
FINISH_CHIP_DENIED | 1013 | O chip recusou a finalização |
CACHE_INVALID | 1014 | Cache interno inválido |
GATEWAY_UNAUTHORIZED | 1015 | Terminal não autorizado no gateway |
GATEWAY_INVALID_REQUEST | 1016 | Requisição recusada pelo gateway |
GATEWAY_NETWORK_ERROR | 1017 | Falha de rede na comunicação com o gateway |
NO_PRE_AUTHORIZATIONS | 1018 | Nenhuma pré-autorização disponível |
CONNECTION_FAILED | 1019 | Falha na conexão com o pinpad |
DISCONNECTION_FAILED | 1020 | Falha na desconexão do pinpad |
NO_TRANSACTIONS_FOUND | 1021 | Nenhuma pré-autorização para o cartão lido |
PRE_AUTH_NOT_FOUND_FOR_CARD | 1022 | A pré-autorização informada não é deste cartão |
GATEWAY_TIMEOUT | 1023 | O gateway não respondeu a tempo |
TRANSACTION_UNDONE | 1024 | Transação desfeita |
PIN_BLOCKED | 1025 | Senha offline bloqueada por excesso de tentativas |
AMOUNT_BELOW_MINIMUM | 1026 | Valor abaixo do mínimo da carga |
AMOUNT_ABOVE_MAXIMUM | 1027 | Valor acima do máximo da carga |
INSTALLMENTS_EXCEEDED | 1028 | Parcelas acima do permitido |
INSTALLMENT_VALUE_BELOW_MINIMUM | 1029 | Valor da parcela abaixo do mínimo |
CONTACTLESS_LIMIT_EXCEEDED | 1030 | Acima do limite por aproximação: insira o cartão |
MAGNETIC_FALLBACK_NOT_ALLOWED | 1031 | Fallback para tarja não permitido |
INVALID_PAN_LENGTH | 1032 | Número do cartão com tamanho inválido |
INVALID_TRACK_DATA | 1033 | Leitura de tarja incompleta: passe o cartão de novo |
NO_TRANSACTIONS_FOR_METHOD | 1034 | O cartão tem vendas no dia, mas de outro tipo |
GATEWAY_SERVER_ERROR | 1035 | Erro do servidor do gateway (HTTP 5xx) |
Exceções
Pacote com.tupifintech.apossdk.sdk.exceptions.
| Exceção | Quando |
|---|---|
SdkException | Base de todas as exceções abaixo |
TerminalActivationException | Falha no registro do terminal junto ao gateway |
TerminalConfigException | Falha em getTerminalConfig |
PartnerNotFoundException | Subclasse de TerminalConfigException: parceiro inexistente no ambiente. Expõe slug. Erro permanente |
ServerErrorException | Erro do servidor, com statusCode. Reservada: a versão atual não a lança |
NetworkException | Falha de rede. Reservada: a versão atual não a lança |
Além delas, IllegalStateException é lançada em createPayment/createPixPayment sem terminal inicializado e em getDeviceInfo() antes de o pinpad conectar, e IllegalArgumentException nos construtores de TransactionMetadata e CardReadTimeouts fora dos limites.