msitef_flutter 1.1.0 copy "msitef_flutter: ^1.1.0" to clipboard
msitef_flutter: ^1.1.0 copied to clipboard

Plugin Flutter para integração com M-SiTef (Software Express) - TEF para Android

M-SiTef Flutter Plugin #

Plugin Flutter para integração com M-SiTef (Software Express) - TEF para Android.

Funcionalidades #

  • ✅ Venda (crédito, débito, voucher)
  • ✅ Venda Crédito
  • ✅ Venda Débito
  • ✅ PIX
  • ✅ Cancelamento
  • ✅ Menu Administrativo
  • ✅ Reimpressão de comprovante
  • ✅ Verificação se M-SiTef está instalado

Instalação #

Opção 1: Via GitHub (recomendado para FlutterFlow) #

No seu pubspec.yaml:

dependencies:
  msitef_flutter:
    git:
      url: https://github.com/SEU-USUARIO/msitef_flutter.git
      ref: main

Opção 2: Path local #

dependencies:
  msitef_flutter:
    path: ../msitef_flutter

Configuração Android #

Adicione no AndroidManifest.xml do seu app (dentro de <manifest>):

<queries>
    <package android:name="br.com.softwareexpress.sitef.msitef" />
    <intent>
        <action android:name="br.com.softwareexpress.sitef.msitef.ACTIVITY_CLISITEF" />
    </intent>
</queries>

Uso Básico (Dart) #

import 'package:msitef_flutter/msitef_flutter.dart';

// Verificar se M-SiTef está instalado
bool instalado = await MsitefFlutter.isInstalado();

// Realizar uma venda
MsitefResponse response = await MsitefFlutter.venda(
  empresaSitef: "00000000",      // Código da empresa no SiTef
  enderecoSitef: "192.168.0.1",  // IP do servidor SiTef
  cnpjCpf: "12345678901234",     // CNPJ do estabelecimento
  valor: 1000,                    // R$ 10,00 (valor em centavos)
  operador: "0001",
);

if (response.sucesso) {
  print("Transação aprovada!");
  print("NSU: ${response.nsuHost}");
  print("Autorização: ${response.codAutorizacao}");
} else {
  print("Erro: ${response.mensagem}");
}

Uso no FlutterFlow #

Passo 1: Adicionar o Plugin como Dependência #

  1. No FlutterFlow, vá em Settings > Project Dependencies
  2. Clique em Add Dependency
  3. Selecione GitHub e adicione:
    • URL: https://github.com/SEU-USUARIO/msitef_flutter.git
    • Ref: main

Passo 2: Configurar o AndroidManifest.xml #

  1. Vá em Custom Code > Configuration Files
  2. Selecione AndroidManifest.xml
  3. Adicione o snippet de queries (veja seção acima)

Passo 3: Criar Custom Action para Venda #

  1. Vá em Custom Code > Actions
  2. Clique em + Add Action
  3. Nome: realizarVendaTef
  4. Cole o código abaixo:
// Custom Action: realizarVendaTef
// Argumentos de entrada:
//   - valorCentavos (int) - Valor em centavos
//   - empresaSitef (String) - Código da empresa
//   - enderecoSitef (String) - IP do servidor
//   - cnpjCpf (String) - CNPJ do estabelecimento
// Retorno: JSON (String) com resultado da transação

import 'dart:convert';
import 'package:msitef_flutter/msitef_flutter.dart';

Future<String> realizarVendaTef(
  int valorCentavos,
  String empresaSitef,
  String enderecoSitef,
  String cnpjCpf,
) async {
  try {
    // Verifica se M-SiTef está instalado
    bool instalado = await MsitefFlutter.isInstalado();
    if (!instalado) {
      return jsonEncode({
        'sucesso': false,
        'erro': 'M-SiTef não está instalado no dispositivo'
      });
    }

    // Realiza a venda
    MsitefResponse response = await MsitefFlutter.venda(
      empresaSitef: empresaSitef,
      enderecoSitef: enderecoSitef,
      cnpjCpf: cnpjCpf,
      valor: valorCentavos,
      operador: "0001",
    );

    // Retorna o resultado como JSON
    return jsonEncode({
      'sucesso': response.sucesso,
      'codResp': response.codResp,
      'mensagem': response.mensagem,
      'nsuHost': response.nsuHost,
      'nsuLocal': response.nsuLocal,
      'codAutorizacao': response.codAutorizacao,
      'bandeira': response.bandeira,
      'nomeCartao': response.nomeCartao,
      'tipoCartao': response.tipoCartao,
      'viaCliente': response.viaCliente,
      'viaEstabelecimento': response.viaEstabelecimento,
    });
  } catch (e) {
    return jsonEncode({
      'sucesso': false,
      'erro': e.toString()
    });
  }
}

