Miracema/RJ – TEF em VFP

E ahe pessoas…
Nossa muito tempo que não escrevo por aqui.
Mas, enfim, o que tenho para contar, é que estou em Miracema, região norte do Rio de Janeiro, cidade calma, pacata, onde as ruas do centro da cidade são de paralelepípedo, e que só se vê asfalto nas vias de chegada/saída da cidade.
Vim com o objetivo profissional de passar conhecimento (consultoria) parao software de um amigo meu, passar na homologação do TEF(transferência eletrônica de fundos). Para quem não sabe, o TEF é o que permite você ir nas grandes redes de supermercado (por exemplo) e pagar em cartão direto no caixa, saindo impresso o comprovante na própria impressora fiscal, sem você precisar passar o seu cartão naqueles terminais a parte.
Enfim, fui surpreendido, pois o buraco é mais em baixo… rsrsrs… ou seja, a coisa tah mais complexa que pensei… por isso a minha demora aqui.
 
Mas eu queria falar mesmo sobre algo que Deus me minsitrou, enquanto eu estou aqui.
Todas as manhãs, eu logo quando acordo, (tomo banho, rs) eu enfim, abro a janela, e observo o dia. Confesso que tenho uma vista privilegiada, pois a janela do hotel, é enorme e dá para ver um monte não muito distante de onde estou, completamente verde… pássaros voando em frente da janela… enfim… imagina muita paz, é isso ahe. Pois foi assim que senti o toque. senti o Senhor compartilhando comigo, que nós temos corrido demais, e não temos dado tempo a ele. Talvez isso não seja nada novo para você, mas eu ouvi alguém ministrar (a não muito tempo) que, diferente do que tem ocorrido hoje em dia, a humanidade sempre ouviu um pregador diferente do que tem ouvido hoje. Hoje ouvimos a cerca de Deus, e dos seus feitos através de pessoas que pregam, que falam, que expõe textos, e por aí vai; Mas a não muito tempo atrás sse dava também ouvido a um outro pregador, e é sobre ele que vamos falar agora.
Os céus.
A bíblia diz no Salmo 19:1-6, que os céus proclamam a glória de Deus. Olha que coisa mais magnifica! Os céus nos mostram a glória de Deus. Não sei você, mas quando observo o céu, e isto faço raramente nos meus dias, eu consigo sentir que existe um Deus maravilhoso que criou esta terra e tudo que vemos, para que eu nela tivesse vida, e me sinto feliz por isso. Talvez para você, os céus não signifique muita coisa, mas todas as minhas manhã, quando vejo o dia amanhecendo, me alegro, fico mais feliz, e me sinto disposto a lutar mais um dia.
Porém, porque eu digo que hoje em dia este pregador não tem falado mais ao coração dos homens? Talvez a resposta esteja mais dentro de você, do que possa imaginar, mas no meu ponto de vista, é simples. Os céus não tem mais pregado para nós porque não temos mais tido tempo para ficarmos observando as obras das mãos de Deus. Não temos mais tempo para ver o céu. E, quando eu o vejo, e o observo, posso compreender algumas coisas.
Ainda em Sl, mas no cap8:1-4, o salmista nos revela que Deus colocou nos céus a sua majestade, e que quando ele observa os céus, percebe o quão pequeno ele mesmo é, e que com que grande amor Deus se manifestou a nós, tendo nos coroado de glória e de honra. Aleluia.
O apostolo Paulo nos revela sobre um homem que foi arrebatado até o terceiro céu (IICo 12:2), logo temos um primeiro céu, a atmosfera que vemos, um segundo céu, e ainda mais um terceiro. Essa divisão vai de encontro com o que os judeus sempre acreditaram haver nos céus, mas, não pretendo entrar nesta discussão agora.
O foco é que temos que observar o céu. Temos que ler, e ouvir, o que ele quer nos dizer. Ele nos revela a majestade de Deus. Que lindo!!!
Em ITs 4:13-18 nos diz que o nosso Senhor Jesus virá dos mais altos céus, para arrebatar a igreja para si, e nos levará para os céus.
Em IIPe 3:13 devemos esperar por novos céus e uma nova terra.
É isso meus amigos…
Um grande abraço,
Gui =]
Anúncios
Publicado em Viagens | 2 Comentários

PHP – Programando em PHP para impressoras não fiscais – uso local

Pessoal,

