VPE – ( Validador de Pagamentos Eletrônicos ) utilizando o Integrador Fiscal – CE

Homologando o Módulo VPE – CE

Ola, Nesse tópico vamos detalhar os passos para realizar testes e homologação utilizando o Módulo VPE (Validador de Pagamentos Eletrônicos) com o Integrador Fiscal no estado do CE.

Embora a SEFAZ CE permitiu a emissão de Cupom Fiscal Eletrônico utilizando apenas o driver MFe (sem a necessidade do uso do Aplicativo Integrador Fiscal), para a integração dos dados de pagamento com cartão – VPE, ainda é necessário a utilização do Integrador Fiscal do Ceará.

Para esse procedimento, segue abaixo como utilizar o Componente ACBrIntegrador para realizar o envio dos dados de pagamento por meio do Integrador Fiscal. Neste caso, estamos utilizando o Demo “SATTest” do Projeto ACBr para os testes, você poderá verificar os fontes desse demo no repositório do ACBr : (..\ACBr\Exemplos\ACBrSAT\ ) ou baixar o demo em: SATTest

Instalar Integrador Fiscal

O Primeiro passo é Instalar o Aplicativo Integrador Fiscal, segue abaixo o tópico sobre como Instalar e configurar o Integrador Fiscal: Instalar Integrador Fiscal

Utilizando o SATTest 

No exemplo do SATTest abaixo, estamos utilizando a conexão direta com a dll do driver MFe, mas a comunicação entre o ACBrIntegrador – (VPE) e o Integrador Fiscal vai funcionar independente desta configuração, basta apenas que o Integrador Fiscal esteja em execução e devidamente configurado na máquina.

Para mais Informações sobre configuração do Driver MFe, veja em: Configurar Driver MFe

Para integração ACBrIntegrador e VPE vá para aba: MFe e veja as quatro opções disponíveis para o Módulo VPE – (“Enviar Pagamento”, “Enviar Status Pagamento”, “Verificar Status Validador”, “Resposta Fiscal”)

Existem duas situações para Integração do Módulo VPE, sendo distintas entre: POS e TEF:

 

Utilizando Integração VPE com Pagamento P.O.S. 

Obs Importante: 

A SEFAZ CE não disponibilizou um Serviço P.O.S. compatível com Integrador Fiscal conforme estava previsto inicialmente. Então a opção “Verificar Status Validador” está disponível apenas para ambiente de homologação, para isso é utilizado o Simulador P.O.S. Ceara: http://simuladorposceara.azurewebsites.net/. Portanto o Serviço “Verificar Status Validador” não é utilizado em Produção.

Passo 1:  EnviarPagamento

Informações a ser enviada neste método:

PagamentoMFe := TEnviarPagamento.Create;
  try
    with PagamentoMFe do
    begin
      Clear;
      ChaveAcessoValidador := '25CFE38D-3B92-46C0-91CA-CFF751A82D3D';                          
      ChaveRequisicao := '26359854-5698-1365-9856-965478231456';                               
      Estabelecimento := '10';                                                                 
      SerialPOS := InputBox('SerialPOS','Informe o Serial do POS','ACBr-'+RandomName(8));      
      CNPJ := edtEmitCNPJ.Text;                                                                
      IcmsBase := 0.23;                                                                        
      ValorTotalVenda := 1530;                                                                 
      HabilitarMultiplosPagamentos := True;                                                    
      HabilitarControleAntiFraude := False;                                                    
      CodigoMoeda := 'BRL';                                                                    
      EmitirCupomNFCE := False;                                                              
      OrigemPagamento := 'Mesa 1234';                                                        
    end;

    ...
  finally
     ...
  end;

Definição sobre Principais Campos:

Chave de Acesso Validador – Esta chave é fixa, está Pré-Definida no Manual Do Integrador Fiscal.

Chave de Requisição – Esta chave deve ser única para cada requisição POS, deve-se gerar um GUID para cada Envio de Pagamento. Esta especificação está descrita no Manual do Integrador.