Passo 4: Criar Custom Action para PIX #

// Custom Action: realizarPixTef
import 'dart:convert';
import 'package:msitef_flutter/msitef_flutter.dart';

Future<String> realizarPixTef(
  int valorCentavos,
  String empresaSitef,
  String enderecoSitef,
  String cnpjCpf,
) async {
  try {
    bool instalado = await MsitefFlutter.isInstalado();
    if (!instalado) {
      return jsonEncode({
        'sucesso': false,
        'erro': 'M-SiTef não está instalado'
      });
    }

    MsitefResponse response = await MsitefFlutter.pix(
      empresaSitef: empresaSitef,
      enderecoSitef: enderecoSitef,
      cnpjCpf: cnpjCpf,
      valor: valorCentavos,
    );

    return jsonEncode(response.toMap());
  } catch (e) {
    return jsonEncode({
      'sucesso': false,
      'erro': e.toString()
    });
  }
}

Passo 5: Criar Custom Action para Verificar Instalação #

// Custom Action: verificarMsitefInstalado
import 'package:msitef_flutter/msitef_flutter.dart';

Future<bool> verificarMsitefInstalado() async {
  return await MsitefFlutter.isInstalado();
}

Passo 6: Usar no Action Flow #

  1. No seu botão de pagamento, adicione uma Action
  2. Selecione Custom Action > realizarVendaTef
  3. Preencha os parâmetros:
    • valorCentavos: Use uma variável ou valor fixo
    • empresaSitef: Seu código de empresa
    • enderecoSitef: IP do servidor SiTef
    • cnpjCpf: CNPJ do estabelecimento
  4. Capture o retorno em uma Action Output Variable
  5. Use Conditional Actions para verificar o resultado

Exemplo de Action Flow: #

1. [Custom Action] verificarMsitefInstalado
   ↓
2. [Conditional] Se instalado == false
   → [Show Snackbar] "M-SiTef não instalado"
   → [Stop]
   ↓
3. [Custom Action] realizarVendaTef
   - valorCentavos: FFAppState().valorCarrinho
   - empresaSitef: "00000000"
   - enderecoSitef: "192.168.0.1"
   - cnpjCpf: "12345678901234"
   → Output: resultadoTef
   ↓
4. [Custom Function] parseJson(resultadoTef)
   ↓
5. [Conditional] Se sucesso == true
   → [Navigate] Tela de Sucesso
   → [Update State] limpar carrinho
   ↓
6. [Show Dialog] Erro: ${mensagem}

Modalidades Disponíveis #

Modalidade Código Método
Venda (todas formas) 0 MsitefFlutter.venda()
Débito 2 MsitefFlutter.vendaDebito()
Crédito 3 MsitefFlutter.vendaCredito()
PIX 122 MsitefFlutter.pix()
Menu Administrativo 110 MsitefFlutter.menuAdministrativo()
Reimpressão 114 MsitefFlutter.reimpressao()
Cancelamento 200 MsitefFlutter.cancelamento()

Tipos de Comunicação (comExterna) #

Valor Descrição
0 TLS Software Express (padrão)
1 TCP
2 Com Externa
3 GSurf
4 TLSGWP

Códigos de Resposta Comuns #

Código Significado
0 Transação aprovada
-1 Erro genérico
2 Transação negada
6 Transação cancelada pelo operador
9 Erro de comunicação

Requisitos #

  • Android SDK 21+ (Android 5.0)
  • M-SiTef instalado no dispositivo
  • Servidor SiTef configurado