Boa tarde!

 

Agora vou colocar aqui um exemplo em PHP para impressão usando impressoras não fiscais. Neste caso usei os comandos para impressoras do tipo DR600 e DR700 da Daruma, mas por se tratar de comandos de comunicação direta, você também pode usar este exemplo para outras impressoras, bastando apenas substituir os comandos de formatação usados pelos que você necessitar.

 

Neste exemplo começo a usar O.O. (Orientação à Objetos). Caso não sabia como funciona, pode procurar mais materiais na internet, mas acredito que o exemplo está bem explicado.

 

Começo com a página form_envia_txt.htm, que tem o molde para enviar os parâmetros de configuração para a dual_envia_txt.php e este por sua vez faz um include em txt.class.php (que é a nossa página de classes no php).

 

<!—form_envia_txt.htm–>

<html>

<head>

<title>Daruma – Exemplo em PHP de envio de Texto – Comunicação Direta com a Porta Serial</title>

<meta http-equiv=”Content-Type” content=”text/html; charset=iso-8859-1″>

</head>

 

<body bgcolor=”#FFFFFF” link=”#0066FF” vlink=”#6666CC” alink=”#330066″>

<form name=”form_envia_sms” method=”post” action=”dual_envia_txt.php”>

  <table width=”809″ height=”237″ border=”2″ align=”center” cellpadding=”2″ cellspacing=”5″ bordercolor=”#006600″ bgcolor=”#FFFFFF”>

    <tr>

      <td width=”244″ height=”27″ bgcolor=”#B9ECC0″><font size=”3″ face=”Verdana, Arial, Helvetica, sans-serif”>Selecionar

        Porta:</font></td>

      <td width=”319″ bgcolor=”#B9ECC0″><font size=”3″ face=”Verdana, Arial, Helvetica, sans-serif”>Digitar

        Texto:</font></td>

      <td width=”204″ bgcolor=”#B9ECC0″><font size=”3″ face=”Verdana, Arial, Helvetica, sans-serif”>Selecione

        Modo:</font></td>

    </tr>

    <tr>

      <td valign=”top” bordercolor=”#FFFFFF”> <p>

          <select name=”set_porta” size=”1″>

            <option value=”0″> </option>

            <option value=”com1″ selected>COM1</option>

            <option value=”com2″>COM2</option>

            <option value=”com3″>COM3</option>

            <option value=”com4″>COM4</option>

            <option value=”com5″>COM5</option>

            <option value=”com6″>COM6</option>

            <option value=”com7″>COM7</option>

            <option value=”com8″>COM8</option>

            <option value=”com9″>COM9</option>

            <option value=”com10″>COM10</option>

          </select>

        <p>&nbsp; </td>

      <td rowspan=”3″ align=”left” valign=”top” bordercolor=”#FFFFFF”> <textarea cols=”37″ name=”texto” rows=”8″ wrap=”VIRTUAL”>Teste</textarea>

      </td>

      <td rowspan=”3″ align=”left” valign=”top” bordercolor=”#FFFFFF”> <font size=”2″ face=”Verdana, Arial, Helvetica, sans-serif”>

        <input type=”radio” name=”modo” value=”negrito”>

        <strong>Negrito </strong><br>

        <input type=”radio” name=”modo” value=”sublinhado”>

        <u>Sublinhado</u> <br>

        <input type=”radio” name=”modo” value=”condensado”>

        <font size=”1″>Condensado</font> <br>

        <input type=”radio” name=”modo” value=”expandido”>

        <font size=”3″>Expandido</font> <br>

        <input type=”radio” name=”modo” value=”dupla_altura”>

        <font size=”4″ face=”Tahoma, Arial, Courier”>Dupla Altura</font> <br>

        <input name=”modo” type=”radio” value=”normal” checked>

        Sem Formatação </font><br> </td>

    </tr>

    <tr>

      <td valign=”top” bgcolor=”#B9ECC0″><font size=”3″ face=”Verdana, Arial, Helvetica, sans-serif”>Selecionar

        Velocidade:</font></td>

    </tr>

    <tr>

      <td align=”left” valign=”top” bordercolor=”#FFFFFF”> <p>

          <select name=”set_velocidade” size=”1″>

            <option value=”0″> </option>

            <option value=”9600″ selected>9600</option>

            <option value=”38400″>38400</option>

            <option value=”115200″>115200</option>

          </select>

      </td>

    </tr>

    <tr>

      <td align=”left” valign=”top” bordercolor=”#FFFFFF”>&nbsp;</td>

      <td bordercolor=”#FFFFFF”><input name=”reset” type=”reset” value=”   Limpar   “></td>

      <td bordercolor=”#FFFFFF”><input name=”dual_envia_txt” type=”submit” value=”  Enviar Texto  “></td>

    </tr>

  </table>

  </form>

