O PosTransactionProvider é o provedor de transação utilizado ao efetuar pagamentos utilizando um POS Android.

Para passar uma transação, a primeira coisa a ser feita é instanciar um objeto do tipo TransactionObject

final TransactionObject transaction = new TransactionObject();

📘

Veja os atributos deste objeto na seção TransactionObject

E popular os seguintes atributos do TransactionObject:

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).

shortName
opcional

String

Nome de exibição no extrato do cliente (máximo de 14 caracteres). Deixar em branco caso queira que apareça o nome do estabelecimento cadastrado na Stone

capture
obrigatório

Boolean

Define se a transação será realizada com captura automática ou não.

subMerchantCategoryCode
opcional

String

MCC do sub-merchant que efetuou a transação.
Atributo obrigatório para aplicações de subadquirentes

subMerchantAddress
opcional

String

Logradouro do sub-merchant.
Atributo obrigatório para aplicações de subadquirentes

subMerchantCity
opcional

String

Cidade do sub-merchant.
Atributo obrigatório para aplicações de subadquirentes

subMerchantPostalAddress
opcional

String

CEP do sub-merchant.
Atributo obrigatório para aplicações de subadquirentes

subMerchantRegisteredIdentifier
opcional

String

Identificador do sub-merchant no Sistema do Subadquirente.
Atributo obrigatório para aplicações de subadquirentes

subMerchantTaxIdentificationNumber
opcional

String

CNPJ do sub-merchant (apenas números).
Atributo obrigatório para aplicações de subadquirentes

📘

(¹) instalmentTransactionEnum e typeOfTransactionEnum

Os valores possíveis para estes atributos estão na seção Transaction Enums.

Exemplo:

//Valor da transação em centavos
transaction.setAmount("10");//Valor da transação em centavos

transaction.setRequestId(null);
/* 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. */
transaction.setInitiatorTransactionKey("SEU_IDENTIFICADOR_UNICO_AQUI");

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

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

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

//Cidade do sub-merchant
stoneTransaction.setSubMerchantCity("city") 
  
//CEP do sub-merchant (Apenas * números)  
stoneTransaction.setSubMerchantPostalAddress("00000000") 
  
// Identificador do sub-merchant  
stoneTransaction.setSubMerchantRegisteredIdentifier("00000000")
  
// Identificador do sub-merchant
stoneTransaction.setSubMerchantTaxIdentificationNumber("33368443000199")

Após instanciar e popular o objeto TransactionObject, você poderá passar o mesmo para o PosTransactionProvider, que será o responsável por enviar a transação para o autorizador e trabalhar com a inserção e atualização no TransactionDAO.

Exemplo:

//Processo para envio da transação
// Stone.getUserModel(0) é o usuário atual do aplicativo, que está na posição zero.
final PosTransactionProvider provider = new PosTransactionProvider("SUA_ACTIVITY_AQUI", transaction, "USUARIO_DO_APLICATIVO_AQUI");

provider.setConnectionCallback(new StoneCallbackInterface() {
  public void onSuccess() {
    // Transação enviada com sucesso e salva no banco. Para acessar, use o TransactionDAO
  }
  public void onError() {
    // Erro na transação
  }
});
provider.execute();

Lembrando que o PosTransactionProvider segue a mesma estrutura do ActiveApplicationProvider e os demais. Esse provider pede uma Activity, o TransactionObject que foi criado anteriormente e o usuário do aplicativo.

Diferentemente do Provider de Pinpad, o POS exige um conjunto mais robusto de tratamento de eventos e portanto a "DefaultUI" é suportada.
É preciso criar as telas respodendo aos Actions, que podem ocorrer durante a transação.

Após a execução do provider, a sua aplicação receberá uma chamada no método onSuccess() ou onError().

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

provider.getTransactionStatus();

📘

Status da Transação

Todos os status possíveis se encontram na seção Status da Transação.

Em caso de REJECTED e DECLINED, você pode capturar a mensagem do autorizador, utilizando o método:

provider.getMessageFromAuthorize();

Mensagens como, por exemplo: “Saldo insuficiente”, “Cartão inválido”, “Violação de segurança”, etc.

📘

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.