-
Notifications
You must be signed in to change notification settings - Fork 0
PHP
#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!
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.
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.phppara fazer a requisição para oSaaS.
<?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);
?>- O envio terá o seguinte formato:
"Numero lote ou palavra Exception", "Chave da nota ou classe Exception", "cStat ou mensagem Exception", "Mensagem da Sefaz".
-
Sucesso
00000001,41150408187168000160556660000006711000000015,100,Autorizado o uso da NF-e
-
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'
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 |
| 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 arquivoconsulta.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;
?>-
O retorno será de acordo com os campos e ordem informada no parâmetro
campos. -
Sucesso
CANCELADA,141170000249826
-
Falha
Nenhum registro encontrado.
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 arquivoimprime.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;
?>- Se tudo correr bem, será retornado a URL para download ou conteúdo do arquivo
.pdfde acordo com o parâmetroUrl. Caso contrario a palavra:
"Exception","classe Exception","mensagem Exception".
-
Sucesso
-
Falha
EXCEPTION,EspdAPIWebServerErrorException,NFe 4117020818716800016055321000000661100000001a não foi encontrada
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 pelaSefaz 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);
?>- O retorno possui o seguinte formato
"Protocolo de autorização ou palavra Exception", "cStat ou classe Exception", "Mensagem Sefaz ou mensagem Exception."
-
Sucesso
141170000249828,135,Evento registrado e vinculado a NF-e
-
Falha
EXCEPTION,EspdCheckChaveNotaException,A chave da nota informada possui caracteres inválidos.