</body>

</html>

 

Após selecionadas as opções, o form chamará a página dual_envia_txt.php. Ela é a responsável por configurar a porta serial, para posterior utilização, e de mandar a impressão para a porta COM escolhida pelo usuário. Vamos ver como ela está:

 

<?php

//dual_envia_txt.php

include “txt.class.php”;

 

//recebo as informações e coloco elas em variáveis que vou utilizar:

$porta = $_POST[‘set_porta’];

$velocidade = $_POST[‘set_velocidade’];

$texto = $_POST[‘texto’];

$modo = $_POST[‘modo’];

 

//Crio um objeto da classe Envia_Txt

$txt = new Txt();

$porta_ok = $txt->seta_porta($porta, $velocidade);

usleep(20);

 

/* Declarando as Variáveis para comandos diretos: */

$Ni= chr(27) .chr(69);

$Nf= chr(27) .chr(70);

$Dai= chr(27) .chr(119) .’1′;

$Daf= chr(27) .chr(119) .’0′;

$Ci= chr(15);

$Cf= chr(18);

$Ei= chr(14);

$Ef= chr(20);

$Si= chr(27) .chr(45) .’1′;

$Sf= chr(27) .chr(45) .’0′;

 

/*Negrito*/

if ($modo == “negrito”)

$texto = $Ni . $texto . $Nf;

/*Sublinhado*/

if ( $modo == “sublinhado” )

$texto = $Si . $texto . $Sf;

/*Condensado*/

if ( $modo == “condensado” )

$texto = $Ci . $texto . $Cf;

/*Expandido*/

if ( $modo == “expandido” )

$texto = $Ei . $texto . $Ef;

/*Dupla Altura*/

if ( $modo == “dupla_altura” )

$texto = $Dai . $texto . $Daf;

// Para o modo normal, vai imprimir o texto que recebeu, sem nenhuma alteração nele.

 

$retorno = 0;

$retorno = $txt->envia_txt($texto);

usleep(2000);

 

echo “<br> Verifique o Texto Impresso!!!<br>”;

echo “<a href=’form_envia_txt.htm’>Voltar</a>”

?>

 

E agora temos a página txt.class.php

 

<?php

//txt.class.php

class Txt{

       

        //construtor

        function Txt(){

                $porta = “com1”;

                $resposta = “”;

                exec(‘mode ‘. $porta .’:9600,n,8,1′); //executa a configuração de velocidade na porta,

        }

       

        function seta_porta($porta_recebida, $velocidade_recebida) {

                global $porta;

                global $velocidade;

                $porta = $porta_recebida;

                $velocidade = $velocidade_recebida;

                //sem uma porta, ou velocidade configurada:

                if ($porta_recebida == null || $velocidade_recebida == null)

                {

                        exec(‘mode com1:9600,n,8,1’); //executa a configuração de velocidade na porta setada no construtor

                }

                //com uma porta e velocidade setadas para ser configurada:

                else

                {

                        exec(‘mode ‘. $porta .’:’. $velocidade .’,n,8,1′); //executa a configuração de velocidade na porta

                }

        }

       

        //função genérica que executa comandos de envio de texto

        function envia_txt($comando) {

                global $porta;

                $nome_arq = ‘envia_txt.txt’;

                $fp = fopen($nome_arq,’w+’); // abre o arquivo que receberá o comando

                fwrite($fp,$comando); //escrevo o comando que será enviando à impressora

                fclose($fp); //fecho o arquivo

                exec(‘type ‘. $nome_arq .’ > ‘. $porta);

        }

}

?>

 

Espero ter clareado um pouco com esta idéia. Se você pegar o manual de comandos diretos no site (www.desenvolvedoresdaruma.com.br) vai ver mais opções para fazer, e sugiro que implemente seguindo esta lógica.

