IMPRESSORA PARA AUTENTICA?ÃO DE BOLETOS
Olá pessoal
Seguinte, um cliente comprou uma impressora para autenticar boletos, aquelas pequenas.
O sistema vai levar informações para a impressora autenticar.
Como isso funciona. A secretária faz a baixa com data, valor pago, etc. E aÃ?
é gerado um arquivo com dados do boletos? preciso enviar um protocolo?
nunca fiz isso. Não sei por onde começar. E como posso testar sem ter a impressora?
podem me dar algumas dicas?
Grato
www.cjsystem.com.br
Seguinte, um cliente comprou uma impressora para autenticar boletos, aquelas pequenas.
O sistema vai levar informações para a impressora autenticar.
Como isso funciona. A secretária faz a baixa com data, valor pago, etc. E aÃ?
é gerado um arquivo com dados do boletos? preciso enviar um protocolo?
nunca fiz isso. Não sei por onde começar. E como posso testar sem ter a impressora?
podem me dar algumas dicas?
Grato
www.cjsystem.com.br
JCM, acho que a maneira mais prática é você pegar as informações criticas desse registro (data do pagamento, valor, usuário, ip, n.° doc, etc), agrupar em uma sequência de texto e gerar uma hash com alguma criptografia. Após isso, salvar esse hash num campo de sua tabela. E ai quando vc precisar conferir se o registro é autêntico bastaria refazer o processo e comparar com o resultado no banco.
Abaixo um modelo bem simples que fiz a tempos atrás:
Abaixo um modelo bem simples que fiz a tempos atrás:
public string GerarNumeroAutenticacao(string nroDoc, DateTime dataPagto, decimal valorPago, int formaPgto)
{
// define as variáveis da autenticação
string dpg = string.Format([Ô]{0:ddMMMyyyy}[Ô], dataPagto).ToUpper();
string nn = string.Format([Ô]{0,11}[Ô], nroDoc);
string vr = string.Format([Ô]{0:###,###,##0.00}[Ô], valorPago).Replace([Ô] [Ô], [Ô]*[Ô]);
string fpg = new string[] { [Ô][Ô], [Ô]DN[Ô], [Ô]CH[Ô] }[formaPgto];
string empr = string.Format([Ô]{0:000}[Ô], wks.EmpresaAtiva?.Codigo);
// gera a autendicação em MD5
var md5 = MD5.Create();
byte[] inputBytes = Encoding.ASCII.GetBytes(nn);
byte[] hash = md5.ComputeHash(inputBytes);
var sb = new StringBuilder();
for (int i = 0; i < hash.Length; i++)
sb.Append(hash[i].ToString([Ô]X2[Ô]));
// obtém os dados da autenticação
string auth = sb.ToString().ToUpper().Substring(0, 16);
// AUT 31DEZ9999 0000000000000000 ********0,00RDN001
return string.Format([Ô]AUT {0} {1} {3}R{4}{5}[Ô], dpg, auth, vr, fpg, empr);
}
Bom, por enquanto vou deixar a cryptografia de lado.
O cliente me mandou a impressora
O problema está nas configurações do tipo de caracter, local da impressão (bobina ou na folha só para autenticar), etc.
Não sei como programo isso no VB net são inúmeros códigos
podem me ajudar?
Uso o crystal, não sei se ajuda em algo.
A impressora é uma Perto Printer Autenticadora
Se precisar eu tiro umas fotos do manual, não achei o manual completo na internet para postar aqui
www.perto.com.br
http://mlb-d1-p.mlstatic.com/impressora-termica-perto-printer-com-autenticador-740621-MLB20805176509_072016-O.webp?square=false
Coloquei um texto no word só para testar imprimiu caracteres especiais na bobina
Grato
O cliente me mandou a impressora
O problema está nas configurações do tipo de caracter, local da impressão (bobina ou na folha só para autenticar), etc.
Não sei como programo isso no VB net são inúmeros códigos
podem me ajudar?
Uso o crystal, não sei se ajuda em algo.
A impressora é uma Perto Printer Autenticadora
Se precisar eu tiro umas fotos do manual, não achei o manual completo na internet para postar aqui
www.perto.com.br
http://mlb-d1-p.mlstatic.com/impressora-termica-perto-printer-com-autenticador-740621-MLB20805176509_072016-O.webp?square=false
Coloquei um texto no word só para testar imprimiu caracteres especiais na bobina
Grato
JCM, pelo que li do manual, ela aceita impressão via comandos ESC/POS, igual as antigas EPSON LX 300. Abaixo segue um pequeno exemplo:
Classe RawPrinterHelper, utlizada para envio dos comandos diretamente para impressora
Método para impressão:
Faça uma pesquisa sobre os comandos ESC/POS para configuração de outros valores como fonte em negrito, tamanho duplo, etc.
Qualquer dúvida é só avisar.
Classe RawPrinterHelper, utlizada para envio dos comandos diretamente para impressora
public class RawPrinterHelper
{
// Structure and API declarations:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public class DOCINFOA
{
[MarshalAs(UnmanagedType.LPStr)]
public string pDocName;
[MarshalAs(UnmanagedType.LPStr)]
public string pOutputFile;
[MarshalAs(UnmanagedType.LPStr)]
public string pDataType;
}
[DllImport([Ô]winspool.Drv[Ô], EntryPoint = [Ô]OpenPrinterA[Ô], SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
public static extern bool OpenPrinter([MarshalAs(UnmanagedType.LPStr)] string szPrinter, ref IntPtr hPrinter, IntPtr pd);
[DllImport([Ô]winspool.Drv[Ô], EntryPoint = [Ô]ClosePrinter[Ô], SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
public static extern bool ClosePrinter(IntPtr hPrinter);
[DllImport([Ô]winspool.Drv[Ô], EntryPoint = [Ô]StartDocPrinterA[Ô], SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
public static extern bool StartDocPrinter(IntPtr hPrinter, Int32 level, [In(), MarshalAs(UnmanagedType.LPStruct)] DOCINFOA di);
[DllImport([Ô]winspool.Drv[Ô], EntryPoint = [Ô]EndDocPrinter[Ô], SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
public static extern bool EndDocPrinter(IntPtr hPrinter);
[DllImport([Ô]winspool.Drv[Ô], EntryPoint = [Ô]StartPagePrinter[Ô], SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
public static extern bool StartPagePrinter(IntPtr hPrinter);
[DllImport([Ô]winspool.Drv[Ô], EntryPoint = [Ô]EndPagePrinter[Ô], SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
public static extern bool EndPagePrinter(IntPtr hPrinter);
[DllImport([Ô]winspool.Drv[Ô], EntryPoint = [Ô]WritePrinter[Ô], SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
public static extern bool WritePrinter(IntPtr hPrinter, IntPtr pBytes, Int32 dwCount, ref Int32 dwWritten);
private IntPtr hPrinter = new IntPtr(0);
private DOCINFOA di = new DOCINFOA();
private bool PrinterOpen = false;
public bool PrinterIsOpen
{
get { return PrinterOpen; }
}
public bool OpenPrint(string szPrinterName)
{
if (!PrinterOpen)
{
di.pDocName = [Ô].NET RAW Document[Ô];
di.pDataType = [Ô]RAW[Ô];
if (OpenPrinter(szPrinterName.Normalize(), ref hPrinter, IntPtr.Zero))
{
// Start a document.
if (StartDocPrinter(hPrinter, 1, di))
{
if (StartPagePrinter(hPrinter))
PrinterOpen = true;
}
}
}
return PrinterOpen;
}
public void ClosePrint()
{
if (PrinterOpen)
{
EndPagePrinter(hPrinter);
EndDocPrinter(hPrinter);
ClosePrinter(hPrinter);
PrinterOpen = false;
}
}
public bool SendStringToPrinter(string szPrinterName, string szString)
{
if (PrinterOpen)
{
Int32 dwWritten = 0;
Int32 dwCount = szString.Length;
var pBytes = Marshal.StringToCoTaskMemAnsi(szString);
bool ret = WritePrinter(hPrinter, pBytes, dwCount, ref dwWritten);
Marshal.FreeCoTaskMem(pBytes);
return ret;
}
else
{
return false;
}
}
}
Método para impressão:
void ImprimirAutenticacaoRaw(string nro)
{
// create ESC/POS commands
string ESC = ((char)27).ToString(); // ESC byte
string NewLine = ((char)10).ToString(); // LF byte
string cmds = ESC + [Ô]@[Ô]; //Initializes the printer (ESC @)
cmds += ESC + [Ô]![Ô] + ((char)0).ToString(); //Character font A selected (ESC ! 0)
cmds += ESC + ((char)80).ToString();
cmds += ESC + ((char)15).ToString();
cmds += ESC + ((char)79).ToString();
cmds += nro;
cmds += NewLine;
// realiza a impressão
var prn = new RawPrinterHelper();
prn.OpenPrint([Ô]LPT1:[Ô]);
if (prn.PrinterIsOpen) prn.SendStringToPrinter([Ô]LPT1:[Ô], cmds);
prn.ClosePrint();
}
Faça uma pesquisa sobre os comandos ESC/POS para configuração de outros valores como fonte em negrito, tamanho duplo, etc.
Qualquer dúvida é só avisar.
Descobri uma coisa bem triste falando com o suporte da PERTO
Essa impressora ha anos não é mais comercializada, alguém empurrou para meu cliente um estoque encalhado.
Disseram eles que ela só funciona no windows XP 32 bits pois não existe driver para windows recente.
Disseram que não funcionará com o drive da EPSON LX 300.
Consegui instalar com outro drive, na página de teste imprimiu só caracteres especiais.
será que tem solução?
Meu cliente está com o windows 8.1 32bits com processador 64bits
Grato
Essa impressora ha anos não é mais comercializada, alguém empurrou para meu cliente um estoque encalhado.
Disseram eles que ela só funciona no windows XP 32 bits pois não existe driver para windows recente.
Disseram que não funcionará com o drive da EPSON LX 300.
Consegui instalar com outro drive, na página de teste imprimiu só caracteres especiais.
será que tem solução?
Meu cliente está com o windows 8.1 32bits com processador 64bits
Grato
Está quase,
Um suporte me disse para por impressora generic que funcionou na bobina termica
e nas propriedade da impressora em Comandos da impressora pediram para por:
<1B><7E><01> // Liga Autenticadora
<1B><7E><00> // Desiga Autenticadora
Só que continuou imprimindo só na Bobina termica
O que falta será?
Um suporte me disse para por impressora generic que funcionou na bobina termica
e nas propriedade da impressora em Comandos da impressora pediram para por:
<1B><7E><01> // Liga Autenticadora
<1B><7E><00> // Desiga Autenticadora
Só que continuou imprimindo só na Bobina termica
O que falta será?
Bom, como a impressora é antiga sem suporte a windows recente e só funciona na impressora generic
O cliente aceitou fazer a impressora imprimir dois recibos e serão grampeado nas duas vias dos Boletos.
Grato
O cliente aceitou fazer a impressora imprimir dois recibos e serão grampeado nas duas vias dos Boletos.
Grato
Tópico encerrado , respostas não são mais permitidas