Ir para conteúdo
  • Cadastre-se

CNC retorna False mesmo a Transação sendo Negada


Ver Solução Respondido por Roberto Henrique Borges Machado,

Recommended Posts

Postado

Tudo bem?

Estou utilizando o CNC para cancelar uma transação.

function TACBrTEFD.CNC(const Rede, NSU: String;
  const DataHoraTransacao: TDateTime; const Valor: Double;
  CodigoAutorizacaoTransacao: String): Boolean;
begin
  Result := fTefClass.CNC( Rede, NSU, DataHoraTransacao, Valor, CodigoAutorizacaoTransacao);
end;

O problema é que a função retorna True mesmo quando a transação é negada. Não está sendo possível identificar se o cancelamento foi realmente concluído.

  • Consultores
Postado

Olá Roberto,

Fico muito satisfeita em saber que você está utilizando os componentes do ACBr na sua integração TEF, isso mostra que já está trabalhando com uma base sólida e reconhecida no mercado.

Sua postagem foi realizada na área aberta da Comunidade ACBr. Nessa área, as respostas são feitas por membros da nossa comunidade, que contribuem conforme disponibilidade e conhecimento no tema.

Para ter acesso ao atendimento direto com nossos Consultores especializados em TEF, é necessário ser uma Revenda da Distribuição ACBr TEF. Nessas áreas exclusivas, o suporte é estruturado, prioritário e conduzido pelo nosso time técnico.

Encaminhei um e-mail para que possamos conversar melhor e entender seu cenário.

Caso já queira adiantar o processo, você pode preencher o formulário no link abaixo. Assim que recebermos suas informações, nossa equipe entrará em contato para esclarecer todas as dúvidas e apresentar as condições para se tornar um Parceiro ACBr TEF:

https://projetoacbr.com.br/tef/

  • Moderadores
Postado
4 horas atrás, Roberto Henrique Borges Machado disse:

Tudo bem?

Estou utilizando o CNC para cancelar uma transação.

function TACBrTEFD.CNC(const Rede, NSU: String;
  const DataHoraTransacao: TDateTime; const Valor: Double;
  CodigoAutorizacaoTransacao: String): Boolean;
begin
  Result := fTefClass.CNC( Rede, NSU, DataHoraTransacao, Valor, CodigoAutorizacaoTransacao);
end;

O problema é que a função retorna True mesmo quando a transação é negada. Não está sendo possível identificar se o cancelamento foi realmente concluído.

você esta usando o ACBrTEFD?

pois esse componente não recebe atualização a muito tempo,

para um melhor suporte eu recomendo vc trocar pelo componente ACBrTEFAPI.

 

Postado
1 hora atrás, datilas disse:

você esta usando o ACBrTEFD?

pois esse componente não recebe atualização a muito tempo,

para um melhor suporte eu recomendo vc trocar pelo componente ACBrTEFAPI.

 

Utilizo o ACBrTEF.
Bem complicado realizar uma troca nesse momento.
Vou fazer uma alteração no componente para utilizar internamente apenas.

Obrigado.

  • Consultores
Postado
5 horas atrás, Roberto Henrique Borges Machado disse:

Utilizo o ACBrTEF.
Bem complicado realizar uma troca nesse momento.
Vou fazer uma alteração no componente para utilizar internamente apenas.

Obrigado.

Creio que não pois é bem simples

acho que tu separou das telas o processo de TEF . os comandos são quase os mesmos pois o processo é o mesmo

 

Consultora ACBr Pro

Juliomar Marchetti

Ajude o Projeto ACBr crescer - Seja Pro

discord: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br

 

MVP_NewLogo_100x100_Transparent-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Postado (editado)
11 horas atrás, Juliomar Marchetti disse:

Creio que não pois é bem simples

acho que tu separou das telas o processo de TEF . os comandos são quase os mesmos pois o processo é o mesmo

Perdão, Juliomar. Eu não entendi, poderia explicar, por favor?

Edit 1: Estou chamando a function errada?

Editado por Roberto Henrique Borges Machado
Postado

Pude identificar o problema.
ProcessarResposta limpa Frm_Main.ACBrTEFD.RespostasPendentes após impressão do cancelamento, não permitindo mais capturar a Objects[0].Sucesso.
FinalizarResposta limpa Frm_Main.ACBrTEFD.Resp, voltando valores padrões onde ao acessar Resp.Sucesso já está como False.

Poderia solucionar o processo retirando de FinalizarResposta o Resp.Clear, mas como há a chamada em outras partes do código, não sei qual a consequência dessa ação.

