Skip to content
Igor Souza Martins edited this page Feb 22, 2017 · 8 revisions

#Como testar o Manager SaaS utilizando PHP

Este tutorial leva em consideração que você tenha um conhecimento básico da linguagem PHP e tenha um servidor como o XAMP ou WAMP, rodando em sua maquina.

  • Caso você não tenha um servidor, você pode realizar o download aqui!

Agora que você já possui o servidor, podemos iniciar os testes!

Mão na massa!

Este tutorial tem como objetivo mostrar como é feita a comunicação com o Manager SaaS através das requisições HTTP, nele vamos verificar exemplos para Enviar, Consultar, Imprimir e Cancelar a nota.

Envio

Parâmetros necessários

  • Grupo

  • Se refere ao nome do grupo no qual a empresa que está emitindo a nota faz parte.

  • CNPJ

  • Ele é de acordo com a empresa que está emitindo a nota.

  • Arquivo

  • Ele é referente aos dados da nota que vamos emitir.

  • O envio é feito através de um POST, dessa forma no nosso exemplo utilizamos o seguinte código no arquivo envia.php para fazer a requisição para o SaaS.

<?php
//Carregamos o conteúdo do arquivo NFe.tx2, pois dentro dele nós temos todos os dados necessários para autorizar uma nota.
  $tx2 = file_get_contents('NFe.tx2');
  
//Aqui vamos preencher os parâmetros obrigatórios da rota Envia
  $post_data['grupo']= $_POST['grupo'];
  $post_data['cnpj']= $_POST['CNPJ'];
  $post_data['arquivo']= $tx2;
  $post_data['encode']= "true"; //Trata o retorno para não vir com caracteres especiais escapados.

//Passamos para a variável host o endereço do SaaS
  $host = $_POST['host'];

//Monta uma query no formato que a requisição POST necessita para enviar informações para um determinado destinatário
  $data=http_build_query($post_data);

//Para o SaaS autorizar uma comunicação entre seu sistema e nosso servidor, é necessário autenticar essa requisição com o usuario e senha
  $usuario = $_POST['usuario'];
  $senha = $_POST['senha'];

//Essa autenticação deve ser encodada em Base64
  $auth = base64_encode("$usuario:$senha");

//Aqui iniciamos o processo de montagem da requisição e envio dela
  $socket = fsockopen("ssl://".$host, 7071, $errno, $errstr, 15);

  $http  = "POST /ManagerAPIWeb/nfe/envia HTTP/1.1\r\n";
  $http .= "Authorization: Basic ".$auth."\r\n";
  $http .= "Host: ".$host.":7071\r\n";
  $http .= "User-Agent: " . $_SERVER['HTTP_USER_AGENT'] . "\r\n";
  $http .= "Content-Type: application/x-www-form-urlencoded\r\n";
  $http .= "Content-length: " . strlen($data) . "\r\n";
  $http .= "Connection: close\r\n\r\n";
  $http .= $data."\r\n\r\n";
  fwrite($socket, $http);               

  $result="";

//Lemos todas as linhas do retorno da requisição e atribuímos elas para a variável $result
  while (!feof($socket))
  {
    $result .= fgets($socket, 4096);
  }
  fclose($socket);

//Aqui separamos o que é header e o que é o conteúdo que vamos retornar para o front
  list($header, $body) = preg_split("/\R\R/", $result, 2);

//Devolvemos para o front o conteúdo de resposta do SaaS
  echo($body); 
?>

Retornos

  • O envio terá o seguinte formato:

"Numero lote ou palavra Exception", "Chave da nota ou classe Exception", "cStat ou mensagem Exception", "Mensagem da Sefaz".

  • #62f441 Sucesso

00000001,41150408187168000160556660000006711000000015,100,Autorizado o uso da NF-e​

  • #f44242 Falha

EXCEPTION,EspdManNFeException,Erro ao montar notas: CNPJ do Emitente da nota está diferente do CNPJ da empresa cadastrada.