Estabelecimento –   Como não existe este equipamento POS Integrado conforme previsão inicial, está sendo informado um valor fixo.

SerialPOS –  Como não existe este equipamento POS Integrado conforme previsão inicial, está sendo informado o Numero serial do Equipamento POS utilizado (Independente do equipamento)

(Apenas para efeito de testes no SATTest, estamos utilizando um valor randômico para gerar o Número do Serial).

 

Após o Envio do Pagamento será retornado o “ID do Pagamento”

obs: O ID do pagamento deve ser gravado pela sua aplicação para Identificação do Pagamento e Requisições Posteriores, pode ser obtido pelo método: (RespostaVerificarStatusValidador.CodigoAutorizacao)

Passo 2:  VerificarStatusValidador  (Utilizado apenas em Ambiente de Homologação)

Para Testes em Homologação deve-se utilizar o Site Simulador POS Ceará http://simuladorposceara.azurewebsites.net/ e informar o SerialPOS utilizado no envio, para Simular o Pagamento Efetuado

Após a Confirmação de Pagamento utilizando o Emulador,  deve realizar a chamada do método: VerificarStatusValidador informando o ID Pagamento:

with VerificarStatusValidador do
begin
  Clear;
  ChaveAcessoValidador := '25CFE38D-3B92-46C0-91CA-CFF751A82D3D';                          
  IDFila := StrToIntDef(InputBox('IDPagmento','Informe o ID do Pagamento',''),0);          
  CNPJ:= edtEmitCNPJ.Text;                                                                
end;

Definição sobre os Campos:

Chave de Acesso Validador – Esta chave é fixa, está Pré-Definida no Manual Do Integrador Fiscal.

ID FIla – Este campo se trata do “ID Pagamento” retornado no primeiro método

CNPJ –   CNPJ do Emitente

 

Será obtido como retorno o XML com a simulação da Autorização de Pagamento:

Lembrando que em Produção não é possível realizar o Passo 2, pula direto para o passo 3:

Passo 3:  RespostaFiscal 

Após o Envio do XML de Venda para o MFe ou Integrador (no caso de NFC-e), realiza-se o passo 3, apenas para Vincular o Pagamento com Cartão a um Documento Fiscal, através do método: RespostaFiscal

RespostaFiscal := TRespostaFiscal.Create;
    try
      with RespostaFiscal do
      begin
        Clear;
        ChaveAcessoValidador := '25CFE38D-3B92-46C0-91CA-CFF751A82D3D';                           
        IDFila := StrToIntDef(InputBox('IDPagmento','Informe o ID do Pagamento',''),0);           
        ChaveAcesso := '35170408723218000186599000113100000279731880';                           
        Nsu := '1674068';                                                                        
        NumerodeAprovacao := '123456';                                                             
        Bandeira := 'VISA';                                                                       
        Adquirente := 'STONE';                                                                    
        if Assigned(ACBrSAT1.CFe) and (ACBrSAT1.Extrato= ACBrSATExtratoESCPOS1) then
          ImpressaoFiscal := '<![CDATA['+ACBrSATExtratoESCPOS1.GerarImpressaoFiscalMFe+']]>';     
        NumeroDocumento := '1674068';                                                            
        CNPJ:= edtEmitCNPJ.Text;                                                                  
      end;
      
    finally
      RespostaFiscal.Free;
    end;

Definição sobre Principais Campos:

Chave de Acesso Validador – Esta chave é fixa, está Pré-Definida no Manual Do Integrador Fiscal.

ID FIla – Este campo se trata do “ID Pagamento” retornado no primeiro método

ChaveAcesso –   Refere-se a Chave do CFe de Venda gerado pelo MFe ou Integrador Fiscal (no caso de NFC-e)

NSU –   Fornecido pela Adquirente (Autorizadora de Pagamento) – Como não existe este equipamento POS Integrado conforme previsão inicial, está sendo informado um valor fixo.

