Business - Automação Comercial

Bematech: Transferência Eletrônica de Fundos (T.E.F.) - Discado - Passo 4/10 - Confirmando uma transação TEF

No passo anterior, realizamos uma venda de cupom fiscal com pagamento em cartão e fizemos nossa primeira transação TEF com impressão do comprovante. Agora, precisamos validar esta transação!

por André Luiz R. Munhoz



No passo anterior, realizamos uma venda de cupom fiscal com pagamento em cartão e fizemos nossa primeira transação TEF com impressão do comprovante. Agora, precisamos validar esta transação!

Vamos criar duas funções para isso:

- uma para confirmar a transação TEF (ConfirmaTransacao) e;
- outra para não confirmar a transação TEF (NaoConfirmaTransacao).

Ou seja, precisamos controlar estes dois processos, pois estaremos enfrentando situações onde a impressora passará por erros de comunicação (desligamentos) ou quedas de energia (veremos isso nas próximas edições).

Estaremos visualizando este código em dois exemplos básicos. Um desenvolvido em Delphi e outro em Visual Basic.

- Exemplo em Delphi

//////////////////////////////////////////////////////////
// Função: ConfirmaTransacao
// Objetivo: Confirmar a Transação TEF
// Parâmetros: não há
// Retorno: True para OK ou False para não OK
//////////////////////////////////////////////////////////
function ConfirmaTransacao: boolean;
var cLinhaArquivo, cConteudo: string;
cArquivo: TextFile;
lFlag : longbool;
begin
cLinhaArquivo := "";
cConteudo := "";
AssignFile( cArquivo, "C:\TEF_DIAL\RESP\INTPOS.001" );
Reset( cArquivo );
while not EOF( cArquivo ) do
begin
ReadLn( cArquivo, cLinhaArquivo );
if ( copy( cLinhaArquivo, 1, 3 ) = "001" ) or
( copy( cLinhaArquivo, 1, 3 ) = "002" ) or
( copy( cLinhaArquivo, 1, 3 ) = "010" ) or
( copy( cLinhaArquivo, 1, 3 ) = "012" ) or
( copy( cLinhaArquivo, 1, 3 ) = "027" ) then
cConteudo := cConteudo + cLinhaArquivo + #13 + #10;
if ( copy( cLinhaArquivo, 1, 3 ) = "999" ) then
cConteudo := cConteudo + cLinhaArquivo;
end;
CloseFile( cArquivo );
cConteudo := "000-000 = CNF" + #13 + #10 + cConteudo;
AssignFile( cArquivo, "INTPOS.001" );
ReWrite( cArquivo );
WriteLn( cArquivo, cConteudo );
CloseFile( cArquivo );
CopyFile( pchar( "INTPOS.001" ),
pchar( "C:\TEF_DIAL\REQ\INTPOS.001" ), lFlag );
DeleteFile( "INTPOS.001" );
if ( FileExists( "C:\TEF_DIAL\RESP\INTPOS.STS" ) ) then
DeleteFile( "C:\TEF_DIAL\RESP\INTPOS.STS" );
if ( FileExists( "C:\TEF_DIAL\RESP\INTPOS.001" ) ) then
DeleteFile( "C:\TEF_DIAL\RESP\INTPOS.001" );
end;

//////////////////////////////////////////////////////////
// Função: NaoConfirmaTransacao
// Objetivo: Não Confirmar a Transação TEF
// Parâmetros: não há
// Retorno: True para OK ou False para não OK
//////////////////////////////////////////////////////////
function NaoConfirmaTransacao: boolean;
var cLinhaArquivo, cConteudo: string;
cArquivo: TextFile;
lFlag : longbool;
cValor, cNomeRede, cNSU: string;
begin
cLinhaArquivo := "";
cConteudo := "";
AssignFile( cArquivo, "C:\TEF_DIAL\RESP\INTPOS.001" );
Reset( cArquivo );
while not EOF( cArquivo ) do
begin
ReadLn( cArquivo, cLinhaArquivo );
if ( copy( cLinhaArquivo, 1, 3 ) = "001" ) then
cConteudo := cConteudo + cLinhaArquivo + #13 + #10;
if ( copy( cLinhaArquivo, 1, 3 ) = "003" ) then
cValor := copy( cLinhaArquivo, 11, Length( cLinhaArquivo ) - 10 );
if ( copy( cLinhaArquivo, 1, 3 ) = "010" ) then
begin
cConteudo := cConteudo + cLinhaArquivo + #13 + #10;
cNomeRede := copy( cLinhaArquivo, 11,
Length( cLinhaArquivo ) - 10 );
end;
if ( copy( cLinhaArquivo, 1, 3 ) = "012" ) then
begin
cConteudo := cConteudo + cLinhaArquivo + #13 + #10;
cNSU := copy( cLinhaArquivo, 11, Length( cLinhaArquivo ) - 10 );
end;
if ( copy( cLinhaArquivo, 1, 3 ) = "027" ) then
cConteudo := cConteudo + cLinhaArquivo + #13 + #10;
if ( copy( cLinhaArquivo, 1, 3 ) = "999" ) then
cConteudo := cConteudo + cLinhaArquivo;
end;
CloseFile( cArquivo );
cConteudo := "000-000 = NCN" + #13 + #10 + cConteudo;
AssignFile( cArquivo, "INTPOS.001" );
ReWrite( cArquivo );
WriteLn( cArquivo, cConteudo );
CloseFile( cArquivo );
CopyFile( pchar( "INTPOS.001" ),
pchar( "C:\TEF_DIAL\REQ\INTPOS.001" ), lFlag );
DeleteFile( "INTPOS.001" );
if ( FileExists( "C:\TEF_DIAL\RESP\INTPOS.STS" ) ) then
DeleteFile( "C:\TEF_DIAL\RESP\INTPOS.STS" );
if ( FileExists( "C:\TEF_DIAL\RESP\INTPOS.001" ) ) then
DeleteFile( "C:\TEF_DIAL\RESP\INTPOS.001" );