EXCEPTION,EspdManNFeAssinarException,Problema ao assinar Nota(s). Exception: Falha ao Validar Lote para Envio. Erro: EspdSchemaValidationException O arquivo contém 1 ou mais erros no de validação de esquema '411520' viola a restrição pattern de '[0-9]{7}'. Falha da análise do elemento '{http://www.portalfiscal.inf.br/nfe}cMun' com valor '411520'


Consulta

Parâmetros necessários

  • Grupo
  • Se refere ao nome do grupo no qual a empresa que está emitindo a nota faz parte.
  • CNPJ
  • Ele é de acordo com a empresa que está emitindo a nota.
  • Filtro
  • Ele é referente ao que vamos usar para consultar, por exemplo a chave de uma nota e o parâmetro.
  • Campos
  • Serão os campos que queremos que sejam retornados nessa consulta, abaixo temos uma tabela de todos os campos que podem ser consultados.
handle chave situacao nnf codnf
nrecibo nprotenvio nprotcanc nprotinutil nregdpec
modoentrada modosaida cnpj motivo dtautorizacao
dtcadadstro dtcancelamento dtemissao impresso envemail
email docdestinatario nomedestinatario idgrupo idintegracao
nlote numero dhdpec nomegrupo eventos
ambiente impressora origem sincronizadopm cstat
importado destinada xmldestinatario
  • A consulta é feita através de um GET, ela serve para a atualização de valores de uma nota em seu sistema por exemplo, abaixo o exemplo que utilizamos no arquivo consulta.php.
<?php
//Criamos a variável $curl e com o comando curl_init(); damos o poder a ela de acessar uma determinada URL.      
  $curl = curl_init();

/*Aqui montamos a URL de consulta, no final ela terá o seguinte formato:   
https://managersaashom.tecnospeed.com.br:7071/ManagerAPIWeb/nfe/consulta?grupo=edoc&cnpj=08187168000160&filtro=chave=41170208187168000160553210000006521000000019&campos=situacao,nprotenvio*/
   $urlconsulta = "https://".$_GET['host'].":7071/ManagerAPIWeb/nfe/consulta?"."grupo=".$_GET['grupo']."&cnpj=".$_GET['cnpj']."&filtro=".$_GET['filtroconsulta']."&campos=".$_GET['camposconsulta']."&encode=true";

//Da mesma forma que fizemos a autenticação para o Envio, vamos precisar para a Consulta.
  $usuario = $_GET['usuario'];
  $senha = $_GET['senha'];

  $auth = base64_encode("$usuario:$senha");

//Montamos então as opções do cURL para enviarmos a requisição.
  curl_setopt_array($curl, array(
      CURLOPT_RETURNTRANSFER => 1,
      CURLOPT_SSL_VERIFYPEER => false,
      CURLOPT_URL => $urlconsulta,
      CURLOPT_USERAGENT => 'Codular Sample cURL Request'
    ));

  curl_setopt($curl, CURLOPT_HTTPHEADER, array(
      'Authorization: Basic '.$auth
    ));

//Com o comando curl_exec($curl); nós enviamos o GET para o SaaS.
  $retorno = curl_exec($curl);

//É importante que sempre que uma comunicação for aberta, após o uso ela seja fechada.
  curl_close($curl);
  echo $retorno; 
?>

Retornos

  • O retorno será de acordo com os campos e ordem informada no parâmetro campos.

  • #62f441 Sucesso

CANCELADA,141170000249826

  • #f44242 Falha

Nenhum registro encontrado.


Impressão

Parâmetros necessários

  • Grupo

  • Se refere ao nome do grupo no qual a empresa que está emitindo a nota faz parte.

  • CNPJ

  • Ele é de acordo com a empresa que está emitindo a nota.

  • ChaveNota

  • Chave da nota que estamos fazer a impressão.

  • url

  • Este parâmetro aceita dois valores, sendo:

  • 1 - Retorna a URL do PDF gerado.

  • 2 - Retorna o conteúdo do arquivo PDF.

  • A impressão é feita através de um GET, essa rota nos retorna um link que ao ser acessado pelo seu cliente, ele será redirecionado para o download do PDF da nota, abaixo o exemplo que utilizamos no arquivo imprime.php.