Este é apenas um exemplo que fiz de como se comunicar com impressoras não fiscais via comandos de comunicação direta. Baseado nele você pode claramente usar para comandos de impressora fiscal também, de igual forma.

 

*** Dúvidas, por favor entre em contato direto com a Daruma:

http://desenvolvedoresdaruma.com.br/

Não trabalho mais com automação comercial. Abraços!

Publicado em Programação em PHP | Deixe um comentário

PHP – Exemplo completo de Cupom Fiscal com TEF

Cumprindo Promessa anterior, vamos ao exemplo em PHP completo com TEF!
Em primeiro lugar, isto é apenas um exemplo dos métodos, eu não sou um cara certificado em TEF – PHP, e não estou passando um exemplo acabado, antes apenas as declarações de todos os métodos que você vai precisar na sua jornada para a homologação TEF.
Outro ponto importante é que este exemple é um complemento ao meu post anterior, então se você tiver alguma dúvida, veja mais informações no post abaixo [anterior] … ok?
A nossa página menu_esq.htm aumentou, agora ela está assim:
<–!menu_esq.htm–>
<html>
<head>
<title>Daruma Framework – Exemplo TEF em PHP</title>
<meta http-equiv=”Content-Type” content=”text/html; charset=iso-8859-1″>
</head>
<body bgcolor=lightgreen vlink=”#006400″ alink=”#2F4F4F” topmargin=”0″ marginheight=”0″>
<br>Exemplo de Comandos para TEF<br><br>
<a href=”daruma.php?metodo=leiturax” target=’Principal’> Daruma_FI_LeituraX</a><br><br>
<hr>
<a href=”daruma.php?metodo=abre_cupom” target=’Principal’> Daruma_FI_AbreCupom</a><br><br>
  <a href=”daruma.php?metodo=vende_item” target=’Principal’>  Daruma_FI_VendeItem</a><br><br>
<hr>
<a href=”daruma.php?metodo=fecha_cupom_resumido” target=’Principal’>  Daruma_FI_FechaCupomResumido</a><br><br>
  <a href=”daruma.php?metodo=inicia_fechamento_cupom” target=’Principal’>  Daruma_FI_IniciaFechamentoCupom</a><br><br>
  <a href=”daruma.php?metodo=efetua_forma_pagamento” target=’Principal’>  Daruma_FI_EfetuaFormaPagamento</a><br><br>
  <a href=”daruma.php?metodo=identifica_consumidor” target=’Principal’>  Daruma_FI_IdentificaConsumidor</a><br><br>
  <a href=”daruma.php?metodo=termina_fechamento_cupom” target=’Principal’>  Daruma_FI_TerminaFechamentoCupom</a><br><br>
<hr>
<a href=”daruma.php?metodo=esperar_arquivo” target=’Principal’>  Daruma_TEF_EsperarArquivo</a><br><br>
  <a href=”daruma.php?metodo=imprimir_resposta” target=’Principal’>  Daruma_TEF_ImprimirResposta</a><br><br>
  <a href=”daruma.php?metodo=fecha_relatorio” target=’Principal’>  Daruma_TEF_FechaRelatorio</a><br><br>
</body>
</html>
Em um outro post eu vou explicar melhor o que cada um destes métodos faz. Agora seguindo o que ansiamos, o TEF, vamos para sua aplicação no arquivo daruma.php
<?
   //daruma.php
 $metodo = $_GET[‘metodo’];
