SDK Android

Changelog

Alterações realizadas na aplicação

v3.0.1 (25/01/2019)

Correções

  • Correção do bug onde a SDK perdia o pareamento com os pinpads com muita frequência.

v3.0.0 (22/01/2019)

Novas Implementações

  • Android gradle build tools atualizado para 3.2.1
  • Adicionado método getUserModel() no TransactionObject que retorna o objeto referente ao lojista que efetuou a transação (em caso de múltiplos stone codes ativos).
  • Adicionado método setCompanyLogo(Bitmap companyLogo) no SendEmailTransactionProvider
    para substituir a logo padrão da Stone por uma personalizada.
  • Adicionada variável boolean interest para verificar se a parcela é com ou sem juros no enum
    InstalmentTransactionEnum.
  • Adicionado COMMUNICATION_ERROR no enum `PinpadFeedback.
  • Adicionada classe TransactionsByCardProvider para obter as transações pelo PAN.
  • Adicionado método getPinpadObjectList à Stone.
  • Adicionado método setAppName em Stone . Obrigatório o preenchimento para transacionar.
  • Kotlin 1.2.51 adicionado às dependências.
  • OkHttp 3.9.1 adicionado às dependências.
  • Adicionado novos ENUMS de erro:
  • CARD_READ_ERROR Erro de leitura do cartão.
  • TRANSACTION_OBJECT_NULL_ERROR TransactionObject passado para o provider
  • INTERNAL_ERROR Erro interno no SDK
  • UNKNOWN_ERROR Erro desconhecido
  • EMAIL_RECIPIENT_EMPTY Nenhum destinatário do email foi adicionado
  • APPNAME_NOT_SET AppName não foi setado na classe Stone
  • TRANSACTION_FALLBACK_STARTED Erro adicional indicando que o fluxo de
    fallback foi iniciado.
  • TRANSACTION_FALLBACK_TIMEOUT Erro adicional indicando que o tempo de espera de um cartão de tarja foi expirado.
  • SDK_VERSION_OUTDATED Erro de versão do SDK abaixo da mínima obrigatória.

Alterações

  • Adicionado o Enum RECONNECT_WITH_PINPAD em ErrorsEnum.
  • Adicionados os seguintes Enums em CancellationReasonEnum:.
    CUSTOMER_CANCELLATION, UNSPECIFIED, SUSPECTED_MALFUNCTION, UNKNOWN.
  • Classe StoneTransaction removida. Para fazer transações, preencha diretamente o.
    TransactionObject com as informações necessárias.
  • Todos os erros que geravam o Enum GENERIC_ERROR foram movidos para UNKNOWN_ERROR.
  • Construtor ValidateTransactionByCardProvider(Context, PinpadObject, UserModel) depreciado, use ValidateTransactionByCardProvider(Context, PinpadObject).
  • Método getTransactionsWithCurrentCard de ValidateTransactionByCardProvider foi removido. Use TransactionsByCardProvider.
  • Classe SendEmailProvider removida. Use SendEmailTransactionProvider.
  • Enum ErrorsEnum.TRANSACTION_NOT_APPROVED disparado pelos providers de cancelamento e captura foi renomeado para ErrorsEnum.INVALID_TRANSACTION_STATUS.
  • Método isMerchantReceipt() , setMerchantReceipt(boolean) do SendEmailTransactionProvider removidos. Use setReceiptType(ReceiptType).
  • Construtor SendEmailTransactionProvider(Context, UserModel, TransactionObject) depreciado. Use SendEmailTransactionProvider(Context, TransactionObject)
  • TRANSACTION_WAITING_REMOVE renomeado para TRANSACTION_REMOVE_CARD no mum Action
  • AMERICAN_EXPRESS renomeado para AMEX no enum CardBrandEnum.
  • Classe EmailClient removida.
  • Atributo userModelSale de TransactionObject foi renomeado para saleAffiliationKey.
  • Atributo merchantSak de UserModel foi renomeado para saleAffiliationKey.
  • Classe Contact foi movida.
  • Na classe TransactionProvider :
  • Novo construtor TransactionProvider(Context, TransactionObject, UserModel, PinpadObject)
  • Método getAuthorizationCode() removido. A informação já retornada no TransactionObject
  • Método getGcrRequestCommand() removido.
  • Método removido getStatusAsString , você pode fazer o parse à sua maneiro do TransactionStatus que fica no TransactionObject.
  • Método writePinpadDisplay removido. Use o provider DisplayMessageProvider

Melhorias

  • Melhorias no layout do email do comprovante.

Correções

  • Correção do bug onde o status TRANSACTION_WAITING_PASSWORD era chamado antes do pinpad estar pronto para receber a senha.
  • Correção do bug onde a carga de tabela falhava no dispositivo Gertec Mobi Pin 10.
  • Correção do bug onde o SDK retornava um erro ao tentar transacionar com cartões
    provisórios de tarja.

v2.6.0 (01/11/2018)

  • Adição de campos na classe StoneTransaction para acrescentar as informações para sub.

  • stoneTransaction.setSubMerchantCity("city") //Cidade do sub-merchant

  • stoneTransaction.setSubMerchantPostalAddress("00000000") //CEP do sub-merchant (Apenas * números)
  • stoneTransaction.setSubMerchantRegisteredIdentifier("00000000") // Identificador do sub-merchant
  • stoneTransaction.setSubMerchantTaxIdentificationNumber("33368443000199") // CNPJ do sub-merchant (apenas números)

v2.5.9 (03/04/2018)

  • Agora não é mais necessário usar o LoadTablesProvider para efetuar a carga de tabelas no Pinpad, todo o gerenciamento será feito internamente pela SDK.
  • Enum TABLES_NOT_FOUND foi depreciado por não ser mais disparado.
  • Enum NEED_LOAD_TABLES foi depreciado por não ser mais disparado.
  • Provider DownloadTablesProvider removido por não ter mais utilidade.
  • Corrigido bug onde o enum PINPAD_ALREADY_CONNECTED não era chamado ao conectar com um pinpad já conectado.
  • Corrigido bug no BluetoothConnectionProvider que causava crash no app se ocorresse um erro desconhecido.
  • Melhoria na detecção das bandeiras.
  • Corrigido problema na migration do banco de pinpads quando atualizado de versões muito antigas da SDK.
  • Essa versão corrige o problema de atualização da mobox/sweda.

v2.5.8

  • Timeout das requests http aumentado para 1 minuto
  • Corrigido bug da SDK deixar 2 ou mais stone codes iguais ficarem ativos no ActiveApplicationProvider
  • Adicionado stacktrace das exceptions no BluetoothConnectionProvider

v2.5.7

  • Provider CancellationProvider agora retorna o actionCode do cancelamento pelo método cancellationProvider.getActionCode() e o status do cancelamento pelo cancellationProvider.getResponseCodeEnum().
  • Métodos getTransactionStatus() e getStatusAsString() do CancellationProvider foram removidos em prol dos novos métodos citados acima.
  • Corrigido bug onde a mensagem de "Transação Aprovada" não aparecia no pinpad em algumas transações
  • Novo método activate(String stoneCode) para ativar e adicionar um novo stone code na lista de stone codes ativos.
  • Novo método deactivate(String stoneCode) para desativar somente um stone code da lista de ativos
  • Corrigido bug onde versões anteriores da SDK recebiam NPE em pinpads já salvos sem o campo novo acqidx do PinpadObject.

v2.5.6

Nova dependência OkHttp para substituir o HttpUrlConnection nas requests da SDK para nossos servidores;
Forçando TLS >= 1.2 em todas as requests da SDK;
Novo Provider CaptureTransactionProvider para capturar transações cuja requisição foi feita com captura posterior (setando stoneTransaction.capture = false);
Correção na efetuação de transações da bandeira SODEXO;
Melhoria na captura do CVM do pinpad, forçando o retorno;
Gerenciando o uso da chave Elavon/Stone internamente. Não é mais necessário setar Stone.setAcquirer(Acquirer acquirer). Se o Pinpad não tiver nenhuma das duas chaves, a SDK retornará o erro ErrorsEnum.PINPAD_WITHOUT_KEY durante a conexão do pinpad no BluetoothConnectionProvider;
Novo ambiente INTERNAL_CERTIFICATION para validação do app pelo time de integrações da Stone;

v2.5.5

  • Adicionado campo subMerchantAddress no TransactionObject para editar o endereço do lojista que está efetuando a transação;
    *Adicionado campo subMerchantCategoryCode no TransactionObject para editar o mcc do lojista que está efetuando a transação;
  • Adicionado campo shortName no TransactionObject para armazenar em banco opção setada no campo shortName do StoneTransaction;
  • Adicionado campo capture no TransactionObject para armazenar em banco opção setada no campo capture do StoneTransaction;
  • Construtor CancellationProvider(Context context, int idFromTransactionInBase, UserModel userModel) depreciado. Em vez dele, use CancellationProvider(Context context, TransactionObject transaction)
  • Correção no migration da tabela de Transaction onde algumas colunas não estavam sendo inseridas quando atualizadas de versões muito antigas da SDK;

  • Novos Enums de erro:
    /** SWIPE_INCORRECT, TOO_MANY_CARDS, UNKNOWN_ERROR, INTERNAL_ERROR, // Erros de impressão do POS PRINTER_PRINT_ERROR, PRINTER_BUSY_ERROR, PRINTER_INIT_ERROR, PRINTER_LOW_ENERGY_ERROR, PRINTER_OUT_OF_PAPER_ERROR, PRINTER_UNSUPPORTED_FORMAT_ERROR, // PED ERROR PED_PASS_KEY_ERROR, PED_PASS_USER_CANCELED_ERROR, PED_PASS_NO_PIN_INPUT_ERROR, PED_PASS_TIMEOUT_ERROR, // TRANS ERROR TRANS_APP_BLOCKED_ERROR, TRANS_SELECT_TYPE_USER_CANCELED_ERROR, TRANS_INVALID_AMOUNT_ERROR, TRANS_PASS_MAG_BUT_IS_ICC_ERROR, TRANS_NO_TRANS_TYPE_ERROR, TRANS_WRONG_TRANS_TYPE_ERROR, // CARD ERROR CARD_ERROR, CARD_READ_ERROR, CARD_READ_TIMEOUT_ERROR, CARD_READ_CANCELED_ERROR, CARD_REMOVED_ERROR, CARD_UNSUPPORTED_ERROR, TRANSACTION_OBJECT_NULL_ERROR,

  • android gradle build tools atualizado para 3.0.1

v2.5.4-1

  • Corrigido bug onde a transação era efetuada mas não era salva no banco.

v2.5.4

  • Correção na leitura de informações de cartões ELO.
  • Enum GENERIC_ERROR utilizado pelo ActiveApplicationProvider para quando o stone code não é reconhecido foi alterado para INVALID_STONE_CODE_OR_UNKNOWN.
  • Melhoria na estrutura interna e na performance do TransactionProvider.
  • Correção no envio do comprovante por email, colocando campo "assinatura" quando não era necessário.
  • Corrigido bug onde eventualmente o método getListOfErrors() retornava null

v2.5.3

  • Corrigido bug quando o BluetoothConnectionProvider disparava o evento onSuccess duplicado.
  • Corrigido bug da SDK baixando tabelas toda vez que abria o app.
  • Support Library atualizado para 27.0.2.

v2.5.2

  • Adicionado campo cancellationDate no TransactionObject para armazenar a data do cancelamento;
  • Adicionado campo lastConnectionAt no PinpadObject para armazenar a data da última vez que houve conexão com o pinpad;
  • Todos os erros durante a conexão com o device bluetooth que retornavam em dialog. Agora os erros são adicionados no array de erros do provider. Segue exemplo de uso:
BluetoothConnectionProvider.setConnectionCallback(new StoneCallbackInterface() {

    public void onSuccess() {
        //handle success
    }

    public void onError() {
        List<ErrorsEnum> listOfErrors = bluetoothConnectionProvider.getListOfErrors();
        if (listOfErrors.contains(ErrorsEnum.PINPAD_ALREADY_CONNECTED)) {
            //Do something
        } else if (listOfErrors.contains(ErrorsEnum.TIME_OUT)) {
            //Do something
        } else if (listOfErrors.contains(ErrorsEnum.DEVICE_NOT_COMPATIBLE)) {
            //Do something
        } else if (listOfErrors.contains(ErrorsEnum.IO_ERROR_WITH_PINPAD)) {
            //Do something
        } else if (listOfErrors.contains(ErrorsEnum.SDK_VERSION_IS_OUTDATED)) {
            //Do something
        }

    }
});
  • O método Stone.getPinpadListSize() não mais retorna null quando a lista de pinpads estiver vazia
  • Refatorado o gerenciamento das versões das tabelas, corrigindo o problema de carregar tabelas a cada transação;
  • Construtores LoadTablesProvider(Context, GcrRequestCommand, PinpadObject) e LoadTablesProvider(Context, String, PinpadObject) depreciados. Use LoadTablesProvider(Context context, PinpadObject) em vez disso;

v2.5.1

  • SendEmailProvider depreciado em prol do uso do SendEmailTransactionProvider
  • Adicionado flag merchantReceipt (default false) pra informar se é pra enviar a via do cliente ou do estabelecimento no SendEmailTransactionProvider
  • Método setEmailToSent e setEmailsToSent da classe SendEmailTransactionProvider depreciado, usar addTo()/setTo() para setar o destinatário do email
  • Possibilidade de definir o remetente do email no SendEmailTransactionProvider no método setFrom
  • Adicionado campo balance no TransactionObject pra transações voucher (SODEXO, Ticket, etc...)
  • Bug de cartões (principalmente HIPER) retornando UNKNOWN fixed
  • Novos métodos (findTransactionWithAuthorizationCode(), findTransactionWithInitiatorTransactionKey() e findTransactionByFilter() ) no TransactionDAO para busca das transações no banco local da SDK.

v2.5.0

  • Permissões android.permission.VIBRATE e android.permission.ACCESS_WIFI_STATE removidas da SDK
  • Novos campos cvm e serviceCode no TransactionObject
  • appcompat-v7 atualizado para 26.1.0
  • Enum de feedback CARD_REMOVE deprecated por não ser uma mensagem alterável.
  • Enum de feedback REVERSAL deprecated pois não mandamos nenhuma mensagem para o pinpad
  • Revertendo transações quando negado pelo cartão
  • Bug de mostrar mensagem RETIRE O CARTÃO em cartões mágnéticos fixed
  • gson atualizado de 2.8.1 para 2.8.2
  • Várias melhorias de performance

v2.4.8

  • Adicionando REVERSING_TRANSACTION_WITH_ERROR ao enum Action
  • Revertendo transações automaticamente, quando ocorrer um erro

As transações que não foram processadas por um erro de conexão devem ter canceladas utilizando o ReversalProvider

v2.4.7

  • Adicionando o status WITH_ERROR para transações com erro e que precisam ser canceladas (ex: timeout)
  • Adicionando o ReversalProvider para varrer o banco de transações e cancelar as transações com o status WITH_ERROR
  • Correção no cancelamento de transações
ReversalProvider reversalProvider = new ReversalProvider(this);
reversalProvider.setDialogMessage("Cancelando transação com erro");
reversalProvider.isDefaultUI();
reversalProvider.setConnectionCallback(new StoneCallbackInterface() {
      @Override
      public void onSuccess() {
        // code code code
      }

      @Override
      public void onError() {
        // code code code
      }
});

v2.4.6

  • Downgrade da targetSdkVersion de 26 para 25 devido a problemas de compatibilidade com APIs antigas
  • URL de ativação do ambiente CERTIFICATION alterada
  • Corrigido bug ao executar a migration de versões anteriores à 2.3.0
  • Downgrade da XStream para 1.4.7 devido a problemas com Java8 nas versões mais novas
  • Remoção da permissão READ_PHONE_STATE da SDK!

v2.4.5

Localização do BluetoothConnectionProvider corrigida.

v2.4.4

  • Melhoria e update das dependências
  • Personalização das mensagens exibidas no Pinpad. No TransactionProvider, dois novos métodos foram implementados
  • Novos Métodos:
setPinpadFeedbackMessage(PinpadFeedback key, String message) para customizar uma mensagem específica
setPinpadFeedbackMessages(Map<PinpadFeedback, String> pinpadFeedbackMessages) para personalizar todas as mensagens de uma vez
Mensagens disponíveis para personalização e suas mensagens default (em comentário):

PinpadFeedback.DENIED //"TRANSAC NEGADA"
PinpadFeedback.PROCESSING //"PROCESSANDO.."
PinpadFeedback.APPROVED //"TRANSAC APROVADA"
PinpadFeedback.CARD_REMOVE //"RETIRE O CARTAO"
PinpadFeedback.CARD_WITH_PROBLEMS //"ICC COM PROBLEMAS"
PinpadFeedback.DENIED_BY_NET //"TRANSAC NEGADA PELA REDE"
PinpadFeedback.CARD_INVALIDATED //"CARTAO ESTA INVALIDADO"
PinpadFeedback.DENIED_BY_CARD //"TRANSAC NEGADA PELO CARTAO"

v2.4.2

  • Melhorias de perfomance

v2.4.1

  • Adicionando suporte para conexões via cabo (ethernet)

  • Campo signature em caso de necessidade de armazenar a assinatura da transação.

  • Melhorias de perfomance

v2.4.0

  • Agora a SDK está em no artifactory! siga as instruções de instalação no readme.

  • Possibilidade de escolher o uso de Pinpads Elavon (que não possuem chaves Stone)

  • Todos os Providers recebem Context em vez de Activity no construtor

  • Nova interface StoneActionCallback com um método void onStatusChanged(Action action) para receber eventos adicionais do provider. Esta interface herda de StoneCallbackInterface, então seu uso é opcional. Por enquanto existem somente eventos para transação, mas em breve terá eventos para outros providers.

Eventos disponíveis:

  • TRANSACTION_WAITING_CARD Esperando cartão ser inserido/passado

  • TRANSACTION_WAITING_PASSWORD Esperando senha do cartão (se houver)

  • TRANSACTION_SENDING Enviando transação para o servidor

  • TRANSACTION_WAITING_REMOVE Esperando a remoção do cartão do pinpad (se for chip)

v2.3.2

  • Agora você pode desativar a SDK usando deactivate() em ActiveApplicationProvider

  • Método execute() do ActiveApplicationProvider descontinuado. Em vez disso, use o método activate(List<String> stoneCodes)

  • Corrigido bug em LoadTablesProvider no qual pedia um objeto desnecessário no construtor.

  • Novo campo entryMode no model da transação informando se a transação foi efetuada com chip ou tarja.

  • Campos e métodos descontinuados.

v2.3.1

  • Corrigido problema na seleção do ambiente de SANDBOX

Para atualizar o projeto para transacionar no ambiente de integração deve-se fazer os seguintes passos:

  • Baixar o arquivo sdk_stone_2.3.1.aar no nosso repositório do GitHub

  • Após baixado o arquivo deve ser colocado na pasta "SEU_PROJETO"\app\libs

  • Com seu projeto aberto acrescente o código abaixo:

No build.grandle (Project):

allprojects {
    repositories {
        jcenter()
        flatDir {
            dirs 'libs'
        }
    }
}

No build.grandle (Module:App):

dependencies {
    compile name: 'sdk_stone_2.3.1', ext: 'aar'
}

É recomendado utilizar o comando Clean Project e Rebuild Project antes dos testes caso esteja utilizando a IDE Android Studio.

v2.3.0

  • Nova forma de instalação da lib, utilizando aar, em breve teremos um repositório para distribuir nossas bibliotecas!
  • Agora você pode definir qual ambiente você quer usar em runtime, usando:
// para integração
Stone.setEnvironment(Environment.SANDBOX)

// produção
Stone.setEnvironment(Environment.PRODUCTION)
  • Stone.developerMode() deprecated em prol do novo modo de escolha de ambiente mencionado acima.
  • Suporte para novas bandeiras: Elo, Alelo. (Verifique disponibilidade da bandeira no seu stone code com o time de integrações)
  • Correções no envio de algumas transações para stone.
  • Bug ao desconectar o pinpad fixed.

v2.2.10

  • Hot fix do endpoint do TMS.
  • Correções de erro na ativação e download das tabelas AID e CAPK.

v2.2.9

  • Correção do ambiente de homologação.

v2.2.8

  • Suportando a bandeira Ticket.

v2.2.7

  • Correções do erro ClassNotFoundExceptionem algumas classes da SDK.

v2.2.6

  • Opção de enviar uma transação não capturada:
StoneTransaction stoneTransaction = new StoneTransaction();
// set dos valores da transação
stoneTransaction.disableCapture(); // desabilita a captura da transação

Default

Por padrão, a transação é capturada!

v2.2.5

  • Transações com tarja sem senha e com senha.
  • Correções nas conexões com a internet.