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 | String | Valor da transação em centavos. |
requestId | String | ID do pedido |
initiatorTransactionKey | 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 | EmailClient | Seu email de noReply para envio do comprovante eletrônico. |
instalmentTransactionEnum (¹) | Enum | Quantidade de parcelas. |
typeOfTransactionEnum (¹) | Enum | Tipo da transação (débito, crédito ou voucher). |
shortName | 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 | Boolean | Define se a transação será realizada com captura automática ou não. |
subMerchantCategoryCode | String | MCC do sub-merchant que efetuou a transação. |
subMerchantAddress | String | Logradouro do sub-merchant. |
subMerchantCity | String | Cidade do sub-merchant. |
subMerchantPostalAddress | String | CEP do sub-merchant. |
subMerchantRegisteredIdentifier | String | Identificador do sub-merchant no Sistema do Subadquirente. |
subMerchantTaxIdentificationNumber | String | CNPJ do sub-merchant (apenas números). |
(¹) 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 Sandbox
Existem diferentes retornos no ambiente de sandbox de acordo com o numero de centavos da transação. Por favor para ter um transação aprovada teste usando um valor maior ou igual à um real, como por exemplo: R$ 2,00
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.