Ir para conteúdo
  • Cadastre-se

Exemplo de captura de resposta PHP + socket


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

Recommended Posts

Postado

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;
        }
    }

  • 8 anos depois...
  • Solution
Postado

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

  • Consultores
Postado

Obrigado por reportar.

Fechando. Para novas dúvidas, criar um novo tópico.

 

Consultora ACBr Pro

Juliomar Marchetti

Ajude o Projeto ACBr crescer - Seja Pro

discord: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br

 

MVP_NewLogo_100x100_Transparent-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Este tópico foi criado há 753 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.