Para poder emitir uma NFSe usando a linguagem PHP você precisa de apenas duas extensões PECL, que são:
- Parser do formato YAML: http://www.php.net/manual/en/book.yaml.php. Você irá precisar de apenas duas funções:
yaml_emit($arr) – Devolve $arr convertido em uma string no formato YAML
yaml_parse($str) – Devolve um array PHP a partir de uma string $str que está no formato YAML - Biblioteca para envio de requisições HTTP: http://www.php.net/manual/en/book.http.php
Abaixo segue um exemplo de envio e consulta de NFSe usando estas bibliotecas. O formato do arquivo é único para todas as cidades. Algumas cidades podem exigir mais ou menos campos (consulte documentação). No exemplo abaixo consideramos os campos necessários para a cidade de São Paulo.
Para executar o exemplo, salve em um arquivo “exemplo.php” no seu computador, instale as bibliotecas acima e altere o token de acesso no programa (variável $TOKEN). Em seguida, execute:
php exemplo.php
<?php # Você deve definir isso globalmente para sua aplicação $SERVER = "http://producao.acrasnfe.acras.com.br"; $TOKEN = "token_recebido_do_suporte"; $nfse = array( "data_emissao" => '2013-05-31T12:00:00-03:00', "natureza_operacao" => '1', "prestador" => array( "cnpj" => '06901848000133', "inscricao_municipal" => '080204613599', "codigo_municipio" => '4106902' ), "servico" => array( "aliquota" => '0.05', "base_calculo" => '1.0', "discriminacao" => "Servico de hospedagem de sites", "iss_retido" => "2", "item_lista_servico" => "06939", "valor_iss" => '0.5', "valor_liquido" => '1.0', "valor_servicos" => '1.0' ), "tomador" => array( "cpf" => '03055054912', "endereco" => array( "bairro" => 'Centro', "cep" => "80000000", "codigo_municipio" => "4106902", "logradouro" => "Rua Emiliano Perneta", "numero" => "845", "uf" => 'PR', ), "razao_social" => "Egon Hilgenstieler" ) ); print("=> Teste de envio\n"); $r = new HttpRequest($SERVER."/nfse", HttpRequest::METH_POST); $r->addQueryData(array('token' => $TOKEN)); # A referência é uma string que identifica univocamente uma NFSe e # será usada para consultas posteriores $r->addQueryData(array('ref' => '1234')); $yaml = yaml_emit($nfse); $r->addRawPostData($yaml); try { $r->send(); $status = $r->getResponseCode(); $body = $r->getResponseBody(); print("Status = $status\n"); print("Body = $body\n"); } catch (HttpException $ex) { echo $ex; } print("=> Teste de consulta\n"); # O processo de envio de NFSe é assíncrono, e pode ser necessário # aguardar até que a nota seja processada sleep(10); $r = new HttpRequest($SERVER."/nfse/1234", HttpRequest::METH_GET); $r->addQueryData(array('token' => $TOKEN)); try { $r->send(); $status = $r->getResponseCode(); $body = $r->getResponseBody(); print("Status = $status\n"); print("Body = $body\n"); $result = yaml_parse($body); var_dump($result); } catch (HttpException $ex) { echo $ex; } ?>
Quer integrar seu sistema para emissão de NF-e? Clique aqui, acesse nossa documentação e saiba tudo o que você para fazer a integração do seu sistema com a noss API.