Eagle · Pagamentos
SoftPOS · Tap on Phone

Referência da API

Tipos, métodos, estados e erros do SDK SoftPOS (Android nativo)

Em construção

Esta seção documenta um SDK ainda em desenvolvimento. A API pode mudar, os pacotes ainda não estão publicados e os fluxos descritos não foram homologados em produção.

Referência do SDK nativo (com.eagleix.softpos). Os wrappers React Native e Flutter expõem os mesmos conceitos com nomes equivalentes.

Eagle

Fachada global. Guarda a sessão corrente e delega a ela.

MembroAssinaturaDescrição
initialize(Context, EagleConfig) -> EagleSessionCria e registra a sessão. Chame uma vez por processo
stateStateFlow<EagleState>Estado observável. Requer initialize
isMSitefInstalled() -> BooleanPresença do app m-SiTef
isAndroidVersionSupported() -> Booleantrue em Android 12 (API 31) ou superior
playStoreIntent() -> IntentIntent para a página do m-SiTef na loja
activateSellersuspend (String) -> ActivationResultAtiva o vendedor com o sellerToken
requireSession() -> EagleSessionSessão corrente; lança EagleError.NotInitialized

EagleSession

Uma sessão: configuração, estado e o vendedor ativo. Existe como instância — e não só como singleton — para que testes possam injetar um backend falso sem desfazer estado global.

val session = EagleSession(context, config)
val payments = EaglePayments(activity, session)

Expõe os mesmos métodos de Eagle, mais activation: ActivationResult? — o vendedor ativo, ou null antes de activateSeller.

EagleConfig

EagleConfig(
    apiKey: String,                        // credencial do tenant; não pode ser vazia
    environment: EagleEnvironment,         // SANDBOX | PRODUCTION
    backend: EagleBackend,                 // HttpEagleBackend ou implementação própria
    logger: EagleLogger = EagleLogger.NONE,
)

EaglePayments

EaglePayments(
    activity: ComponentActivity,
    session: EagleSession = Eagle.requireSession(),
)
MétodoAssinatura
startSalesuspend (SaleRequest) -> SaleResult

Instancie no onCreate da Activity. O registro do resultado da Intent precisa acontecer antes de a Activity ficar RESUMED.

startSale executa, em ordem: valida pré-condições → busca a configuração da transação no backend → dispara a Intent do m-SiTef → interpreta o retorno → relata a venda ao backend → devolve o resultado.

SaleRequest

CampoTipoPadrãoDescrição
amountInCentsLong—Valor em centavos; obrigatoriamente maior que zero (5000 = R$ 50,00)
methodPaymentMethod—Método de pagamento
installmentsInt1Parcelas; só tem efeito em CREDIT. Mínimo 1
receiptNumberString?nullNúmero do cupom fiscal (até 20 caracteres)
operatorString?nullCódigo do operador (até 20 caracteres)
collectTimeoutSecondsInt60Timeout de coleta; 0 ou negativo desliga

amountInCents <= 0 ou installments < 1 lançam IllegalArgumentException na construção — validação acontece antes de qualquer chamada de rede.

PaymentMethod

ValorModalidade m-SiTefDescrição
MENU0O m-SiTef exibe o menu para o operador escolher. O valor não é enviado
DEBIT2Débito à vista
CREDIT3Crédito; parcelado quando installments > 1
PIX_WALLETS122Pix e carteiras digitais (QR Code exibido pelo m-SiTef)

SaleResult

Cada campo corresponde a um extra devolvido pelo m-SiTef:

CampoExtra m-SiTefDescrição
approved—true apenas quando a Activity retorna RESULT_OK e CODRESP == 0
codRespCODRESPCódigo interpretado; ver códigos de resposta
transactionCodeCODTRANSCódigo da transação
installmentTypeTIPO_PARCTipo de parcelamento
nsuSitefNSU_SITEFNSU do SiTef
nsuHostNSU_HOSTNSU do autorizador
authorizationCodeCOD_AUTORIZACAOCódigo de autorização
cardBrandBANDEIRABandeira do cartão
acquirerNetworkREDE_AUTRede autorizadora
installmentsNUM_PARCParcelas efetivamente aplicadas
merchantReceiptVIA_ESTABELECIMENTOVia do estabelecimento
customerReceiptVIA_CLIENTEVia do cliente
confirmationDataCOMP_DADOS_CONFDados de confirmação TEF
rawtodosMapa cru dos extras, para casos avançados

As vias (customerReceipt, merchantReceipt) podem conter dados do portador. Exiba-as, mas não as registre em log nem as persista sem avaliar o escopo PCI.

ActivationResult

CampoTipoDescrição
sellerIdStringIdentificador do vendedor na Eagle
posIdStringVínculo vendedor ↔ PDV (sub-estabelecimento); identifica as vendas
subEstablishmentRefString?Referência do sub-estabelecimento na adquirente
tlsRegisteredBooleanSe o registro TLS do terminal já foi concluído

As credenciais SiTef em si não são expostas ao app.

EagleState

Emitido por Eagle.state para o app desenhar a própria UI.

EstadoSignificado
IdleNada em andamento
MSitefMissingm-SiTef ausente; ofereça o deep link da loja
ActivationPendingAtivação do vendedor em andamento
ProcessingVenda em andamento; o m-SiTef está em primeiro plano
Approved(result)Venda aprovada
Denied(result)Venda não aprovada
Failed(error)Falha fora do fluxo transacional

EagleError

Hierarquia selada de exceções. Reservadas para falhas fora do fluxo transacional — recusa e cancelamento voltam como SaleResult.

ErroQuando acontece
NotInitializedUso antes de Eagle.initialize
MSitefNotInstalledApp m-SiTef ausente no aparelho
UnsupportedAndroidVersion(current)Android abaixo de 12
SellerNotActivatedVenda antes de activateSeller
Network(cause)Falha de comunicação com o backend Eagle
Backend(statusCode, detail)Backend Eagle respondeu erro de negócio
Unexpected(cause)Falha não classificada

EagleLogger

interface EagleLogger {
    fun debug(message: String)
    fun info(message: String)
    fun error(message: String, throwable: Throwable? = null)

    companion object { val NONE: EagleLogger }
}

EagleLogger.NONE é o padrão: silencioso.

TransactionConfig

Resolvida pelo backend a cada venda e usada apenas para montar a Intent. O app não a constrói nem deve cacheá-la; está aqui para referência de quem implementa um EagleBackend próprio.

CampoDescrição
empresaSitefCódigo da loja no SiTef
enderecoSitefHost e porta do servidor SiTef
cnpjCpfCNPJ/CPF do estabelecimento
comExterna"4" (TLS Fiserv), obrigatório no Tap on Phone
tokenRegistroTlsToken de registro TLS do terminal
cnpjAutomacaoCNPJ da automação
cnpjFacilitadorCNPJ do facilitador
brandingLogo e cores exibidos pelo m-SiTef

On this page