Ir para conteúdo
  • Cadastre-se

dev botao

Exemplo de captura de resposta PHP + socket


Ver Solução Respondido por sergiobarros,
  • Este tópico foi criado há 133 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Bom dia pessoal.
Estou postando um pequeno exemplo de captura de resposta em PHP utilizando o ACBrMonitorPlus com socket.
Vi alguns exemplos onde o pessoal tem dado um explode na resposta, mas há um método de leitura de arquivos INI que facilita bastante o tratamento da resposta.

Espero ajudar.
Abraços.
Luiz Fernando Rodrigues
Infomaster Sistemas
Penápolis/SP

 

/* FUNÇÃO PARA CONSULTAR O STATUS DO SERVIÇO DA NFE */
    function statusServicoNfeBO($hostAcbrMonitor, $portaAcbrMonitor) {
        try {
            /* ANALISANDO CAMPOS OBRIGATÓRIOS */
            if (empty($hostAcbrMonitor)) { throw new Exception("Falha ao identificar o host do ACBr Monitor."); }
            else if (empty($portaAcbrMonitor)) { throw new Exception("Falha ao identificar a porta do ACBr Monitor."); }

            /* ESTABELECENDO UM NOVO SOCKET */
            $socket = socketBO($hostAcbrMonitor, $portaAcbrMonitor);
            
            /* ANALISANDO O RETORNO DA CONEXÃO AO SOCKET */
            if ($socket["statusRetorno"] == "ERRO") { throw new Exception("Não é possível estabelecer um socket com o ACBrMonitorPlus.<br />Reinicie o computador e tente novamente. Se o problema persistir, contate o suporte técnico."); }
            else {
                /* CHAMANDO RESPOSTA DA CONEXÃO DO SOCKET */
                $socket["socket"]->recv();
                $socket["socket"]->send("NFE.StatusServico()"."\r\n.\r\n");
                $respostaFuncao = $socket["socket"]->recv();
                /* O MÉTODO PARSE_INI_STRING CONSEGUE CONVERTER A RESPOSTA DO ACBr PARA UM ARRAY.
                 * DESSA FORMA FICA MUITO FÁCIL LER A RESPOSTA. */
                $respostaFuncaoArray = parse_ini_string($respostaFuncao,true);
                if (!isset($respostaFuncaoArray["STATUS"]["CStat"])) { throw new Exception(nl2br($respostaFuncao)); }
                else {
                    /* LIMPANDO OS DADOS DE CONEXÃO COM O SOCKET */
                    $retorno["statusRetorno"] = "SUCESSO";
                    $retorno["msgRetorno"] = $respostaFuncaoArray["STATUS"]["CStat"]." - ".$respostaFuncaoArray["STATUS"]["XMotivo"];
                    return $retorno;
                }
            }
        }
        catch (Exception $e) {
            $retorno["statusRetorno"] = "ERRO";
            $retorno["msgRetorno"] = "Falha ao consultar o status do serviço da NFe.";
            $retorno["msgErro"] = $e->getMessage();
            return $retorno;
        }
    }

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Olá, obrigado pelo exemplo...

Poderia por favor, anexar o arquivo .php ?

Podemos distribuir o exemplo na pasta "Exemplos" do MonitorPLUS ?

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • 8 anos depois...
  • Solution

Prezados,

Mesmo sendo um tópico antigo, coloco aqui uma breve observação quanto ao código do exemplo disponibilizado aqui e encontrado no trunk2 (https://svn.code.sf.net/p/acbr/code/trunk2/Projetos/ACBrMonitorPLUS/Lazarus/Exemplos/nfeBO.php).

Analisando o código, observei que a linha:

if (!isset($respostaFuncaoArray["STATUS"]["CStat"])) { throw new Exception(nl2br($respostaFuncao)); }

Estava forçando uma exception, o que acarretava na execução do bloco catch, mesmo a resposta para o ACBrmonitorPlus ter retornado um resultado correto.

Observei que isso ocorreu por causa do índice "STATUS" em maiúsculo. Fiz a correção e funcionou perfeitamente:

Meu código ficou assim então:

(...)

if (!isset($respostaFuncaoArray["Status"]["CStat"])) {throw new Exception(nl2br($respostaFuncao)); }
else {
                    /* LIMPANDO OS DADOS DE CONEXÃO COM O SOCKET */
                    $retorno["statusRetorno"] = "SUCESSO";
                    $retorno["msgRetorno"] = $respostaFuncaoArray["Status"]["CStat"]." - ".$respostaFuncaoArray["Status"]["XMotivo"];
                    return $retorno;
}

(...)

Aproveito para agrader pelas contribuições dos códigos, pois era o que eu estava procurando.

Meu arquivo corrigido é este:

nfeBO.php

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 133 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.