Suporte #

Para dúvidas sobre o M-SiTef, consulte a documentação oficial: https://dev.softwareexpress.com.br/docs/m-sitef/

Licença #

MIT License



EasyLayer - Integração com Gertec SK210 #

Este plugin também inclui suporte ao EasyLayer SDK da Gertec para terminais de autoatendimento SK210.

Funcionalidades EasyLayer #

  • Impressora Térmica

    • Imprimir texto com formatação (fonte, negrito, alinhamento)
    • Imprimir imagens
    • Imprimir código de barras (CODE128, EAN13, EAN8, CODE39)
    • Imprimir QR Code
    • Imprimir cupons formatados
    • Avançar e cortar papel
    • Status da impressora
  • Scanner de Código de Barras

    • Iniciar/parar leitura
  • LEDs Indicadores

    • Controle de LEDs (cores: verde, vermelho, azul, amarelo)
  • Informações do Dispositivo

    • Modelo, fabricante, versão Android, etc.

Configuração do EasyLayer #

Passo 1: Adicionar o AAR #

  1. Baixe o arquivo EasyLayer_SK210_v219_release.aar do Portal do Desenvolvedor Gertec
  2. Copie o arquivo para: android/libs/

A estrutura deve ficar assim:

seu_projeto/
└── android/
    └── libs/
        └── EasyLayer_SK210_v219_release.aar

Passo 2: Configurar o build.gradle #

Caso esteja usando o plugin, a configuração já vem pronta. Se precisar adicionar manualmente ao seu app, no android/app/build.gradle:

repositories {
    flatDir {
        dirs 'libs'
    }
}

dependencies {
    implementation(name: 'EasyLayer_SK210_v219_release', ext: 'aar')
}

Uso Básico EasyLayer (Dart) #

import 'package:msitef_flutter/msitef_flutter.dart';

// 1. Inicializar o EasyLayer (OBRIGATÓRIO antes de usar)
EasyLayerResponse init = await EasyLayer.inicializar();
if (!init.sucesso) {
  print("Erro ao inicializar: ${init.mensagem}");
  return;
}

// 2. Verificar status da impressora
EasyLayerPrinterStatus status = await EasyLayer.statusImpressora();
if (!status.pronta) {
  print("Impressora não está pronta: ${status.mensagem}");
  return;
}

// 3. Imprimir texto simples
await EasyLayer.imprimirTexto(
  texto: "Olá, mundo!",
  tamanhoFonte: 28,
  negrito: true,
  alinhamento: "center",
);

// 4. Imprimir QR Code
await EasyLayer.imprimirQRCode(
  dados: "https://minhaempresa.com.br",
  tamanho: 200,
);

// 5. Avançar e cortar papel
await EasyLayer.avancarPapel(linhas: 3);
await EasyLayer.cortarPapel();

Imprimir Cupom de Venda #

// Criar linhas do cupom
List<LinhaCupom> linhas = [
  LinhaCupom.titulo("MINHA LOJA"),
  LinhaCupom.subtitulo("Rua Exemplo, 123"),
  LinhaCupom(texto: "CNPJ: 12.345.678/0001-90", alinhamento: "center"),
  LinhaCupom.separador(caractere: "="),
  LinhaCupom.espacamento(),
  
  // Itens
  LinhaCupom(texto: "ITEM           QTD    VALOR", negrito: true),
  LinhaCupom.separador(),
  LinhaCupom.itemValor("Produto A 2x", "R$ 50,00"),
  LinhaCupom.itemValor("Produto B 1x", "R$ 25,00"),
  LinhaCupom.separador(),
  
  // Total
  LinhaCupom(
    texto: "TOTAL: R$ 75,00",
    tamanho: 28,
    negrito: true,
    alinhamento: "right",
  ),
  LinhaCupom.separador(caractere: "="),
  LinhaCupom(texto: "Obrigado pela preferência!", alinhamento: "center"),
  LinhaCupom.espacamento(),
];

// Imprimir
EasyLayerResponse response = await EasyLayer.imprimirCupom(
  linhas: linhas,
  cortarAoFinal: true,
);

