v1.3.0
Esta versão garante que o terminal só passe a usar um novo estabelecimento depois de ativado com ele. Se a reativação falhar, o terminal volta ao estabelecimento anterior e continua transacionando. A versão também liga cada transação ao estabelecimento que a fez e implementa relógio confiável nas datas.
O que pode exigir mudança no app
- Compilação: novo valor
MASTER_KEY_WORKING_3DESemPayOsSdkEncryptMode.whenexaustivos sobre esse enum deixam de compilar.- Novos erros em
init,updateTerminalConfigurationse nas operações sobre transações.- Sem downgrade: o banco local migra para a versão 5. Depois de instalar a 1.3.0 no terminal, não é possível voltar para a 1.2.0 sem limpar os dados do app.
Novas permissões adicionadas ao manifesto do app (via merge): READ_SMS, ACCESS_LOCATION_EXTRA_COMMANDS, ACTION_APN_SETTINGS, android.intent.action.TIME_SET e com.pax.permission.SET_WIFI. Para remover alguma, use tools:node="remove" no manifesto do app.
Mudanças na API pública
| Tipo | Mudança | Impacto |
|---|---|---|
PayOsSdkEncryptMode | Novo valor MASTER_KEY_WORKING_3DES (só aparece em Pax) | Quebra when exaustivos |
PayOsSdkTransactionStore | Novo campo establishmentKey: String?: identificador opaco do estabelecimento que fez a transação | Aditivo |
Nenhum método de PayOsSdkPayment ou PayOsSdkPrinter mudou de assinatura.
Mudanças de comportamento
init e troca de estabelecimento
init e troca de estabelecimento- Uma reativação com falha não altera mais o estabelecimento ativo. O erro devolvido termina com
O terminal foi mantido com a ativação anterior. - Na primeira ativação, uma falha não grava nada.
getActiveEstablishmentDetailsreflete um terminal não ativado. - Ao trocar de estabelecimento, o SDK sincroniza antes as transações de cartão pendentes. Se alguma não puder ser sincronizada (por exemplo, sem rede), a troca é recusada com
LOGON_NOT_PERFORMED. - Depois da troca, não é mais necessário chamar
tableLoad.
updateTerminalConfigurations
updateTerminalConfigurations- Se os dados de ativação do estabelecimento mudaram no backend, o terminal é reativado pelo mesmo fluxo do
init, com rollback. - Erros de autenticação agora são devolvidos em
onError. Antes, eram ignorados.
Restauração automática da ativação
Se uma reativação for interrompida (app encerrado, abort(), tempo esgotado), o SDK refaz a ativação sozinho: em segundo plano, em configure(), e antes de makeTransaction (crédito/débito), revertTransaction, tableLoad e updateTerminalConfigurations. Uma operação chamada durante essa restauração espera ela terminar, em vez de responder que há uma operação em andamento.
Transações de outro estabelecimento
Depois de uma troca, as transações do estabelecimento anterior continuam em listTransactions e getTransaction, mas são recusadas por:
| Operação | Retorno |
|---|---|
syncTransactionToCloud, revertTransaction, getPixTransactionFromCloud, cancelPixTransaction | INVALID_TRANSACTION |
printReceipt (última transação) | EMPTY_TRANSACTION |
Elas voltam a ser aceitas se o terminal for ativado de novo com o estabelecimento anterior.
Datas pelo relógio confiável
As datas deixam de depender do relógio do terminal. Todas as datas aplicam o fuso fixo UTC-3.
abort() e resetTerminalConfigurations
abort() e resetTerminalConfigurationsabort()ou tempo esgotado duranteinitouupdateTerminalConfigurationsagora interrompem a operação de fato e devolvemABORTED_OPERATION. A ativação é corrigida automaticamente na próxima operação.resetTerminalConfigurations()só libera o SDK quando a biblioteca do adquirente termina o reset. Uminitchamado nesse intervalo recebeHá uma operação em andamento. Aguarde a conclusão ou chame abort().
Novos retornos
| Situação | Código | Mensagem |
|---|---|---|
| Troca recusada por transações não sincronizadas | LOGON_NOT_PERFORMED | Existem N transações de cartão não sincronizadas com o estabelecimento atual. / Sincronize-as antes de ativar outro estabelecimento. |
| Reativação falhou, terminal mantido no estabelecimento anterior | código do erro original | erro original + O terminal foi mantido com a ativação anterior. |
| Reativação e rollback falharam | código do erro original | erro original + Não foi possível restaurar a ativação anterior do terminal. |
| Etapa da ativação sem resposta | TIMEOUT | Tempo esgotado ao ativar o terminal. |
init interrompido | ABORTED_OPERATION | A ativação do terminal foi interrompida (tempo esgotado ou operação abortada). |
updateTerminalConfigurations interrompido | ABORTED_OPERATION | A atualização das configurações do terminal foi interrompida. |
| Restauração automática falhou | código do erro | Não foi possível restaurar a ativação do terminal. + erro + A restauração será tentada novamente na próxima operação. |
| Restauração automática interrompida | ABORTED_OPERATION | A restauração da ativação do terminal foi interrompida. |
| Transação de outro estabelecimento | INVALID_TRANSACTION | Transação realizada por outro estabelecimento. |
| Reimpressão da última transação de outro estabelecimento | EMPTY_TRANSACTION | Não existem dados da última transação. |
| Crédito/débito em PagBank sem sub-adquirente configurado | LOGON_NOT_PERFORMED | Estabelecimento não configurado no terminal. |
Checklist de migração
- Atualize a dependência para
1.3.0. - Trate
PayOsSdkEncryptMode.MASTER_KEY_WORKING_3DESemwhenexaustivos. - Trate os novos retornos de
initeupdateTerminalConfigurations. Se a troca for recusada por transações pendentes, sincronize e tente de novo. - Trate
INVALID_TRANSACTIONem sincronização, estorno e operações Pix. - Depois de
resetTerminalConfigurations(), aguarde antes de chamarinit, ou repita a chamada se receberHá uma operação em andamento. - Remova chamadas a
tableLoadlogo após trocar de estabelecimento (não são mais necessárias).
Updated about 7 hours ago