//Você pode receber os parametros nesta página também.
//$parametro1 = $_GET[‘parametro1′];
if ($metodo == “leiturax”)
{
$comando = “1101;”;
}
if ($metodo == “abre_cupom”)
{
$comando = “1000;”;
}
if ($metodo == “vende_item”)
{
$comando = “1001;7896003704549;Bolacha;II;I;0001;2;00,10;$;00,00;”;
}
if ($metodo == “fecha_cupom_resumido”)
{
$comando = “1012;Cartao;Cupom fechado na Daruma com programa em PHP!!!;”;
}
if ($metodo == “inicia_fechamento_cupom”)
{
$comando = “1007;A;%;01,00;”;
}
if ($metodo == “efetua_forma_pagamento”)
{
$comando = “1008;Cartao;50,00;”;
}
if ($metodo == “identifica_consumidor”)
{
$comando = “1013;Daruma Automação Comercial;Av. Paulista, 1776; 45.170.289/0001-25;”;
}
if ($metodo == “termina_fechamento_cupom”)
{
$comando = “1010;Cupom fechado na Daruma com programa em PHP!!!;”;
}
if ($metodo == “esperar_arquivo”)
{
$comando = “1900;C:\TEF_DIAL\RESP\INTPOS.001;1;1;”;
}
if ($metodo == “imprimir_resposta”)
{
$comando = “1901;C:\TEF_DIAL\RESP\INTPOS.001;Cartao;0;”;
echo “<br><a href=’daruma.php?metodo=imprimir_resposta’>Imprimir Segunda Via</a><br><br>”;
}
if ($metodo == “fecha_relatorio”)
{
$comando = “1904;”;
}
//Verifico se todas as informações referentes a minha consulta estão ok:
echo $comando;
//Criar Arquivo – Neste momento eu crio o arquivo que será impresso.
// a opção ‘w+’ significa que eu dou permissão total para gravação e escrita no arquivo.
//Se estiver no linux ou windows vista  preste atenção para a permissão do arquivo. No linux dê permissão 777.
$arquivo = ‘C:\Daruma.CMD’;
$arq = fopen($arquivo, ‘w+’);
//Abro o arquivo “$arq” e escrevo nele o valor que está na variável “$info”.
//O comando “%s” significa que o valor a ser iserido é do tipo String. para int use %i, para double %d, para float %f, e assim por diante.
fprintf($arq, ‘%s’, $comando);
//Fecho o arquivo “$arq”
fclose($arq);
//atualizo a página para mostrar o retorno da impressora!
echo “<meta http-equiv=Refresh content=6;URL=’retorno.php’>”;
echo “<br> Aguarde o Retorno da Impressora!”;
?>
Os demais arquivos permanecem os mesmos. Aqui eu mesmo passei os valores para cada variável que é alimentada, mas você deverá receber elas também como parâmetros vindos de um form feitos em uma página html mesmo. Neste caso pode deixar a sua imaginação voar para fazer muitas coisas legais neste exemplo.
Agora você deve ter percebido que deixei dois modos para se fechar o cupom, então segue as sequências válidas para se fazer um Cupom Fiscal de início ao fim dele:
Daruma_FI_AbreCupom [Índice: 1000] -> Método opcional. Aqui pode ser inserido o CPF/CNPJ do consumidor se necessário.
Daruma_FI_VendeItem [Índice: 1001] -> Você pode repetir este método quantas vezes forem necessárias.
Daruma_FI_IniciaFechamentoCupom [Índice: 1007] -> Deste método em diante, já não é mais possível vender itens!
Daruma_FI_EfetuaFormaPagamento [Índice 1008] -> Aqui você consegue usar mais de uma forma de pagamento diferentes.
Daruma_FI_IdentificaConsumidor [Índice 1013] -> Opcional, usado para identificar o consumidor caso queira no final do Cupom.
Daruma_FI_TerminaFechamentoCupom [Índice 1010] -> Fecha o cupom, e imprime uma mensagem promocional, se desejar.
Outra sequência válida seria :
Daruma_FI_AbreCupom [Índice: 1000] -> Método opcional.
Daruma_FI_VendeItem [Índice: 1001] -> Você pode repetir este método quantas vezes forem necessárias.
Daruma_FI_FechaCupom [Índice 1011] -> Com este método você só poderá informar uma única forma de pagamento.
E uma terceira sequência poderia ser:
Daruma_FI_AbreCupom [Índice: 1000] -> Método opcional.
Daruma_FI_VendeItem [Índice: 1001] -> Você pode repetir este método quantas vezes forem necessárias.
Daruma_FI_FechaCupomResumido [Índice 1012] -> Fecha o cupom sem acréscimo ou desconto e com apenas uma forma de pagamento, ou seja, fecha cupom resumido mesmo.
Este post ficou extenso devido aos exemplos, mas creio que vai te ajudar muito!!!
*** Dúvidas, por favor entre em contato direto com a Daruma:
Não trabalho mais com automação comercial. Abraços!
Publicado em Programação em PHP | 8 Comentários

PHP e Impressoras Fiscais Daruma – uso local

Pessoal,
Bom dia!
 
Vou começar este blog com uma dica para quem está iniciando a programação com impressoras ficais e deseja aprender como fazer em php.
 
