Olá pessoal...
Como vocês sabem, em uma menu Administrativo do TEF (ADM), é possível efetuar várias operações, inclusive um Cancelamento de Pagamento TEF realizado anteriormente..
Nessa situação, a Aplicação Comercial pode necessitar ser informada de que houve um Cancelamento e identificar corretamente a transação TEF que foi Cancelada. Isso pode ser útil para refletir esse status de Cancelamento em sua base de dados local, ou até mesmo providenciar outros estornos e devoluções...
Mas como podemos detectar no Log de retorno de uma transação Administrativa (ADM), se houve ou não um Cancelamento ou uma simples reimpressão ?
A resposta abaixo, se refere ao TEF PayGo Web, usando o componente ACBrTEFD.
O componente ACBrTEFD, mapeia os retornos do Log do TEF, para propriedades internas do Objeto TACBrTEFResp, isso é feito no método TACBrTEFResp.ConteudoToProperty, que é sobreposto em cada Classe de TEF... Para ver o mapeamento que o ACBrTEFD realiza com os Logs da PayGoWeb, veja na Unit ACBrTEFPayGoComum.pas, a procedure ConteudoToPropertyPayGoWeb(AACBrTEFResp: TACBrTEFResp);
Analisando o Log de um ADM, onde ocorreu o Cancelamento... temos as seguintes respostas:
PWINFO_TOTAMNT=000000000300 -> Resp.ValorTotal
PWINFO_TRNORIGDATE=291020 -> Resp.DataHoraTransacaoCancelada
PWINFO_TRNORIGNSU=000092672 -> Resp.NSUTransacaoCancelada
PWINFO_TRNORIGREQNUM=0000216525
PWINFO_TRNORIGTIME=101830 -> Resp.DataHoraTransacaoCancelada
PWINFO_RCPTMERCH= *** PAYGO - AMBIENTE SANDBOX *** \x0D\x0A Via Estabelecimento...... -> Resp.ImagemComprovante1aVia.Text
Ou seja, se o Cancelamento ocorreu com sucesso, teremos a impressão de um comprovante desse cancelamento, e os dados da transação Cancelada... então podemos analisar a resposta com o IF abaixo:
if (ACBrTEFD.Resp.NSUTransacaoCancelada <> EmptyStr) and
(Trim(ACBrTEFD.Resp.ImagemComprovante1aVia.Text) <> EmptyStr) then
// HouveCancelamento
Um bom local para fazer esse tipo de Verificação é no evento "OnDepoisConfirmarTransacoes"