marabesi / gnre
API para a emissão de guias GNRE para a SEFAZ
Installs: 332
Dependents: 0
Suggesters: 0
Security: 0
Stars: 62
Watchers: 22
Forks: 59
Open Issues: 9
Requires
- php: >=7.3.0
- ext-dom: *
- ext-gd: *
- dompdf/dompdf: 0.8.*
- laminas/laminas-barcode: ^2.3
- laminas/laminas-servicemanager: ~3.0
- nfephp-org/sped-nfe: ~5.0
- smarty/smarty: ~3.1
Requires (Dev)
- mikey179/vfsstream: ^1.6
- php-coveralls/php-coveralls: ^2.2
- phpunit/phpunit: ^9.0
- squizlabs/php_codesniffer: ^3.5
README
Atenção!!
Caso encontre algum estado que possua uma regra especial para gerar uma GNRE por favor informar abrindo uma issue. Dessa forma podemos manter a API atualizada e ajudar a todos que utlizam a GNRE PHP
Atenção 2!!
Se você possui um certificado da certisign e está com o erro "Bad request" veja a solução encontrada pelo renandelmonico utilizando as classes da sped-common nesse link
Os certificados da certisign possuem algum problema em que não é possível extrair a cadeia de certificação, portanto é necessário fazer o download da cadeia manualmente nesse link (Hierarquia V5).
Após o download é necessário extrair usando o openssl, copiar o conteúdo gerado pelos 3 certificados e colar em um novo arquivo .pem.
openssl x509 -inform der -in ARQUIVO.cer -pubkey -noout > ARQUIVO.pem
Depois de realizar o processo acima, é necessário utilizar o método addCurlOption da classe Sped\Gnre\Webservice\Connection para alterar algumas configurações e informar manualmente a cadeia de certificação.
$webService->addCurlOption([ CURLOPT_SSL_VERIFYHOST => 2, CURLOPT_SSL_VERIFYPEER => 1, CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1, CURLOPT_CAINFO => 'ARQUIVO.pem' ]);
Versões suportadas
Antes de usar a API
-
Verifique se seu certificado digital não foi expedido através da certisign, pois existe um problema na cadeia do certificado que impossibilita a emissão de guias GNRE. Certificados expedidos através do SERASA funcionam normalmente para a emissão (até agora nenhum erro foi relatado).
-
É permitido utilizar o mesmo certificado utilizado para emitir NF-e.
-
É necessário entrar em contato com a SEFAZ de cada estado pedindo liberação do serviço de emissão de GNRE.
-
Leita todos os tópicos no FAQ oficial em http://www.gnre.pe.gov.br/gnre/portal/faq.jsp. Os tópicos abordados são muito úteis para quem está começando nesse serviço.
GNRE PHP
Objetivo
API possibilita a comunicação com a SEFAZ para a emissão da nota GNRE (Guia Nacional de Recolhimento de Tributos Estaduais). A API GNRE tem como maior inspiração a API NFEPHP que você pode encontrar através do link https://github.com/nfephp
Dependências
- Apache / Nginx
- PHP 5.3+
- Extensões PHP
- DOMDocument
- cURL
- [GD (Utilizada para renderizar o código de barras)] (http://php.net/manual/pt_BR/book.image.php)
Road-map
Atualmente estamos utilizando o trello para gerenciar o que será implementado nas próximas versões e melhorias na API, esse road map poe ser acessado em https://trello.com/b/kNP1tvsi/gnre-api-github
Informações úteis
- Antes de gerar qualquer guia GNRE com o seu certificado, tenha CERTEZA que você possui autorização para isso. A geração de GNRE depende de cada estado, ou seja, se você deseja gerar a guia para o Acre (com destino ao Acre) tenha certeza que já pediu a liberação do certificado no SEFAZ Acre e repita esse processo para cada estado.
Documentação
-
Documentação da GNRE PHP gerada com o PHPDOC pode ser visualizada aqui
-
Nosso wiki de como utilizar a API e gerar as GNRES está disponível aqui no github
-
Exemplos com código fonte são encontrados na pasta exemplos/
Instalação via composer
Adicionando a GNRE PHP em um projeto existente com o composer
Caso você não possua o composer veja esse link antes de prosseguir
Adicione a dependência da GNRE PHP no arquivo composer.json :
Para PHP <= 5.5
{ "nfephp-org/sped-gnre": "0.1.1" }
Para PHP = 5.6
{ "nfephp-org/sped-gnre": "0.1.4" }
Para PHP >= 7.0
{ "nfephp-org/sped-gnre": "0.1.5" }
Atualize suas depedências existentes no composer :
composer update
Possíveis erros
Erro : unable to use client certificate (no key found or wrong pass phrase?)
Se você está obtendo essa mensagem após enviar a requisição para o web service da SEFAZ verifique a senha que você está utilizando, pois esse erro ocorre quando a senha informada não bate com a senha do certificado utilizado
Erro: [InvalidArgumentException] Could not find package marabesi/gnre at any version for your minimum-stability (stable). Check the package spelling or your minimum-stability
Esse problema ocorre pois não estamos informando ao composer qual a versão mínima que queremos utilizar, para resolver esse problema basta adicionar a seguinte linha no seu arquivo composer.json
{ "minimum-stability": "dev" }
Quick start
Clone o repositório do projeto
git clone https://github.com/nfephp-org/sped-gnre.git
Vá para a pasta de exemplos
cd exemplos/
Rode o servidor built-in do PHP
php -S localhost:8181
Abra o seu navegador e digite a seguinte URL
http://localhost:8181/gerar-xml.php
Caso queira ver outros exemplos utilizados pela API acesse esse link https://github.com/nfephp-org/sped-gnre/tree/master/exemplos