if (response.sucesso) {
  print("Cupom impresso com sucesso!");
}

Controlar Scanner #

// Iniciar scanner
await EasyLayer.iniciarScanner();

// ... aguardar leitura ...

// Parar scanner
await EasyLayer.pararScanner();

Controlar LEDs #

// Ligar LED verde
await EasyLayer.controlarLed(
  indice: 0,
  ligado: true,
  cor: "green",
);

// Desligar LED
await EasyLayer.controlarLed(
  indice: 0,
  ligado: false,
);

Uso EasyLayer no FlutterFlow #

Custom Actions Disponíveis #

Copie as Custom Actions do arquivo FLUTTERFLOW_CUSTOM_ACTIONS.dart:

Action Descrição
inicializarEasyLayer Inicializa o SDK (chamar primeiro!)
imprimirTextoEasyLayer Imprime texto formatado
imprimirQRCodeEasyLayer Imprime QR Code
imprimirCodigoBarrasEasyLayer Imprime código de barras
imprimirCupomEasyLayer Imprime cupom simples
imprimirCupomVendaEasyLayer Imprime cupom de venda completo
statusImpressoraEasyLayer Verifica status da impressora
avancarPapelEasyLayer Avança papel
cortarPapelEasyLayer Corta papel
iniciarScannerEasyLayer Inicia scanner
pararScannerEasyLayer Para scanner
controlarLedEasyLayer Controla LEDs
infoDispositivoEasyLayer Info do dispositivo

Exemplo de Action Flow no FlutterFlow #

1. [Custom Action] inicializarEasyLayer
   → Output: resultadoInit
   ↓
2. [Custom Function] isEasyLayerSucesso(resultadoInit)
   → Se false: [Show Snackbar] "Erro ao inicializar EasyLayer"
   → [Stop]
   ↓
3. [Custom Action] statusImpressoraEasyLayer
   → Output: statusImpressora
   ↓
4. [Custom Function] isImpressoraPronta(statusImpressora)
   → Se false: [Show Dialog] "Impressora não está pronta"
   → [Stop]
   ↓
5. [Custom Action] imprimirCupomVendaEasyLayer
   - nomeEmpresa: "Minha Loja"
   - cnpj: "12.345.678/0001-90"
   - itens: ["Produto A|2x|R$ 50,00", "Produto B|1x|R$ 25,00"]
   - total: "R$ 75,00"
   - formaPagamento: "Cartão de Crédito"
   → Output: resultadoImpressao
   ↓
6. [Custom Function] isEasyLayerSucesso(resultadoImpressao)
   → Se true: [Show Snackbar] "Cupom impresso!"
   → Se false: [Show Dialog] "Erro ao imprimir"

Funções Auxiliares #

Função Descrição
isEasyLayerSucesso(json) Verifica se operação foi bem sucedida
getMensagemEasyLayer(json) Obtém mensagem de resposta
isImpressoraPronta(json) Verifica se impressora está pronta

Compatibilidade #

Recurso M-SiTef EasyLayer
Android mínimo 5.0 (SDK 21) 5.0 (SDK 21)
Dispositivos Qualquer Android Gertec SK210
Dependência externa M-SiTef App AAR EasyLayer

Troubleshooting #

EasyLayer não inicializa #

  1. Verifique se o arquivo EasyLayer_SK210_v219_release.aar está em android/libs/
  2. Verifique se o build.gradle tem a configuração flatDir
  3. Execute flutter clean e flutter pub get

Impressora não imprime #

  1. Verifique o status: await EasyLayer.statusImpressora()
  2. Códigos de status:
    • 0 = Pronta
    • 1 = Sem papel
    • 2 = Superaquecimento
    • 3 = Tampa aberta

Scanner não funciona #

  1. Certifique-se de inicializar o EasyLayer primeiro
  2. Verifique permissões no AndroidManifest.xml
0
likes
0
points
687
downloads

Publisher

unverified uploader

Weekly Downloads

Plugin Flutter para integração com M-SiTef (Software Express) - TEF para Android

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter

More

Packages that depend on msitef_flutter

Packages that implement msitef_flutter