Ir para conteúdo
  • Cadastre-se

dev botao

PAYGOWEB - Problema parâmetro indevido CNC (PWOPER_SALEVOID)


Ver Solução Respondido por Daniel Simoes,
  • Este tópico foi criado há 1222 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Boa tarde pessoal tudo bem?

Eu estava com um problema ao utiliza o método CNC (ACBrTEFDPayGoWeb), para fazer um cancelamento de TEF, eu não  estava enviando o parâmetro REDE, pois na doc da paygo nao consta como obrigatório, e acontecia que não encontrava a transação para cancelar.

Entrei em contato com o pessoal da paygo, e descobrimos que o que estava causando esse problema é o parâmetro TRNORIGDATETIME  que é enviado nesse método (anexo1).

Segundo a documentação, esse parâmetro não é necessário para a operação(anexo2), e causa esse problema.

Estou abrindo esse tópico, para verificação e se possível, remover o parâmetro.

Abraços

printacbr1.PNG

printacbr2.PNG

  • Fundadores
Postado

Não tenho relato de outros usuários com problemas na chamada do método CNC..

Será que você está realmente passando os parâmetros corretos ?

Não creio que o problema, seja o parâmetro relatado... uma vez que ele é opcional..

Consegue reproduzir o problema, usando o TEFDemoNF ?

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Fundadores
Postado

Se você comentar a linha abaixo, o cancelamento Funciona ?

function TACBrTEFDPayGoWeb.CNC(Rede, NSU: String; DataHoraTransacao: TDateTime;
  Valor: Double; CodigoAutorizacaoTransacao: String): Boolean;
var
  PA: TACBrTEFPGWebAPIParametros;

  procedure CopiarValorDaUltimaResposta(AInfo: Integer);
  var
    AStr: String;
  begin
    AStr := Resp.LeInformacao(AInfo).AsString;
    if (Trim(AStr) <> '') then
      PA.ValueInfo[AInfo] := AStr;
  end;

begin
  PA := TACBrTEFPGWebAPIParametros.Create;
  try
    PA.ValueInfo[PWINFO_AUTHSYST] := Rede;
    PA.ValueInfo[PWINFO_TRNORIGNSU] := NSU;                                            // Mandatorio
    PA.ValueInfo[PWINFO_TRNORIGDATE] := FormatDateTime('DDMMYY', DataHoraTransacao);   // Mandatorio
    PA.ValueInfo[PWINFO_TRNORIGTIME] := FormatDateTime('hhnnss', DataHoraTransacao);   // Mandatorio
    //PA.ValueInfo[PWINFO_TRNORIGDATETIME] := FormatDateTime('YYYYMMDDhhnnss', DataHoraTransacao);   //   <---------- AQUI -----------
    PA.ValueInfo[PWINFO_TRNORIGAMNT] :=  IntToStr(Trunc(RoundTo(Valor * 100,-2)));     // Mandatorio
    if (CodigoAutorizacaoTransacao <> '') then
    begin
      PA.ValueInfo[PWINFO_TRNORIGAUTH] := CodigoAutorizacaoTransacao;                  // Mandatorio
      PA.ValueInfo[PWINFO_TRNORIGAUTHCODE] := CodigoAutorizacaoTransacao;
    end;

    // Se a transação em memória for a mesma que estamos tentando cancelar, vamos copiar mais dados dela...
    if (Resp.Rede = Rede) and (Resp.NSU = NSU) and
       (Resp.ValorTotal = Valor) and (Resp.DataHoraTransacaoLocal = DataHoraTransacao) then
    begin
      PA.ValueInfo[PWINFO_TRNORIGLOCREF] := Resp.Finalizacao;
      PA.ValueInfo[PWINFO_TRNORIGREQNUM] := IntToStr(Resp.NumeroLoteTransacao);
      CopiarValorDaUltimaResposta(PWINFO_MERCHCNPJCPF);
      CopiarValorDaUltimaResposta(PWINFO_CARDTYPE);
      CopiarValorDaUltimaResposta(PWINFO_VIRTMERCH);
      CopiarValorDaUltimaResposta(PWINFO_AUTMERCHID);
      CopiarValorDaUltimaResposta(PWINFO_FINTYPE);
    end;

    FazerRequisicao(fOperacaoCNC, 'CNC', Valor, '', 0, PA);
  finally
    PA.Free;
  end;

  Result := ContinuarRequisicao;
  if Result then
    ProcessarResposta;