O primeiro conceito que temos que ter bem definido, é o que, o php roda somente no servidor, ou seja, para fazermos uma aplicação php acessar uma porta serial, só conseguimos na própria porta onde se encontra o site, ou seja, no servidor. Mais para frente pretendo divulgar como usar uma OCX com php, e ahi sim a coisa vai ficar mais dinâmica, mas por hora vamos usar o php apenas na máquina local, e para você fazer um bom sistema, procure informações sobre como alimentar base de dados em rede, pois cada máquina sua terá que ser sua própria máquina servidor, com o php instalado.
 
Ok. Fato superado, agora vamos ao que interessa. O que você vai precisar?
– Servidor php instalado (Apache, Easyphp, ou o de sua preferência)
– Observer (Que é quem manda o arquivo criado para executar na porta com, e ainda nos possibilitar programar em alto nível, sem termos que usar comandos diretos, tipo os Chr() da vida…) Acesse:
http://www.desenvolvedoresdaruma.com.br/home/downloads/Site_2009/Impressora_Fiscal/Observer_Win.zip e baixe este programa!
– Impressora fiscal ou não fiscal instalada – Neste exemplo usamos uma impressora fiscal (FS600)
 
Ok. Agora vou mostrar um exemplo bem simples que fiz. Primeiro criei uma página com um frame para melhor organizar a estrutura, segue:
<–!index.htm–>
<html>
<head>
<title>Daruma Framework – Exemplo TEF em PHP</title>
<meta http-equiv=”Content-Type” content=”text/html; charset=iso-8859-1″>
</head>
<frameset rows=”*” cols=”350,*” framespacing=”0″ frameborder=”NO” border=”0″>
<frame src=”menu_esq.htm” name=”Menu” scrolling=”YES” noresize>
<frame src=”principal.htm” name=”Principal”>
</frameset>
</frameset>
<noframes><body>
</body></noframes>
</html>
 
Depois uma página com um menu à esquerda para executar uma Leitura X:

 

<–!menu_esq.htm–>
<html>
<head>
<title>Daruma Framework – Exemplo TEF em PHP</title>
<meta http-equiv=”Content-Type” content=”text/html; charset=iso-8859-1″>
</head>
<body bgcolor=lightgreen vlink=”#006400″ alink=”#2F4F4F” topmargin=”0″ marginheight=”0″>
<br>Exemplo de Comandos para TEF<br><br>
<a href=”daruma.php?metodo=leiturax” target=’Principal’>
Daruma_FI_LeituraX</a><br><br>
</body>
</html>

 

Agora veja que fantástico, eu criei uma página em php que chamei de daruma.php e nela nós temos a criação do arquivo que executará a Leitura X.
 
<–!daruma.php–>
<?php
//Recebo da página menu_esq.php o método selecionado,e  aqui indexo o comando:
$metodo = $_GET[‘metodo’];
if ($metodo == “leiturax”)
{
$comando = “1101;”;
}
//Criar Arquivo – Neste momento eu crio o arquivo que será impresso.
// a opção ‘w+’ significa que eu dou permissão total para gravação e escrita no arquivo.
//Se estiver no linux ou windows vista  preste atenção para a permissão do arquivo. No linux dê permissão 777.
$arquivo = ‘C:\Daruma.CMD’;
$arq = fopen($arquivo, ‘w+’);
//Abro o arquivo “$arq” e escrevo nele o valor que está na variável “$info”.
//O comando “%s” significa que o valor a ser iserido é do tipo String. para intenger use %i, para double %d, para float %f, e assim por diante.
fprintf($arq, ‘%s’, $comando);
//Fecho o arquivo “$arq”
fclose($arq);
//atualizo a página para mostrar o retorno da impressora!
echo “<meta http-equiv=Refresh content=6;URL=’retorno.php’>”;
echo “<br> Aguarde o Retorno da Impressora!”;
?>
 
Neste exemplo inicial faço apenas uma Leitura X. Mas seguindo esta lógica podemos escolher todos os métodos disponíveis na dll (Daruma32.dll).
 
Como você pode ver eu deixo um tempo para que a impressão seja concluída e ao final chamo uma outra página que lê o arquivo de retorno e assim consigo saber se de fato o comando foi executado ou não.
 
