---
title: "Provider de Transação"
url: "https://devcenter.stone.com.br/sdk-android-provedor-de-transacao"
image: "https://devcenter.stone.com.br/_og/d/c_Ocean.takumi,title_~UHJvdmlkZXIgZGUgVHJhbnNhw6fDo28,props_eyJ0aGVtZSI6eyJtb2RlIjoibGlnaHQiLCJjb2xvcnMiOnsicHJpbWFyeSI6IiMzMEE2NkQifX19,p_Ii9zZGstYW5kcm9pZC1wcm92ZWRvci1kZS10cmFuc2FjYW8i,s_SXSNqV4lduXCcjRU.png"
---

# Provider de Transação

Esse provider é utilizado apenas para transações com Pinpad

Tipos de Transação

Para saber mais sobre tipos de transação acesse a seção [Transações Financeiras](https://devcenter.stone.com.br/sdk-android-transacoes-financeiras)

Transações em Ambiente de Integração

Nosso Sandbox foi preparado para lhe ajudar a validar todos os cenários possíveis de respostas das bandeiras. As transações recebem respostas correspondentes ao valor dos centavos instanciados.

Exemplo: Transações com valor acima de R$1,00 tem código de resposta 0000. Transações de R$0,01 tem código de resposta 1007.

Todos os possíveis códigos de retorno deste ambiente e seus significados encontram-se na seção [Códigos de Retorno do Sandbox](https://devcenter.stone.com.br/sdk-android-retorno-sandbox).

Enviar transações com o nosso SDK é simples e rápido.

Primeiro você deve instanciar um objeto do tipo _TransactionObject_:

```java
final TransactionObject transaction = new TransactionObject();
```

E popular os seguintes atributos:

| Nome                                                                             | Tipo        | Descrição                                                                        |
| :------------------------------------------------------------------------------- | :---------- | :------------------------------------------------------------------------------- |
| amount obrigatório                                                               | String      | Valor da transação em centavos.                                                  |
| requestId opcional                                                               | String      | ID do pedido.                                                                    |
| initiatorTransactionKey obrigatório                                              | String      | É um identificador único da transação definido pela aplicação que inicia a transação. O SDK possui um padrão próprio para gerar este identificador e usará esse padrão se um identificador não for definido. Caso você queira passar o seu próprio identificador, certifique-se que ele será sempre único para todos os seus clientes. |
| emailClient opcional                                                             | EmailClient | Seu email de noReply para envio do comprovante eletrônico.                       |
| instalmentTransactionEnum (¹) obrigatório                                        | Enum        | Quantidade de parcelas.                                                          |
| typeOfTransactionEnum (¹) obrigatório                                            | Enum        | Tipo da transação (débito, crédito ou voucher).                                  |
| pinpadObject obrigatório                                                         |             | O pinpad que você deseja passar a transação.                                     |
| shortName (condicional)- Parceiros: opcional- Subadquirentes: Obrigatório        | String      | Nome fantasia do estabelecimento¹ (aparecerá na fatura do portador). Deve obrigatoriamente corresponder ao principal nome utilizado pelo estabelecimento. Campo obrigatório para subadquirentes, porém não restritivo à elas. ¹ Se o estabelecimento comercial faz parte do segmento de casas de câmbio, para transações da bandeira Mastercard será necessário identificar na tagShrtNm da autorização. Exemplo: nomedomerchant*cambio. |
| capture obrigatório                                                              | Boolean     | Define se a transação será realizada com captura automática ou não.              |
| SubMerchantCategoryCode (condicional)- Parceiros: Não devem utilizar- Subadquirentes: Obrigatório | String      | MCC do sub-merchant que efetuou a transação. Atributo obrigatório para aplicações de subadquirentes. |
| subMerchantAddress (condicional)- Parceiros: Não devem utilizar- Subadquirentes: Obrigatório | String      | Logradouro do sub-merchant. Atributo obrigatório para aplicações de subadquirentes. |
| SubMerchantCity (condicional)- Parceiros: Não devem utilizar- Subadquirentes: Obrigatório | String      | Cidade do sub-merchant. Atributo obrigatório para aplicações de subadquirentes.  |
| SubMerchantPostalAddress (condicional)- Parceiros: Não devem utilizar- Subadquirentes: Obrigatório | String      | CEP do sub-merchant. Atributo obrigatório para aplicações de subadquirentes.     |
| SubMerchantRegisteredIdentifier (condicional)- Parceiros: Não devem utilizar- Subadquirentes: Obrigatório | String      | Identificador do sub-merchant no Sistema do Subadquirente. Atributo obrigatório para aplicações de subadquirentes. |
| SubMerchantTaxIdentificationNumber (condicional)- Parceiros: Não devem utilizar- Subadquirentes: Obrigatório | String      | CNPJ do sub-merchant (apenas números). Atributo obrigatório para aplicações de subadquirentes. |
| SubMerchantStreetName (condicional)- Parceiros: Não devem utilizar- Subadquirentes: Obrigatório | String      | Rua/Avenida do sub-merchant. Atributo obrigatório para aplicações de subadquirentes. |
| SubMerchantLegalName (condicional)- Parceiros: Não devem utilizar- Subadquirentes: Obrigatório | String      | Razão social do sub-merchant. Atributo obrigatório para aplicações de subadquirentes.NÃO é a informação que aparece na fatura do portador. Veja o campo shortName. |
| SubMerchantBuildingNumber (condicional)- Parceiros: Não devem utilizar- Subadquirentes: Obrigatório | String      | Número do prédio do sub-merchant. Atributo obrigatório para aplicações de subadquirentes. |
| SubMerchantCountryCode (condicional)- Parceiros: Não devem utilizar- Subadquirentes: Obrigatório | String      | Código do país do sub-merchant (ex: 076 para Brasil). Atributo obrigatório para aplicações de subadquirentes. |
| SubMerchantState (condicional)- Parceiros: Não devem utilizar- Subadquirentes: Obrigatório | String      | UF do estado do sub-merchant. Atributo obrigatório para aplicações de subadquirentes. |
| SubMerchantNeighborhood (condicional)- Parceiros: Não devem utilizar- Subadquirentes: Obrigatório | String      | Bairro do sub-merchant. Atributo obrigatório para aplicações de subadquirentes.  |
| SubMerchantEmail (condicional)- Parceiros: Não devem utilizar- Subadquirentes: Obrigatório | String      | Email de contato do sub-merchant. Atributo obrigatório para aplicações de subadquirentes. |
| SubMerchantPhone (condicional)- Parceiros: Não devem utilizar- Subadquirentes: Obrigatório | String      | Telefone de contato do sub-merchant. Atributo obrigatório para aplicações de subadquirentes. |
| SubMerchantTaxIdentificationType (condicional)- Parceiros: Não devem utilizar- Subadquirentes: Obrigatório | String      | Tipo de documento fiscal do sub-merchant (ex: CNPJ, CPF). Atributo obrigatório para aplicações de subadquirentes. |
| SubMerchantSiteUrl (condicional)- Parceiros: Não devem utilizar- Subadquirentes: Obrigatório | String      | URL do site do sub-merchant. Atributo obrigatório para aplicações de subadquirentes. |
| SubMerchantPaymentGatewayId (condicional)- Parceiros: Não devem utilizar- Subadquirentes: Obrigatório | String      | ID do gateway de pagamento do sub-merchant. Atributo obrigatório para aplicações de subadquirentes. |

\_Sub-Merchant\_

No caso de aplicações de _subadquirentes_ o Sub-Merchant é o EC afiliado no sistema da subadquirente.

No caso dos _outros parceiros_ o Sub-Merchant é o EC afiliado na Stone.

Os campos de sub-merchant são opcionais, porém em caso de sub-adquirente a passagem desses campos é obrigatória.

(¹) \_instalmentTransactionEnum\_ e \_typeOfTransactionEnum\_

Os valores possíveis para estes atributos estão na seção [Transaction Enums](https://devcenter.stone.com.br/sdk-android-transaction-enums).

```java
//Definir o valor da transação em centavos
transactionObject.setAmount("10");

/* AVISO IMPORTANTE: Não é recomendado alterar o campo abaixo do ITK,
 * pois ele gera um valor único. Contudo, caso seja necessário
 * faça conforme a linha a seguir. */
transactionObject.setInitiatorTransactionKey("SEU_IDENTIFICADOR_UNICO");

//Informar a quantidade de parcelas, veja a tabela de valores para o InstalmentTransactionEnum
transactionObject.setInstalmentTransaction(InstalmentTransactionEnum.ONE_INSTALMENT);

//Definir forma de pagamento
transactionObject.setTypeOfTransaction(TypeOfTransactionEnum.CREDIT);

//Define se transação será feita com captura ou não.
transactionObject.setCapture(true);

//Informações do Sub-Merchant (obrigatório para subadquirentes)
transactionObject.setSubMerchantCity("São Paulo");
transactionObject.setSubMerchantPostalAddress("01310-100");
transactionObject.setSubMerchantStreetName("Avenida Paulista");
transactionObject.setSubMerchantTaxIdentificationNumber("12345678000190");
transactionObject.setSubMerchantRegisteredIdentifier("MERCHANT123");
transactionObject.setSubMerchantLegalName("Stark Corporation Ltda");
transactionObject.setSubMerchantBuildingNumber("1000");
transactionObject.setSubMerchantCountryCode("076");
transactionObject.setSubMerchantState("SP");
transactionObject.setSubMerchantNeighborhood("Bela Vista");
transactionObject.setSubMerchantEmail("contato@starkcorp.com.br");
transactionObject.setSubMerchantPhone("11987654321");
transactionObject.setSubMerchantTaxIdentificationType("CNPJ");
transactionObject.setSubMerchantSiteUrl("www.starkcorp.com.br");
transactionObject.setSubMerchantPaymentGatewayId("GATEWAY123");
```

Após instanciar e popular o objeto _TransactionObject_, você poderá passar o mesmo para o _TransactionProvider_, junto com os seguintes parâmetros:

-   UserModel: Objeto que representa o Stone Code ativado
-   PinpadObject: Objeto que representa o pinpad que irá passar a transação

```java
// Processo para envio da transação

final TransactionProvider provider = new TransactionProvider("CONTEXT", transactionObject, "USER_MODEL", "PINPAD_OBJECT");

provider.setDialogTitle("Aguarde"); // Título do Dialog
provider.setDialogMessage("Enviando..."); // Mensagem do Dialog

provider.setConnectionCallback(new StoneActionCallback() {
  @Override
  public void onSuccess() {
    // Transação enviada com sucesso e salva no banco. Para acessar, use o TransactionDAO
  }
  @Override
  public void onStatusChanged(Action action) {
      // Nesse callback é retornado o próximo passo a ser executado no fluxo de pagamento
  }
  @Override
  public void onError() {
    // Erro na transação
  }
});
provider.execute();
```

```kotlin
// Processo para envio da transação
val provider = TransactionProvider("CONTEXT", transactionObject, "USER_MODEL", "PINPAD_OBJECT")

  provider.useDefaultUI(true)
  provider.dialogTitle = "Aguarde" // Título do Dialog
  provider.dialogMessage = "Enviando..." // Mensagem do Dialog

  provider.connectionCallback= object : StoneActionCallback {
    override fun onSuccess() {
      // Transação enviada com sucesso e salva no banco. Para acessar, use o TransactionDAO
    }

    override fun onStatusChanged(action: Action) {
      // Nesse callback é retornado o próximo passo a ser executado no fluxo de pagamento
    }

    override fun onError() {
      // Erro na transação
    }
  }

provider.execute()
```

Após a execução do provider, a sua aplicação receberá um Callback nos métodos _onSuccess()_ ou _onError()_.

Para ter acesso ao status da transação, você deve utilizar o método:

```java
provider.getTransactionStatus();
```

Status da Transação

Todos os status possíveis se encontram na seção [Status da Transação](https://devcenter.stone.com.br/sdk-android-status-da-transacao).

Em caso de **REJECTED** e **DECLINED**, você pode ver a mensagem de retorno da Stone com o método:

```java
provider.getMessageFromAuthorize()
```

Códigos de Retorno Autorizador

Todos os códigos possíveis retornados pelo autorizador Stone em produção se encontram na seção [Códigos de Retorno do Autorizador Stone](https://devcenter.stone.com.br/sdk-android-codigos-retorno-autorizador).

---

**Jornada: [Integrar pelos Providers](https://devcenter.stone.com.br/sdk-android-overview-da-sdk)**  
Etapa 16 de 18

[**Etapa anterior**Pinpad: Provider de Conexão com Pinpad Bluetooth](https://devcenter.stone.com.br/sdk-android-provedor-conexao-pinpad-bluetooth)[**Próxima etapa**Pinpad: Provider de Display](https://devcenter.stone.com.br/sdk-android-provedor-de-display-1)

Siga a Stone nas redes sociais

[](https://www.facebook.com/stonepagamentos/)[](https://x.com/sejastone/)[](https://www.instagram.com/stone/)[](https://br.linkedin.com/company/stone-co)[](https://www.youtube.com/channel/UCk4L4JykgoDkN8YeuxkNqIQ)

© Stone Instituição de Pagamento S.A. CNPJ 16.501.555/0001-57

Av. Rebouças, 2880, 4º andar, Pinheiros, CEP 05.402-500 – São Paulo/SP

Instituição de pagamento autorizada pelo Banco Central do Brasil, nas modalidades de credenciadora e emissora de moeda eletrônica.