end;       

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado
Em 09/07/2021 at 13:04, Daniel Simoes disse:

Se você comentar a linha abaixo, o cancelamento Funciona ?

function TACBrTEFDPayGoWeb.CNC(Rede, NSU: String; DataHoraTransacao: TDateTime;
  Valor: Double; CodigoAutorizacaoTransacao: String): Boolean;
var
  PA: TACBrTEFPGWebAPIParametros;

  procedure CopiarValorDaUltimaResposta(AInfo: Integer);
  var
    AStr: String;
  begin
    AStr := Resp.LeInformacao(AInfo).AsString;
    if (Trim(AStr) <> '') then
      PA.ValueInfo[AInfo] := AStr;
  end;

begin
  PA := TACBrTEFPGWebAPIParametros.Create;
  try
    PA.ValueInfo[PWINFO_AUTHSYST] := Rede;
    PA.ValueInfo[PWINFO_TRNORIGNSU] := NSU;                                            // Mandatorio
    PA.ValueInfo[PWINFO_TRNORIGDATE] := FormatDateTime('DDMMYY', DataHoraTransacao);   // Mandatorio
    PA.ValueInfo[PWINFO_TRNORIGTIME] := FormatDateTime('hhnnss', DataHoraTransacao);   // Mandatorio
    //PA.ValueInfo[PWINFO_TRNORIGDATETIME] := FormatDateTime('YYYYMMDDhhnnss', DataHoraTransacao);   //   <---------- AQUI -----------
    PA.ValueInfo[PWINFO_TRNORIGAMNT] :=  IntToStr(Trunc(RoundTo(Valor * 100,-2)));     // Mandatorio
    if (CodigoAutorizacaoTransacao <> '') then
    begin
      PA.ValueInfo[PWINFO_TRNORIGAUTH] := CodigoAutorizacaoTransacao;                  // Mandatorio
      PA.ValueInfo[PWINFO_TRNORIGAUTHCODE] := CodigoAutorizacaoTransacao;
    end;

    // Se a transação em memória for a mesma que estamos tentando cancelar, vamos copiar mais dados dela...
    if (Resp.Rede = Rede) and (Resp.NSU = NSU) and
       (Resp.ValorTotal = Valor) and (Resp.DataHoraTransacaoLocal = DataHoraTransacao) then
    begin
      PA.ValueInfo[PWINFO_TRNORIGLOCREF] := Resp.Finalizacao;
      PA.ValueInfo[PWINFO_TRNORIGREQNUM] := IntToStr(Resp.NumeroLoteTransacao);
      CopiarValorDaUltimaResposta(PWINFO_MERCHCNPJCPF);
      CopiarValorDaUltimaResposta(PWINFO_CARDTYPE);
      CopiarValorDaUltimaResposta(PWINFO_VIRTMERCH);
      CopiarValorDaUltimaResposta(PWINFO_AUTMERCHID);
      CopiarValorDaUltimaResposta(PWINFO_FINTYPE);
    end;

    FazerRequisicao(fOperacaoCNC, 'CNC', Valor, '', 0, PA);
  finally
    PA.Free;
  end;

  Result := ContinuarRequisicao;
  if Result then
    ProcessarResposta;
end;       

 

Bom dia, exatamente, se comento essa linha, funciona normalmente.

Segue anexo do log simulando o erro

2021_07_12.txt

  • Este tópico foi criado há 1222 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

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.