<–!retorno.php–>
<?php
//Indico o caminho onde estará o arquivo
$arquivo = ‘C:\Daruma.RET’;
//Mando abrir o arquivo e passo que esta abertura será somente para leitura com o ‘r’
$retorno = fopen($arquivo, ‘r’);
//Se não conseguir abrir o arquivo mostro mensagem de erro na abertura:
if (!$retorno)
{
echo ‘Erro ao abrir o arquivo de retorno.<br>’;
exit;
}
//inicio do tratamento de retorno
else
{
//quebro o arquivo em linhas e pego apenas a primeira linha
$linha = fgets($retorno,16);
echo “<p>” . $linha . “</p>”;
//quebro o conteúdo do arquivo (array) pelo caracter ; e armazeno dentro de um vetor
$matriz = explode(‘;’ , $linha);
//tratando o Status 1 (st1)

//Para Funcionar a chave StatusFuncao tem que estar igual a 1 no registro do windows ou no .conf no linux
if ($matriz[0] != 001)
{
$existe = false;

if ($matriz[2] != 000)
{
$st1 = $matriz[2];
if ($st1 >= 128) { // bit 7
$st1 = $st1 – 128;
echo “O papel acabou<br>”;
$existe = true;
}
if ($st1 >= 64) { // bit 6
$st1 = $st1 – 64;
echo “O papel esta acabando<br>”;
$existe = true;
}
if ($st1 >= 32) { // bit 5
$st1 = $st1 – 32;
echo “Erro no relógio da impressora<br>”;
$existe = true;
}
if ($st1 >= 16) { // bit 4
$st1 = $st1 – 16;
echo “Impressora em erro<br>”;
$existe = true;
}
if ($st1 >= 8) { // bit 3
$st1 = $st1 – 8;
echo “Primeiro dado do método não foi ESC<br>”;
$existe = true;
}
if ($st1 >= 4) { // bit 2
$st1 = $st1 – 4;
echo “Método inexistente<br>”;
$existe = true;
}
if ($st1 >= 2) { // bit 1
$st1 = $st1 – 2;
echo “Cupom fiscal aberto<br>”;
$existe = true;
}
if ($st1 >= 1) { // bit 0
$st1 = $st1 – 1;
echo “Número de parâmetro(s) inválido(s)<br>”;
$existe = true;
}
}
//Tratando o Status 2 (st2)
if ($matriz[3] != 000)
{
$st2 = $matriz[3];
if ($st2 >= 128 ) { // bit 7
$st2 = $st2 – 128;
echo “Tipo de parâmetro do método inválido” ;
$existe = true;
}
if ($st2 >= 64 ) { // bit 6
$st2 = $st2 – 64;
echo “Memória fiscal cheia<br>”;
$existe = true;
}
if ($st2 >= 32 ) { // bit 5
$st2 = $st2 – 32;
echo “Erro na memória RAM<br>”;
$existe = true;
}
if ($st2 >= 16 ) { // bit 4
$st2 = $st2 – 16;
echo “Alíquota não definida<br>”;
$existe = true;
}
if ($st2 >= 8 ) { // bit 3
$st2 = $st2 – 8;
echo “Capacidade de alíquotas esgotada<br>”;
$existe = true;
}
if ($st2 >= 4 ) { // bit 2
$st2 = $st2 – 4;
echo “Este cancelamento não é permitido<br>”;
$existe = true;
}
if ($st2 >= 2 ) { // bit 1
$st2 = $st2 – 2;
echo “CNPJ/IE do Proprietário não definidos<br>”;
$existe = true;
}
if ($st2 >= 1 ) { // bit 0
$st2 = $st2 – 1;
echo “Método não executado<br>”;
$existe = true;
}
}
}
}
fclose($retorno);
if ($existe == false) {
echo “Método Executado com sucesso!”;
}

?>
 
E agora você consegue saber se o comando foi executado com sucesso, ou não, e ainda consegue avisar o usuário o que está acontecendo com a sua impressora.
 
Note que não usei O.O. para ficar bem simples e objetivo.
Depois vou postar um modo para impressora não fiscal, e um exemplo em TEF completo seguindo este modelo acima.
 
Dúvidas? Comente aqui mesmo, ou mande um e-mail: ddc.suporte@daruma.com.brOu me chame pelo skype: ddc_suporte_daruma
 
*** Dúvidas, por favor entre em contato direto com a Daruma:
Não trabalho mais com automação comercial. Abraços!


Guilherme Moraes

Publicado em Programação em PHP | 2 Comentários