Referência de API

Modelos de dados, eventos, status e erros do SDK Tap to Pay.

Modelos, eventos e códigos de status do SDK Tap to Pay. Os nomes são os mesmos nas duas plataformas. No iOS, objetos Kotlin são acessados por .shared (por exemplo, TapFeeScreens.shared).

Métodos do TapStoneCo

MétodoDescrição
setup(data: SetupData)Ativa o aparelho e cria a sessão ativa do lojista. Devolve um TapActivationResult. suspend no Android, async no iOS
pay(input: TransactionData)Inicia uma venda para o lojista da sessão ativa e devolve o fluxo de eventos (TapFlow de TransactionEvent)
deactivate()Desativa o aparelho. A próxima venda exige novo setup()
cancelTransaction()Obsoleto. Para cancelar, cancele a coleta do pay()

SetupData — entrada do setup()

CampoTipoDescrição
documentStringCNPJ ou CPF do lojista
activationCodeStringCódigo gerado pelo backend do parceiro na API CMA
paymentProfileIdStringPerfil de pagamento do lojista
accountIdStringConta do lojista na Stone
stoneCodeStringCódigo de afiliação do lojista
credentialCredentialCredenciais Transacionais

Credential

CampoTipoDescrição
clientIdStringclient_id das Credenciais Transacionais
clientSecretStringclient_secret das Credenciais Transacionais

TapActivationResult — resultado do setup()

CampoTipoDescrição
stoneStatusStoneStatus"0000" (StoneStatus.SUCCESS) quando a ativação deu certo; outro código em caso de falha
stoneCodeString?Stone Code da ativação

TransactionData — entrada do pay()

CampoTipoObrig.Descrição
amountIntSimValor em centavos (1000 = R$ 10,00)
paymentMethodPaymentMethodSimCREDIT, DEBIT ou VOUCHER (Android) · .credit, .debit ou .voucher (iOS)
installmentsIntSimNúmero de parcelas. 1 = à vista; maior que 1 = parcelado lojista (só crédito). Débito e voucher: sempre 1
softDescriptorStringSimTexto na fatura do cliente. Passe "" se não usar

A forma de pagamento e as parcelas finais são escolhidas pelo lojista na tela do SDK. Toda venda é autorização com captura. O lojista da venda é o da sessão ativa; não há campo de dono da transação.

Importante

O TransactionData não tem o campo metadata nesta versão do SDK. Para conciliar, guarde o transactionId e o initiatorTransactionKey do TransactionResult junto do pedido no seu sistema.

TransactionEvent — resultado do pay()

O SDK exibe todas as telas da venda, então o app só precisa tratar o OnResult, que é sempre o último evento do pay(). O fluxo também emite eventos internos de progresso, que podem ser ignorados.

OnResult — resultado final

CampoTipoDescrição
resultStoneStatusStatus final. Sucesso é "0000"
transactionResultTransactionResult?Dados da venda. Pode ser nulo se a venda falhou antes da autorização
vendorResultString?Detalhe técnico para diagnóstico. Registre em log; não mostre ao lojista

TapFeeScreens — avisos opcionais da venda

PropriedadeTipoDescrição
onPaymentMethodConfirmed(TransactionData) -> UnitChamado quando o lojista confirma a forma de pagamento, antes da aproximação. Traz o TransactionData final; com repasse da taxa, o amount é maior que o enviado no pay()
onSaleFinished(TapSaleExit) -> UnitChamado quando o lojista sai da venda aprovada, logo antes do OnResult de sucesso
TapSaleExit (Kotlin)SwiftSignificado
NEW_SALE.newSaleO lojista tocou em "Fazer nova venda"
CLOSE.closeO lojista fechou a venda aprovada

TransactionResult

CampoTipoDescrição
transactionIdString?Identificador da venda na Stone. Guarde para consulta e conciliação
initiatorTransactionKeyString?Chave da venda gerada na origem. Guarde para conciliação
acquirerTransactionIdString?Identificador da venda no adquirente
localTransactionIdStringIdentificador gerado no aparelho
operationIdString?Identificador da operação
statusString?Status da venda
responseCodeString?Código de resposta da autorização
messageString?Mensagem do resultado
authorizationCodeString?Código de autorização da bandeira (vendas aprovadas)
cardBrandString?Bandeira do cartão
cardLastDigitsString?Últimos dígitos do cartão
applicationIdentifierString?AID da aplicação do cartão
isPinlessBoolean?true quando a venda foi feita sem PIN
merchantNameString?Nome do estabelecimento
statementDescriptorString?Descrição na fatura do cliente
createdAt / updatedAtString?Datas da venda (ISO 8601)

