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;