<?php
  $curl = curl_init();
   $urlconsulta = "https://".$_GET['host'].":7071/ManagerAPIWeb/nfe/imprime?"."grupo=".$_GET['grupo']."&cnpj=".$_GET['cnpj']."&chavenota=".$_GET['chavenota']."&url=1&encode=true";
  //Autenticação
  $usuario = $_GET['usuario'];
  $senha = $_GET['senha'];

  $auth = base64_encode("$usuario:$senha");

  curl_setopt_array($curl, array(
  	  CURLOPT_RETURNTRANSFER => 1,
  	  CURLOPT_SSL_VERIFYPEER => false,
  	  CURLOPT_URL => $urlconsulta,
  	  CURLOPT_USERAGENT => 'Codular Sample cURL Request'
  	));

  curl_setopt($curl, CURLOPT_HTTPHEADER, array(
  	  'Authorization: Basic '.$auth
  	));

  $retorno = curl_exec($curl);

  curl_close($curl);
  echo $retorno;
?>

Retornos

  • Se tudo correr bem, será retornado a URL para download ou conteúdo do arquivo .pdf de acordo com o parâmetro Url. Caso contrario a palavra:

"Exception","classe Exception","mensagem Exception".

  • #62f441 Sucesso

http://managersaashom.tecnospeed.com.br:7071/ManagerAPIWeb/download/ManagerNFe/2017022208490533640779146138345.pdf

  • #f44242 Falha

EXCEPTION,EspdAPIWebServerErrorException,NFe 4117020818716800016055321000000661100000001a não foi encontrada


Cancela

Parâmetros necessários

  • Grupo

  • Se refere ao nome do grupo no qual a empresa que está emitindo a nota faz parte.

  • CNPJ

  • Ele é de acordo com a empresa que está emitindo a nota.

  • ChaveNota

  • Chave da nota que estamos fazer a impressão.

  • Justificativa

  • Um motivo do cancelamento de pelo menos 15 caracteres.

  • O cancelamento é feito através de um POST, com essa rota podemos cancelar qualquer nota que esteja dentro do prazo estabelecido pela Sefaz do estado.

<?php
  $post_data['grupo']= $_POST['grupo'];
  $post_data['cnpj']= $_POST['CNPJ'];
  $post_data['chavenota']= $_POST['chavenota'];
  $post_data['justificativa']= $_POST['justificativa'];
  $post_data['encode']= "true";

  $host = $_POST['host'];

  $data=http_build_query($post_data);

  $usuario = $_POST['usuario'];
  $senha = $_POST['senha'];

  $auth = base64_encode("$usuario:$senha");

  $socket = fsockopen("ssl://".$host, 7071, $errno, $errstr, 15);

  $http  = "POST /ManagerAPIWeb/nfe/cancela HTTP/1.1\r\n";
  $http .= "Authorization: Basic ".$auth."\r\n";
  $http .= "Host: ".$host.":7071\r\n";
  $http .= "User-Agent: " . $_SERVER['HTTP_USER_AGENT'] . "\r\n";
  $http .= "Content-Type: application/x-www-form-urlencoded\r\n";
  $http .= "Content-length: " . strlen($data) . "\r\n";
  $http .= "Connection: close\r\n\r\n";
  $http .= $data."\r\n\r\n";
  fwrite($socket, $http);               

  $result="";

  while (!feof($socket))
  {
    $result .= fgets($socket, 4096);
  }
  fclose($socket);

  list($header, $body) = preg_split("/\R\R/", $result, 2);

  echo($body);
?>

Retornos

  • O retorno possui o seguinte formato

"Protocolo de autorização ou palavra Exception", "cStat ou classe Exception", "Mensagem Sefaz ou mensagem Exception."

  • #62f441 Sucesso

141170000249828,135,Evento registrado e vinculado a NF-e

  • #f44242 Falha

EXCEPTION,EspdCheckChaveNotaException,A chave da nota informada possui caracteres inválidos.

Clone this wiki locally