function TACBrTEFDClass.CNC(Rede, NSU: String; DataHoraTransacao: TDateTime;
  Valor: Double; CodigoAutorizacaoTransacao: String): Boolean;
begin
  IniciarRequisicao('CNC');
  Req.ValorTotal := Valor;
  Req.Rede := Rede;
  Req.NSU := NSU;
  Req.DataHoraTransacaoComprovante := DataHoraTransacao;
  if (CodigoAutorizacaoTransacao <> '') then
    Req.CodigoAutorizacaoTransacao := CodigoAutorizacaoTransacao;

  AdicionarIdentificacao;
  FinalizarRequisicao;

  LerRespostaRequisicao;
  Result := Resp.TransacaoAprovada;
  try
     ProcessarResposta ;         { Faz a Impressão e / ou exibe Mensagem ao Operador }
  finally
     FinalizarResposta( True ) ; { True = Apaga Arquivo de Resposta }
  end;
end;
procedure TACBrTEFDClass.ProcessarResposta ;
var
   RespostaPendente: TACBrTEFDResp;
begin
  VerificarIniciouRequisicao;

  GravaLog( Name +' ProcessarResposta: '+Req.Header );

  TACBrTEFD(Owner).EstadoResp := respProcessando;

  if Resp.QtdLinhasComprovante > 0 then
  begin
    { Cria cópia do Objeto Resp, e salva no ObjectList "RespostasPendentes" }
    RespostaPendente := CriarResposta(fpTipo);
    try
      RespostaPendente.Assign( Resp );
      TACBrTEFD(Owner).RespostasPendentes.Add( RespostaPendente );

      ImprimirRelatorio ;

      with TACBrTEFD(Owner) do
      begin
        if Assigned( OnDepoisConfirmarTransacoes ) then
          OnDepoisConfirmarTransacoes( RespostasPendentes );
      end ;
    finally
      TACBrTEFD(Owner).RespostasPendentes.Clear; // limpa as respostas pendente e não se pode mais acessar a variável Sucesso após sair da Function CNC
    end;
  end
  else
    if Resp.TextoEspecialOperador <> '' then
      TACBrTEFD(Owner).DoExibeMsg( opmOK, Resp.TextoEspecialOperador )
end;
procedure TACBrTEFDClass.FinalizarResposta( ApagarArqResp : Boolean );
begin
   TACBrTEFD(Owner).EstadoResp := respConcluida;

   GravaLog( Name +' FinalizarResposta: '+Req.Header );

   if ApagarArqResp then
      ApagaEVerifica( ArqResp );

   Req.Clear;
   Resp.Clear; // limpa o Resp, retornando a variável Sucesso para False, é possível acessar o Resp.Sucesso após sair da function CNC, mas Resp não tem mais os valores da resposta
end;

 

  • Solution
Postado
function TACBrTEFDClass.CNC(Rede, NSU: String; DataHoraTransacao: TDateTime;
  Valor: Double; CodigoAutorizacaoTransacao: String): Boolean;
begin
  IniciarRequisicao('CNC');
  Req.ValorTotal := Valor;
  Req.Rede := Rede;
  Req.NSU := NSU;
  Req.DataHoraTransacaoComprovante := DataHoraTransacao;
  if (CodigoAutorizacaoTransacao <> '') then
    Req.CodigoAutorizacaoTransacao := CodigoAutorizacaoTransacao;

  AdicionarIdentificacao;
  FinalizarRequisicao;

  LerRespostaRequisicao;

  Result := Resp.TransacaoAprovada and (Resp.QtdLinhasComprovante > 0); // solução
  try
     ProcessarResposta ;         { Faz a Impressão e / ou exibe Mensagem ao Operador }
  finally
     FinalizarResposta( True ) ; { True = Apaga Arquivo de Resposta }
  end;
end;

 

  • Consultores
Postado

o que falei é que a troca do ACBrTEFD pelo ACBrTEFAPI é rápida.

se o seu código foi bem estruturado, não misturou regra de negocio com persistencia de dados ou formulário

é super rápido a troca e solução do seu problema

 

Consultora ACBr Pro

Juliomar Marchetti

Ajude o Projeto ACBr crescer - Seja Pro

discord: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br

 

MVP_NewLogo_100x100_Transparent-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Postado
2 horas atrás, Juliomar Marchetti disse:

o que falei é que a troca do ACBrTEFD pelo ACBrTEFAPI é rápida.

se o seu código foi bem estruturado, não misturou regra de negocio com persistencia de dados ou formulário

é super rápido a troca e solução do seu problema

Parece simples, mas tenho o problema de ser funcionário, e não dono kkkk'

A solução que encontrei sana o problema. Devo subir para análise de junção ao SVN?

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.