NumeroAprovacao –   Código de Autorização de Pagamento Retornado pela Adquirente – Como não existe este equipamento POS Integrado conforme previsão inicial, está sendo informado um valor fixo.

ImpressaoFiscal –   A Intensão futura será passar o Extrato do CFe para impressão no aparelho POS (A Função GerarImpressaoFiscalMFe já gera o Modelo do Cupom a ser impresso)

NumeroDocumento –   Número do Cupom Fiscal Autorizado.

Será obtido o XML Retorno com o Código de Processamento da Resposta Fiscal.

Encerra-se o Processo VPE – utilizando o P.O.S.

 

 

Utilizando Integração VPE com Pagamento TEF

Passo 1:  EnviarStatusPagamento

Informações a ser enviada neste método:

StatusPagamentoMFe := TStatusPagamento.Create;
  try
    with StatusPagamentoMFe do
    begin
      Clear;
      ChaveAcessoValidador := '25CFE38D-3B92-46C0-91CA-CFF751A82D3D';     
      CodigoAutorizacao := '20551';                                       
      Bin := '123456';                                                    
      DonoCartao := 'TESTE';                                              
      DataExpiracao := '01/01';                                           
      InstituicaoFinanceira:= 'STONE';                                    
      Parcelas := 1;                                                      
      CodigoPagamento := '12846';                                         
      ValorPagamento := 1530;                                             
      IDFila := 1674068;                                                  
      Tipo := '1';                                                        
      UltimosQuatroDigitos := 1234;                                       
    end;
   
  finally
    StatusPagamentoMFe.Free;
  end;

Definição sobre Principais Campos:

Chave de Acesso Validador – Esta chave é fixa, está Pré-Definida no Manual Do Integrador Fiscal.

Obs: Para quem utiliza o Componente ACBrTEFD os dados do cartão e de Confirmação de Pagamento, utilizados no pagamento TEF podem ser obtidos
acessando a propriedade ACBrTEFDRespNFCeSAT da Classe de retorno TACBrTEFDResp do Componente ACBrTEFD, automatizando assim o preenchimento destes dados. 

Será obtido o XML Retorno com o Código de Processamento do Status de Pagamento.

 

Passo 2:  RespostaFiscal 

Após o Envio do XML de Venda para o MFe (ou Integrador no caso de NFC-e), realiza o passo 2, apenas para Vincular um Pagamento com Cartão ao Documento Fiscal, através do método: RespostaFiscal

RespostaFiscal := TRespostaFiscal.Create;
    try
      with RespostaFiscal do
      begin
        Clear;
        ChaveAcessoValidador := '25CFE38D-3B92-46C0-91CA-CFF751A82D3D';                           
        IDFila := StrToIntDef(InputBox('IDPagmento','Informe o ID do Pagamento',''),0);           
        ChaveAcesso := '35170408723218000186599000113100000279731880';                           
        Nsu := '1674068';                                                                        
        NumerodeAprovacao := '123456';                                                             
        Bandeira := 'VISA';                                                                       
        Adquirente := 'STONE';                                                                    
        if Assigned(ACBrSAT1.CFe) and (ACBrSAT1.Extrato= ACBrSATExtratoESCPOS1) then
          ImpressaoFiscal := '<![CDATA['+ACBrSATExtratoESCPOS1.GerarImpressaoFiscalMFe+']]>';     
        NumeroDocumento := '1674068';                                                            
        CNPJ:= edtEmitCNPJ.Text;                                                                  
      end;
      
    finally
      RespostaFiscal.Free;
    end;

Definição sobre Principais Campos:

Chave de Acesso Validador – Esta chave é fixa, está Pré-Definida no Manual Do Integrador Fiscal.

ID FIla – Este campo se trata do “ID Pagamento” retornado no primeiro método

ChaveAcesso –   Refere-se a Chave do CFe de Venda gerado pelo MFe ou Integrador Fiscal (no caso de NFC-e)