Application.MessageBox( pchar( "Cancelada a Transação" + #13 + #13 +
"Rede: " + cNomeRede + #13 + "Doc Nº: " + cNSU + #13 + "Valor: " +
FormatFloat( "#,##0.00", StrToFloat( cValor ) / 100 ) ), "Atenção",
MB_IconInformation + MB_OK );
end;

- Exemplo em Visual Basic

" Função: ConfirmaTransacao
" Objetivo: Confirmar a Transação TEF
" Parâmetros: não há
" Retorno: True para OK ou False para não OK
Function ConfirmaTransacao() As Boolean
Dim cLinhaArquivo As String
Dim cConteudo As String
cLinhaArquivo = ""
cConteudo = ""
Open "C:\TEF_DIAL\RESP\INTPOS.001" For Input As #1
Do While Not EOF(1)
Line Input #1, cLinhaArquivo
If (Mid(cLinhaArquivo, 1, 3) = "001") Or _
(Mid(cLinhaArquivo, 1, 3) = "002") Or _
(Mid(cLinhaArquivo, 1, 3) = "010") Or _
(Mid(cLinhaArquivo, 1, 3) = "012") Or _
(Mid(cLinhaArquivo, 1, 3) = "027") Then
cConteudo = cConteudo + cLinhaArquivo + Chr(13) + Chr(10)
End If
If (Mid(cLinhaArquivo, 1, 3) = "999") Then
cConteudo = cConteudo + cLinhaArquivo
End If
Loop
Close #1
cConteudo = "000-000 = CNF" + Chr(13) + Chr(10) + cConteudo
Open App.Path & "\INTPOS.001" For Binary As #1
Put #1, , cConteudo
Close #1
FileCopy App.Path & "\INTPOS.001", "C:\TEF_DIAL\REQ\INTPOS.001"
Kill App.Path & "\INTPOS.001"
cArquivoSTS = Dir("C:\TEF_DIAL\RESP\INTPOS.STS")
If (cArquivoSTS <> "") Then
Kill "C:\TEF_DIAL\RESP\INTPOS.STS"
End If
cArquivoINTPOS = Dir("C:\TEF_DIAL\RESP\INTPOS.001")
If (cArquivoSTS <> "") Then
Kill "C:\TEF_DIAL\RESP\INTPOS.001"
End If
End Function

" Função: NaoConfirmaTransacao
" Objetivo: Confirmar a Transação TEF
" Parâmetros: não há
" Retorno: True para OK ou False para não OK
Function NaoConfirmaTransacao() As Boolean
Dim cLinhaArquivo As String, cConteudo As String
Dim cValor As String, cNomeRede As String, cNSU As String
cLinhaArquivo = ""
cConteudo = ""
Open "C:\TEF_DIAL\RESP\INTPOS.001" For Input As #1
Do While Not EOF(1)
Line Input #1, cLinhaArquivo
If (Mid(cLinhaArquivo, 1, 3) = "001") Then
cConteudo = cConteudo + cLinhaArquivo + Chr(13) + Chr(10)
End If
If (Mid(cLinhaArquivo, 1, 3) = "003") Then
cValor = Mid(cLinhaArquivo, 11, Len(cLinhaArquivo) - 10)
End If
If (Mid(cLinhaArquivo, 1, 3) = "010") Then
cConteudo = cConteudo + cLinhaArquivo + Chr(13) + Chr(10)
cNomeRede = Mid(cLinhaArquivo, 11, Len(cLinhaArquivo) - 10)
End If
If (Mid(cLinhaArquivo, 1, 3) = "012") Then
cConteudo = cConteudo + cLinhaArquivo + Chr(13) + Chr(10)
cNSU = Mid(cLinhaArquivo, 11, Len(cLinhaArquivo) - 10)
End If
If (Mid(cLinhaArquivo, 1, 3) = "027") Then
cConteudo = cConteudo + cLinhaArquivo + Chr(13) + Chr(10)
End If
If (Mid(cLinhaArquivo, 1, 3) = "999") Then
cConteudo = cConteudo + cLinhaArquivo
End If
Loop
Close #1
cConteudo = "000-000 = NCN" + Chr(13) + Chr(10) + cConteudo
Open App.Path & "\INTPOS.001" For Binary As #1
Put #1, , cConteudo
Close #1
FileCopy App.Path & "\INTPOS.001", "C:\TEF_DIAL\REQ\INTPOS.001"
Kill App.Path & "\INTPOS.001"
cArquivoSTS = Dir("C:\TEF_DIAL\RESP\INTPOS.STS")
If (cArquivoSTS <> "") Then
Kill "C:\TEF_DIAL\RESP\INTPOS.STS"
End If
cArquivoINTPOS = Dir("C:\TEF_DIAL\RESP\INTPOS.001")
If (cArquivoSTS <> "") Then
Kill "C:\TEF_DIAL\RESP\INTPOS.001"
End If
MsgBox "Cancelada a Transação" + Chr(13) + Chr(13) + "Rede: " + _
cNomeRede + Chr(13) + "Doc Nº: " + cNSU + Chr(13) + "Valor: " + _
Format(cValor / 100, "#,##0.00"), vbInformation + vbOKOnly, "Atenção"
End Function
André Luiz R. Munhoz

André Luiz R. Munhoz - Bematech: DSP - Desenvolvimento de Software e Parcerias.
Visite o site: http://www.bematech.com.br.