StoneStatus

StoneStatus traz code (String), message e detail. Dois status são iguais quando têm o mesmo code.

ConstanteCódigoUso
StoneStatus.SUCCESS (Swift: ErrorStoneStatus.companion.SUCCESS)0000Operação concluída
StoneStatus.UNKNOWN_ERRORUNKNOWNErro sem classificação; veja o vendorResult

Use o code para decidir o que fazer e a message para exibir ao lojista.

Faixas de código

FaixaOrigem
3xxAtivação do aparelho
1000 – 10xxRecusa do emissor do cartão
5xxxConectividade
7xxxLeitura do cartão, aparelho e processamento
91xxAutorizador

Códigos mais comuns

CódigoNomeO que fazer
302FAILED_ACTIVATE_TERMINALAtivação falhou. Peça um código novo e repita o setup(). Se persistir, confira credenciais, consentimento e ambiente
305TERMINAL_ALREADY_ACTIVATEDO aparelho já está ativado
307ACCOUNT_LINKING_CANCELLEDiOS: o lojista não aceitou os termos da Apple
309ACCOUNT_LINKING_REQUIRES_ICLOUD_SIGN_INiOS: conecte o iCloud no aparelho
312DEVICE_BANNEDAparelho bloqueado. Fale com a Stone
314INVALID_READER_TOKENiOS: no sandbox, o iPhone não está no ambiente de teste da Apple (veja iOS)
315MERCHANT_BLOCKEDLojista bloqueado. Fale com a Stone
316MODEL_NOT_SUPPORTEDModelo de aparelho não suportado
331 / 332LOCATION_PERMISSION_MISSING / LOCATION_DISABLEDAndroid: peça a permissão de localização ou peça para ligar a localização
5024NO_NETWORK_AVAILABLESem internet
7011OPERATION_CANCELLED_BY_USERVenda cancelada. Nenhuma ação
7013 / 7419NFC_NOT_TURNED_ON_ERROR / NFC_DISABLEDLigue o NFC
7143CTLS_MULTI_CARD_ERRORMais de um cartão no campo de leitura
7410DEACTIVATEDO aparelho foi desativado. Refaça o setup()
7412 / 7413TOTAL_ELAPSED_TIMEOUT / CARD_READ_TIMEOUTTempo esgotado. Tente de novo
7417INSECURE_DEVICEO aparelho não passou na validação de segurança (por exemplo, root ou opções de depuração)
7418DEVICE_WITHOUT_NFCAparelho sem NFC

Tratamento de erros — Setup

CenárioSolução
Credenciais inválidasValidar client_id / client_secret transacionais com a Stone
activationCode expiradoSolicitar novo código ao backend
Consentimento não aceitoAguardar o aceite do lojista antes de gerar o activationCode
Ambiente trocadoConferir se a variante do SDK e o environment são do mesmo ambiente
Dispositivo incompatívelTestar em dispositivo com NFC (Android) ou iPhone compatível (iOS)
Sem internetVerificar conectividade e repetir

Sessão ausente

Se o pay() for chamado sem sessão ativa, o fluxo termina com OnResult de erro. Peça um código novo ao backend, faça o setup() e repita a venda.

Referência rápida

TipoUso
TapStoneCo / TapStoneCo.Builder (Swift: TapStoneCoBuilder)Instância do SDK
SetupData e CredentialEntrada do setup()
TapActivationResultResultado do setup()
TransactionDataEntrada do pay()
TransactionEvent.OnResultResultado do pay()
TapFeeScreens e TapSaleExitAvisos opcionais da venda
TransactionResultDados da venda
StoneStatus (Swift: ErrorStoneStatus)Status de qualquer operação

Veja também


Integração: Tap to Pay para Terceiros
Etapa 6 de 7