NSU –   Fornecido pela Adquirente (Autorizadora de Pagamento) – Como não existe este equipamento POS Integrado conforme previsão inicial, está sendo informado um valor fixo.

NumeroAprovacao –   Código de Autorização de Pagamento Retornado pela Adquirente – Como não existe este equipamento POS Integrado conforme previsão inicial, está sendo informado um valor fixo.

ImpressaoFiscal –   A Intensão futura é utilizar no Aparelho POS

NumeroDocumento –   Número do Cupom Fiscal Autorizado.

Será obtido o XML Retorno com o Código de Processamento da Resposta Fiscal.

Encerra o Processo VPE – utilizando o TEF

 

 

Veja Mais detalhes sobre o Fluxo de Venda utilizando POS e TEF em:

https://servicos.sefaz.ce.gov.br/internet/download/projetomfe/FluxoVendaPDVUtilizandoPOS.pdf

https://servicos.sefaz.ce.gov.br/internet/download/projetomfe/FluxoVendaPDVUtilizandoTEF.pdf

Manual Integrador:

http://cfe.sefaz.ce.gov.br/mfe/informacoes/downloads#/

 

Fonte: https://www.projetoacbr.com.br/forum/topic/51588-vpe-validador-de-pagamentos-eletr%C3%B4nicos-utilizando-o-integrador-fiscal-ce/

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DLL emulador SAT, fechando aplicação ao ser consumida

Bom dia amigos,

estou usando o emulador do SAT encontrado no site da SEFAZ para testar minha aplicação em C# .NET. Estou com um problema que, quando tento consumir a SAT.dll, todos os métodos importados da DLL por qual minha aplicação passa, ela fecha inesperadamente sem dar catch em nenhum exceção.

 

Estou importando a DLL dessa forma:

[DllImport("dllsat.dll", CallingConvention = CallingConvention.Cdecl)] public static extern string EnviarDadosVenda(int iNumSessao, string pcCodAtivacao, string pcDadosVenda);

No meu método, esta assim:

        public static void enviarDadosCFeToSat()
        {
            try
            {
                var xml = readFileXML();
                int numSessao = gerarNumeroSessao();
                string codAtivacao = "123456789";

                var resposta = EnviarDadosVenda(numSessao, codAtivacao, xml);
            }
            catch 
            {
                throw;
            }
        }

Ao passar pelo método EnviarDadosVenda(x, y, z), a resposta no LOG é:

  Citar

[2019-01-16 11:02:41.619]:Erro: Falha na estrutura do XML de venda.
[2019-01-16 11:02:41.626]:ERRO NA EMISSAO: 1999: null

Entendo que o XML possa estar errado, mas a minha aplicação fecha inesperadamente e não importa qual tratamento que dou, ele não apresenta a exceção. Alguém sabe como implementar de forma que a aplicação não feche? Mesmo os métodos que passam com sucesso pela dll acabam por fechar após chamar a DLL.

 

Grato

 

SOLUÇÃO:

 

Já resolvi! Se puderem fechar o post, agradeço. Se alguém passar por isso no futuro, segue a solução abaixo.

Tive que fazer as seguintes modificações no código:

        [DllImport("dllsat.dll", CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr EnviarDadosVenda(int iNumSessao, string pcCodAtivacao, string pcDadosVenda);

e no meu método:

        public static void enviarDadosCFeToSat()
        {
            try
            {
                readFileXML();
                int numSessao = 2;
                string codAtivacao = "123456789";

                IntPtr ptr = EnviarDadosVenda(numSessao, codAtivacao, xml);
                string s = Marshal.PtrToStringAnsi(ptr);
            }
            catch 
            {
                throw;
            }
        }

Fonte: https://www.projetoacbr.com.br/forum/topic/48771-dll-emulador-sat-fechando-minha-aplica%C3%A7%C3%A3o-ao-ser-consumida/?_fromLogin=1#_=_