├── composer.json ├── exemplos ├── validadeCertificadoA1.php ├── statusSefaz.php ├── inutilizarNumeracao.php ├── cartaCorrecao.php ├── consultaNotaFiscal.php ├── listarClasseImposto.php ├── atualizarEmpresa.php ├── manifestacaoDestinatario.php ├── cancelarNotaFiscal.php ├── notificacoesNotaFiscal.php ├── exportarRelatorios.php ├── devolucaoNotaFiscal.php ├── ajusteNotaFiscal.php ├── complementarNotaFiscal.php ├── criarEditarClasseImposto.php ├── emissaoNotaFiscal-Armamentos.php ├── emissaoNotaFiscal-Medicamento.php ├── emissaoNotaFiscal-VeiculosNovos.php ├── emissaoNotaFiscal-Combustiveis.php └── emissaoNotaFiscal.php ├── README.md └── src └── WebmaniaBR └── NFe.php /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "webmaniabr/nfe", 3 | "type": "library", 4 | "version": "3.7.0", 5 | "license": "GPL-3.0-or-later", 6 | "description": "PHP SDK da REST API de Nota Fiscal Eletrônica da WebmaniaBR®", 7 | "keywords": ["notafiscal", "api", "nfe", "nfce", "nota fiscal", "nf-e", "nfc-e", "webmaniabr", "sefaz"], 8 | "homepage": "https://webmaniabr.com/docs/rest-api-nfe/", 9 | "prefer-stable": true, 10 | "require": { 11 | "php": ">=5.2.0" 12 | }, 13 | "require-dev": { 14 | "php": ">=5.2.0" 15 | }, 16 | "authors": [ 17 | { 18 | "name": "Equipe WebmaniaBR", 19 | "email": "suporte@webmaniabr.com" 20 | } 21 | ], 22 | "autoload": { 23 | "psr-0": { 24 | "WebmaniaBR": "src/" 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /exemplos/validadeCertificadoA1.php: -------------------------------------------------------------------------------- 1 | validadeCertificado(); 8 | 9 | if (!isset($response->error)){ 10 | 11 | if ($response > 45){ 12 | 13 | echo '

Certificado Digital A1 válido por '.$response.' dias.

'; 14 | 15 | } elseif ($response < 45 && $response >= 1){ 16 | 17 | echo '

Emita um novo Certificado Digital A1 - vencerá em '.$response.' dias.

'; 18 | 19 | } else { 20 | 21 | echo '

Certificado Digital A1 vencido. Emita um novo para continuar operando.

'; 22 | 23 | } 24 | 25 | } else { 26 | 27 | echo '

Erro: '.$response->error.'

'; 28 | exit(); 29 | 30 | } 31 | -------------------------------------------------------------------------------- /exemplos/statusSefaz.php: -------------------------------------------------------------------------------- 1 | statusSefaz(); 16 | 17 | if (!isset($status->error)){ 18 | 19 | if ($status){ 20 | 21 | echo '

Sefaz: Online

'; 22 | 23 | } else { 24 | 25 | echo '

Sefaz: Offline

'; 26 | 27 | } 28 | 29 | } else { 30 | 31 | echo '

Erro: '.$status->error.'

'; 32 | exit(); 33 | 34 | } 35 | -------------------------------------------------------------------------------- /exemplos/inutilizarNumeracao.php: -------------------------------------------------------------------------------- 1 | inutilizarNumeracao( $sequencia, $motivo, $ambiente, $serie, $modelo ); 14 | 15 | if (!isset($response->error)){ 16 | 17 | echo '

Resultado da Inutilização:

'; 18 | 19 | $xml = (string) $response->xml; 20 | $log = $response->log; 21 | 22 | print_r($response); 23 | exit(); 24 | 25 | } else { 26 | 27 | echo '

Erro: '.$response->error.'

'; 28 | 29 | if (isset($response->log)){ 30 | 31 | echo '

Log:

'; 32 | echo ''; 41 | 42 | } 43 | 44 | exit(); 45 | 46 | } 47 | -------------------------------------------------------------------------------- /exemplos/cartaCorrecao.php: -------------------------------------------------------------------------------- 1 | cartaCorrecao( $chave_uuid, $correcao, $ambiente, $evento, $url_notificacao ); 23 | 24 | /** 25 | * Retorno 26 | */ 27 | if (!isset($response->error)){ 28 | 29 | echo '

Resultado da Carta de Correção:

'; 30 | 31 | $status = (string) $response->status; // aprovado ou reprovado 32 | $xml = (string) $response->xml; // URL do XML 33 | $dacce = (string) $response->dacce; // URL do Danfe (PDF) 34 | $log = $response->log; // Log de retorno do SEFAZ 35 | 36 | print_r($response); 37 | exit(); 38 | 39 | } else { 40 | 41 | echo '

Erro: '.$response->error.'

'; 42 | exit(); 43 | 44 | } 45 | -------------------------------------------------------------------------------- /exemplos/consultaNotaFiscal.php: -------------------------------------------------------------------------------- 1 | consultaNotaFiscal( $chave_uuid ); 20 | 21 | /** 22 | * Retorno 23 | */ 24 | if (!isset($response->error)){ 25 | 26 | echo '

Resultado da Consulta:

'; 27 | 28 | $uuid = (string) $response->uuid; // Número único de identificação da Nota Fiscal 29 | $status = (string) $response->status; // aprovado, reprovado, cancelado, processamento ou contingencia 30 | $nfe = (int) $response->nfe; // Número da NF-e 31 | $serie = (int) $response->serie; // Número de série 32 | $recibo = (int) $response->recibo; // Número do recibo 33 | $chave = $response->chave; // Número da chave de acesso 34 | $xml = (string) $response->xml; // URL do XML 35 | $danfe = (string) $response->danfe; // URL do Danfe (PDF) 36 | $log = $response->log; // Log do Sefaz 37 | 38 | print_r($response); 39 | exit(); 40 | 41 | } else { 42 | 43 | echo '

Erro: '.$response->error.'

'; 44 | exit(); 45 | 46 | } 47 | -------------------------------------------------------------------------------- /exemplos/listarClasseImposto.php: -------------------------------------------------------------------------------- 1 | classeImposto( array(), 'GET' ); 16 | 17 | if (!isset($response->error)){ 18 | 19 | echo '

Classe de impostos

'; 20 | echo '

Total encontrado: '.count($response).'

'; 21 | 22 | if ( is_array($response) && count($response) > 0 ){ 23 | 24 | foreach ($response as $classe_imposto){ 25 | 26 | $referencia = (string) $classe_imposto->referencia; // Código de referência da Classe de Imposto 27 | $descricao = (string) $classe_imposto->descricao; // Descrição da Classe de Imposto 28 | $data = $classe_imposto->data; // Data da criação da Classe de Imposto 29 | 30 | } 31 | 32 | } else { 33 | 34 | echo '

Nenhuma classe de imposto cadastrada.

'; 35 | 36 | } 37 | 38 | print_r($response); 39 | exit(); 40 | 41 | } else { 42 | 43 | echo '

Erro: '.$response->error.'

'; 44 | exit(); 45 | 46 | } 47 | -------------------------------------------------------------------------------- /exemplos/atualizarEmpresa.php: -------------------------------------------------------------------------------- 1 | '00.000.000/0000-00', 15 | 'razao_social' => 'Nome da empresa LTDA', 16 | 'nome_fantasia' => 'Nome da empresa', 17 | 'ie' => '0000000000', 18 | 'unidade_empresa' => 'matriz', 19 | 'email' => 'email', 20 | 'subdominio' => 'nfe.meudominio.com.br', 21 | 'url_notificacao' => 'http://meudominio.com/retorno.php', 22 | 'logomarca' => 'http://meudominio.com.br/logomarca.jpg' 23 | ); 24 | 25 | // Solicita a atualização dos dados 26 | $webmaniabr = new NFe('SEU_CONSUMER_KEY', 'SEU_CONSUMER_SECRET', 'SEU_ACCESS_TOKEN', 'SEU_ACCESS_TOKEN_SECRET'); 27 | $response = $webmaniabr->atualizarEmpresa( $data ); 28 | 29 | // Retorno 30 | if (!isset($response->error)){ 31 | 32 | $sucess = (string) $response->success; 33 | 34 | echo "

Resultado da atualização: {$sucess}

"; 35 | 36 | exit(); 37 | 38 | } else { 39 | 40 | echo '

Erro: '.$response->error.'

'; 41 | 42 | if (isset($response->log)){ 43 | 44 | echo '

Log:

'; 45 | echo ''; 54 | 55 | } 56 | 57 | exit(); 58 | 59 | } 60 | -------------------------------------------------------------------------------- /exemplos/manifestacaoDestinatario.php: -------------------------------------------------------------------------------- 1 | manifestacaoDestinatario( $chave, $ambiente, $evento, $justificativa ); 22 | 23 | /** 24 | * Retorno 25 | */ 26 | if (!isset($response->error)){ 27 | 28 | echo '

Resultado da Manifestação do Destinatário:

'; 29 | 30 | $uuid = (string) $response->uuid; // // Número único de identificação 31 | $status = (string) $response->status; // aprovado ou reprovado 32 | $evento = (string) $response->evento; // Evento da MDe 33 | $modelo = (string) $response->modelo; 34 | $xml = (string) $response->xml; // URL do XML 35 | $log = $response->log; // Log de retorno do SEFAZ 36 | 37 | print_r($response); 38 | exit(); 39 | 40 | } else { 41 | 42 | echo '

Erro: '.$response->error.'

'; 43 | exit(); 44 | 45 | } 46 | -------------------------------------------------------------------------------- /exemplos/cancelarNotaFiscal.php: -------------------------------------------------------------------------------- 1 | cancelarNotaFiscal( $chave_uuid, $motivo ); 24 | 25 | /** 26 | * Retorno 27 | */ 28 | if (!isset($response->error)){ 29 | 30 | echo '

Resultado do Cancelamento:

'; 31 | 32 | $status = (string) $response->status; 33 | $xml = (string) $response->xml; 34 | $log = $response->log; 35 | 36 | print_r($response); 37 | exit(); 38 | 39 | } else { 40 | 41 | echo '

Erro: '.$response->error.'

'; 42 | 43 | if (isset($response->log)){ 44 | 45 | echo '

Log:

'; 46 | echo ''; 55 | 56 | } 57 | 58 | exit(); 59 | 60 | } 61 | -------------------------------------------------------------------------------- /exemplos/notificacoesNotaFiscal.php: -------------------------------------------------------------------------------- 1 | '2020-01-01', // Data de início do relatório, formato americano: YYYY-MM-DD 12 | 'data_final' => '2020-01-31', // Data final do relatório, formato americano: YYYY-MM-DD 13 | 'modelo' => 'nfe', // Modelo da Nota Fiscal (nfe, nfce, cce) 14 | 'relatorio' => 'xml', // Relatório a ser exportado (csv, xml, danfe) 15 | 'status' => 'emitidas', // Filtrar status das Notas Fiscais (emitidas, canceladas, denegadas, inutilizadas) 16 | 'url_notificacao' => 'http://meudominio.com/retorno.php' // URL de notificação com retorno da URL para download do Relatório 17 | ); 18 | 19 | // Solicita a exportação dos relatórios 20 | $webmaniabr = new NFe('SEU_CONSUMER_KEY', 'SEU_CONSUMER_SECRET', 'SEU_ACCESS_TOKEN', 'SEU_ACCESS_TOKEN_SECRET'); 21 | $response = $webmaniabr->exportarRelatorios( $data ); 22 | 23 | // Retorno 24 | if (!isset($response->error)){ 25 | 26 | $uuid = (string) $response->uuid; // Número único de identificação da Nota Fiscal 27 | $status = (string) $response->status; // processando ou concluido 28 | $data_inicio = (string) $response->data_inicio; 29 | $data_final = (string) $response->data_final; 30 | $modelo = (string) $response->modelo; 31 | $relatorio = (string) $response->relatorio; 32 | $total = (string) $response->total; // Total de resultados encontrados 33 | 34 | if ($status === 'processando') { 35 | 36 | $processado = (string) $response->processado; // Progresso da exportação 37 | 38 | echo '

Relatórios solicitados. Exportação ainda não concluída.

'; 39 | 40 | } else { 41 | 42 | $url = (string) $response->url; // URL de download 43 | $expira = (string) $response->expira; // Data de expiração do relatório 44 | 45 | echo '

Exportação concluída com sucesso.

'; 46 | 47 | } 48 | 49 | print_r($response); 50 | exit(); 51 | 52 | } else { 53 | 54 | echo '

Erro: '.$response->error.'

'; 55 | 56 | if (isset($response->log)){ 57 | 58 | echo '

Log:

'; 59 | echo ''; 68 | 69 | } 70 | 71 | exit(); 72 | 73 | } -------------------------------------------------------------------------------- /exemplos/devolucaoNotaFiscal.php: -------------------------------------------------------------------------------- 1 | devolucaoNotaFiscal( $chave_uuid, $natureza_operacao, $ambiente, $codigo_cfop, $classe_imposto, $produtos, $volume, $informacoes_fisco, $informacoes_complementares, $url_notificacao ); 26 | 27 | /** 28 | * Retorno 29 | */ 30 | if (!isset($response->error)){ 31 | 32 | echo '

NF-e de devolução emitida com sucesso.

'; 33 | 34 | $uuid = (string) $response->uuid; // Número único de identificação da Nota Fiscal 35 | $status = (string) $response->status; // aprovado, reprovado, cancelado, processamento ou contingencia 36 | $nfe = (int) $response->nfe; // Número da NF-e 37 | $serie = (int) $response->serie; // Número de série 38 | $recibo = (int) $response->recibo; // Número do recibo 39 | $chave = $response->chave; // Número da chave de acesso 40 | $xml = (string) $response->xml; // URL do XML 41 | $danfe = (string) $response->danfe; // URL do Danfe (PDF) 42 | $log = $response->log; // Log do Sefaz 43 | 44 | print_r($response); 45 | exit(); 46 | 47 | } else { 48 | 49 | echo '

Erro: '.$response->error.'

'; 50 | 51 | if (isset($response->log)){ 52 | 53 | echo '

Log:

'; 54 | echo ''; 63 | 64 | } 65 | 66 | exit(); 67 | 68 | } 69 | -------------------------------------------------------------------------------- /exemplos/ajusteNotaFiscal.php: -------------------------------------------------------------------------------- 1 | 1, // Tipo de Operação da Nota Fiscal 17 | 'natureza_operacao' => 'CREDITO ICMS S/ ESTOQUE', // Natureza da Operação 18 | 'codigo_cfop' => 2.949, // Código CFOP de ajuste 19 | 'valor_icms' => 1000.00, // Valor do ICMS a ser ajustado 20 | 'ambiente' => 2, // Identificação do Ambiente do Sefaz 21 | 'cliente' => array( // Informações do cliente 22 | 'cpf' => '000.000.000-00', // Número do CPF 23 | 'nome_completo' => 'Nome completo', // Nome completo 24 | 'endereco' => 'Av. Brg. Faria Lima', // Endereço de entrega dos produtos 25 | 'complemento' => 'Escritório', // Complemento do endereço de entrega 26 | 'numero' => 1000, // Número do endereço de entrega 27 | 'bairro' => 'Itaim Bibi', // Número do endereço de entrega 28 | 'cidade' => 'São Paulo', // Cidade do endereço de entrega 29 | 'uf' => 'SP', // Estado do endereço de entrega 30 | 'cep' => '00000-000', // CEP do endereço de entrega 31 | 'telefone' => '(00) 0000-0000', //Telefone do cliente 32 | 'email' => 'nome@email.com' // E-mail do cliente para envio da NF-e 33 | ) 34 | ); 35 | 36 | //Emissão de Nota Fiscal de ajuste 37 | $webmaniabr = new NFe('SEU_CONSUMER_KEY', 'SEU_CONSUMER_SECRET', 'SEU_ACCESS_TOKEN', 'SEU_ACCESS_TOKEN_SECRET'); 38 | $response = $webmaniabr->ajusteNotaFiscal( $data ); 39 | 40 | // Retorno 41 | if (!isset($response->error)){ 42 | 43 | echo '

Ajuste de Nota Fiscal Eletrônica.

'; 44 | 45 | $uuid = (string) $response->uuid; // Número único de identificação 46 | $status = (string) $response->status; // aprovado, reprovado, cancelado, processamento ou contingencia 47 | $nfe = (int) $response->nfe; // Número da NF-e 48 | $serie = (int) $response->serie; // Número de série 49 | $recibo = (int) $response->recibo; // Número do recibo 50 | $chave = $response->chave; // Número da chave de acesso 51 | $xml = (string) $response->xml; // URL do XML 52 | $danfe = (string) $response->danfe; // URL do Danfe (PDF) 53 | $log = $response->log; // Log de retorno do SEFAZ 54 | 55 | print_r($response); 56 | exit(); 57 | 58 | } else { 59 | 60 | echo '

Erro: '.$response->error.'

'; 61 | 62 | if(isset($response->log)){ 63 | echo '

Log:

'; 64 | echo ''; 73 | } 74 | 75 | exit(); 76 | 77 | } 78 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 | 5 | # NF-e PHP SDK 6 | 7 | Através do emissor de Nota Fiscal da Webmania®, você conta com a emissão e arquivamento das suas notas fiscais, cálculo automático de impostos, geração do Danfe para impressão e envio automático de e-mails para os clientes. Realize a integração com o seu sistema utilizando a nossa REST API. 8 | 9 | - Emissor de Nota Fiscal Webmania®: [Saiba mais](https://webmaniabr.com/nota-fiscal-eletronica/) 10 | - Documentação REST API: [Visualizar](https://webmaniabr.com/docs/rest-api-nfe/) 11 | 12 | ## Requisitos 13 | 14 | - Contrate um dos planos de Nota Fiscal Eletrônica da Webmania®: [Assine agora](https://webmaniabr.com/nota-fiscal-eletronica/#plans-section). 15 | - Instale o [Composer](https://getcomposer.org/) 16 | - Realize a integração com o seu sistema. 17 | 18 | ## Endpoints 19 | 20 | A SDK está disponível para todos os recursos da versão **3.7.0** da API de Nota Fiscal [(changelog)](https://ajuda.webmaniabr.com/hc/pt-br/articles/360013266171). 21 | 22 |

23 | 24 |

25 | 26 | ## Utilização 27 | Instale o módulo da Webmania® via composer ou baixe nosso repositório e utilize a classe NFe.php que se encontra dentro de src/WebmaniaBR/: 28 | 29 | ```php 30 | composer require webmaniabr/nfe 31 | ``` 32 | 33 | Após executar o composer, adicione o require no topo do seu arquivo. Caso tenha baixado manualmente, importe o arquivo NFe.php diretamente na sua aplicação: 34 | 35 | ```php 36 | require_once __DIR__ . '/vendor/autoload.php'; 37 | use WebmaniaBR\NFe; 38 | ``` 39 | 40 | Caso esteja usando algum framework, como por exemplo o Laravel, instale o módulo da Webmania® via composer e referencie o seguinte namespace em seu controller: 41 | 42 | ```php 43 | use WebmaniaBR\NFe; 44 | ``` 45 | 46 | Dessa forma, a classe NFe já pode ser instanciada e utilizada conforme a sua necessidade! 47 | Informe as suas credenciais de acesso diretamente no método construtor da classe NFe: 48 | 49 | ```php 50 | $this->webmaniabr = new NFe('SEU_CONSUMER_KEY', 'SEU_CONSUMER_SECRET', 'SEU_ACCESS_TOKEN', 'SEU_ACCESS_TOKEN_SECRET'); 51 | ``` 52 | 53 | E pronto, sua plataforma já está pronta para se comunicar com a API da Webmania®. 54 | Para emitir uma NF-e por exemplo, deve ser utilizado o método ``` emissaoNotaFiscal( $data ) ```: 55 | 56 | ```php 57 | $response = $this->webmaniabr->emissaoNotaFiscal( $data ); 58 | 59 | if (!$response->error) { 60 | 61 | echo $response->uuid; // Número único de identificação da Nota Fiscal 62 | echo $response->status; // aprovado, reprovado, cancelado, processamento ou contingencia 63 | echo $response->nfe; // Número da NF-e 64 | echo $response->serie; // Número de série 65 | echo $response->recibo; // Número do recibo 66 | echo $response->chave; // Número da chave de acesso 67 | echo $response->xml; // URL do XML 68 | echo $response->danfe; // URL do Danfe (PDF) 69 | echo $response->log; // Log do Sefaz 70 | 71 | } else { 72 | 73 | echo 'Ocorreu um erro: ' . $resp->error; 74 | 75 | } 76 | ``` 77 | 78 | ## Suporte 79 | 80 | Qualquer dúvida entre em contato na nossa [Central de Ajuda](https://ajuda.webmaniabr.com) ou acesse o [Painel de Controle](https://webmaniabr.com/painel/) para conversar em tempo real no Chat ou Abrir um chamado. 81 | -------------------------------------------------------------------------------- /exemplos/complementarNotaFiscal.php: -------------------------------------------------------------------------------- 1 | '00000000000000000000000000000000000000000000', 18 | 'operacao' => 1, 19 | 'natureza_operacao' => 'COMPLEMENTAR', 20 | 'ambiente' => 2, 21 | 'cliente'=> array( 22 | 'cpf' => '000.000.000-00', 23 | 'nome_completo' => 'Nome completo', 24 | 'endereco' => 'Av. Brg. Faria Lima', 25 | 'complemento' => 'Escritorio', 26 | 'numero' => 1000, 27 | 'bairro' => 'Itaim Bibi', 28 | 'cidade' => 'São Paulo', 29 | 'uf' => 'SP', 30 | 'cep' => '00000-000', 31 | 'telefone' => '(00) 0000-0000', 32 | 'email' => 'nome@email.com', 33 | ) 34 | ); 35 | 36 | /** 37 | * Complementar Preço e/ou quantidade 38 | */ 39 | $data['produtos'] = array( 40 | array( 41 | 'nome' => 'Nome do produto', 42 | 'codigo' => 'nome-do-produto', 43 | 'ncm' => '6109.10.00', 44 | 'cest' => '28.038.00', 45 | 'quantidade' => 1, // Complementar quantidade 46 | 'unidade' => 'UN', 47 | 'origem' => 0, 48 | 'subtotal' => '29.90', // Complementar preço 49 | 'total' => '29.90', // Complementar preço 50 | 'impostos' => array( 51 | 'icms' => array( 52 | 'codigo_cfop' => '6.102', // Código Fiscal de Operações e Prestações (CFOP) 53 | 'situacao_tributaria' => '102', // Código da situação tributária 54 | ), 55 | ) 56 | ) 57 | ); 58 | 59 | /** 60 | * Complementar Impostos (ICMS, ICMS ST e/ou IPI) 61 | */ 62 | $data['impostos'] = array( 63 | "codigo_cfop" => "6.102", // Código CFOP 64 | "situacao_tributaria" => "900", // Situação tributária do ICMS 65 | "bc_icms" => "100.00", // Complementar ICMS 66 | "valor_icms" => "18.00" // Complementar ICMS 67 | ); 68 | 69 | //Emissão 70 | $webmaniabr = new NFe('SEU_CONSUMER_KEY', 'SEU_CONSUMER_SECRET', 'SEU_ACCESS_TOKEN', 'SEU_ACCESS_TOKEN_SECRET'); 71 | $response = $webmaniabr->complementarNotaFiscal( $data ); 72 | 73 | //Retorno 74 | if (!isset($response->error)){ 75 | 76 | echo '

NF-e complementar enviada com sucesso.

'; 77 | 78 | $uuid = (string) $response->uuid; // Número único de identificação da Nota Fiscal 79 | $status = (string) $response->status; // aprovado, reprovado, cancelado, processamento ou contingencia 80 | $nfe = (int) $response->nfe; // Número da NF-e 81 | $serie = (int) $response->serie; // Número de série 82 | $recibo = (int) $response->recibo; // Número do recibo 83 | $chave = $response->chave; // Número da chave de acesso 84 | $xml = (string) $response->xml; // URL do XML 85 | $danfe = (string) $response->danfe; // URL do Danfe (PDF) 86 | $log = $response->log; // Log do Sefaz 87 | 88 | print_r($response); 89 | exit(); 90 | 91 | } else { 92 | 93 | echo '

Erro: '.$response->error.'

'; 94 | 95 | if (isset($response->log)){ 96 | echo '

Log:

'; 97 | echo ''; 106 | } 107 | 108 | exit(); 109 | 110 | } 111 | -------------------------------------------------------------------------------- /exemplos/criarEditarClasseImposto.php: -------------------------------------------------------------------------------- 1 | 'REF0000000', // Código de referência da Classe de Imposto (para editar) 18 | "descricao" => "Classe de impostos para Saída de produtos de revenda", 19 | "icms" => array( 20 | array( 21 | "tipo_tributacao" => "simples_nacional", 22 | "cenario" => "saida_dentro_estado", 23 | "tipo_pessoa" => "fisica", 24 | "codigo_cfop" => "5102", 25 | "situacao_tributaria" => "102" 26 | ), 27 | array( 28 | "tipo_tributacao" => "simples_nacional", 29 | "cenario" => "saida_fora_estado", 30 | "tipo_pessoa" => "fisica", 31 | "codigo_cfop" => "6102", 32 | "situacao_tributaria" => "102" 33 | ), 34 | array( 35 | "tipo_tributacao" => "simples_nacional", 36 | "cenario" => "saida_dentro_estado", 37 | "tipo_pessoa" => "juridica", 38 | "codigo_cfop" => "5102", 39 | "situacao_tributaria" => "102" 40 | ), 41 | array( 42 | "tipo_tributacao" => "simples_nacional", 43 | "cenario" => "saida_fora_estado", 44 | "tipo_pessoa" => "juridica", 45 | "codigo_cfop" => "6102", 46 | "situacao_tributaria" => "102" 47 | ), 48 | ), 49 | "ipi" => array( 50 | array( 51 | "cenario" => "padrao", 52 | "tipo_pessoa" => "fisica", 53 | "situacao_tributaria" => "99", 54 | "codigo_enquadramento" => "999", 55 | "aliquota" => "0.00" 56 | ), 57 | array( 58 | "cenario" => "padrao", 59 | "tipo_pessoa" => "juridica", 60 | "situacao_tributaria" => "99", 61 | "codigo_enquadramento" => "999", 62 | "aliquota" => "0.00" 63 | ) 64 | ), 65 | "pis" => array( 66 | array( 67 | "cenario" => "padrao", 68 | "tipo_pessoa" => "fisica", 69 | "situacao_tributaria" => "99", 70 | "aliquota" => "0.00" 71 | ), 72 | array( 73 | "cenario" => "padrao", 74 | "tipo_pessoa" => "juridica", 75 | "situacao_tributaria" => "99", 76 | "aliquota" => "0.00" 77 | ) 78 | ), 79 | "cofins" => array( 80 | array( 81 | "cenario" => "padrao", 82 | "tipo_pessoa" => "fisica", 83 | "situacao_tributaria" => "99", 84 | "aliquota" => "0.00" 85 | ), 86 | array( 87 | "cenario" => "padrao", 88 | "tipo_pessoa" => "juridica", 89 | "situacao_tributaria" => "99", 90 | "aliquota" => "0.00" 91 | ) 92 | ) 93 | ); 94 | 95 | /** 96 | * Solicitação do cancelamento 97 | */ 98 | $webmaniabr = new NFe('SEU_CONSUMER_KEY', 'SEU_CONSUMER_SECRET', 'SEU_ACCESS_TOKEN', 'SEU_ACCESS_TOKEN_SECRET'); 99 | $response = $webmaniabr->classeImposto( $data, 'POST' ); 100 | 101 | /** 102 | * Retorno 103 | */ 104 | if (!isset($response->error)){ 105 | 106 | echo '

Classe de imposto criada/editada com sucesso!

'; 107 | 108 | $referencia = (string) $response->referencia; // Código de referência da Classe de Imposto 109 | $descricao = (string) $response->descricao; // Descrição da Classe de Imposto 110 | $data = $response->data; // Data da criação da Classe de Imposto 111 | 112 | print_r($response); 113 | exit(); 114 | 115 | } else { 116 | 117 | echo '

Erro: '.$response->error.'

'; 118 | 119 | if (isset($response->log)){ 120 | 121 | echo '

Log:

'; 122 | echo ''; 131 | 132 | } 133 | 134 | exit(); 135 | 136 | } 137 | -------------------------------------------------------------------------------- /exemplos/emissaoNotaFiscal-Armamentos.php: -------------------------------------------------------------------------------- 1 | 'Nome do produto', // Nome do produto 20 | 'codigo' => 'nome-do-produto', // Código do produto 21 | 'ncm' => '6109.10.00', // Código NCM 22 | 'cest' => '28.038.00', // Código CEST 23 | 'quantidade' => 1, // Quantidade de itens 24 | 'unidade' => 'UN', // Unidade de medida da quantidade de itens 25 | 'peso' => '0.500', // Peso em KG. Ex: 800 gramas = 0.800 KG 26 | 'origem' => 0, // Origem do produto 27 | 'armamentos' => array( 28 | 'tipo' => '0', // Indicador do tipo de arma de fogo 29 | 'serie_arma' => '00000001', // Número de série da arma 30 | 'serie_cano' => '00000001', // Número de série do cano 31 | 'descricao' => 'Descrição completa da arma' // Descrição completa da arma 32 | ), 33 | 'subtotal' => '29.90', // Preço unitário do produto - sem descontos 34 | 'total' => '29.90', // Preço total (quantidade x preço unitário) - sem descontos 35 | 'tributos_federais' => '10.00', // Alíquota aproximada dos tributos federais 36 | 'tributos_estaduais' => '10.00', // Alíquota aproximada dos tributos estaduais 37 | 'impostos' => array( 38 | 'icms' => array( 39 | 'codigo_cfop' => '6.102', // Código Fiscal de Operações e Prestações (CFOP) 40 | 'situacao_tributaria' => '102', // Código da situação tributária 41 | ), 42 | 'ipi' => array( 43 | 'situacao_tributaria' => '99', // Código da situação tributária 44 | 'codigo_enquadramento' => '999', // Código de enquadramento 45 | 'aliquota' => '0.00', // Alíquota IPI 46 | ), 47 | 'pis' => array( 48 | 'situacao_tributaria' => '99', // Código da situação tributária 49 | 'aliquota' => '0.00', // Alíquota PIS 50 | ), 51 | 'cofins' => array( 52 | 'situacao_tributaria' => '99', // Código da situação tributária 53 | 'aliquota' => '0.00', // Alíquota COFINS 54 | ) 55 | ) 56 | ) 57 | ); 58 | 59 | 60 | /** 61 | * Informações do Pedido 62 | * Verificar emissaoNotaFiscal.php 63 | */ 64 | $data['pedido'] = array(); 65 | 66 | // Emissão 67 | $webmaniabr = new NFe('SEU_CONSUMER_KEY', 'SEU_CONSUMER_SECRET', 'SEU_ACCESS_TOKEN', 'SEU_ACCESS_TOKEN_SECRET'); 68 | $response = $webmaniabr->emissaoNotaFiscal( $data ); 69 | 70 | // Retorno 71 | if (!isset($response->error)){ 72 | 73 | echo '

NF-e enviada com sucesso.

'; 74 | 75 | $uuid = (string) $response->uuid; // Número único de identificação da Nota Fiscal 76 | $status = (string) $response->status; // aprovado, reprovado, cancelado, processamento ou contingencia 77 | $motivo = (string) $response->motivo; // Motivo do status 78 | $nfe = (int) $response->nfe; // Número da NF-e 79 | $serie = (int) $response->serie; // Número de série 80 | $modelo = (string) $response->modelo; // Modelo da Nota Fiscal (nfe, nfce, cce) 81 | $recibo = (int) $response->recibo; // Número do recibo 82 | $chave = (string)$response->chave; // Número da chave de acesso 83 | $xml = (string) $response->xml; // URL do XML 84 | $danfe = (string) $response->danfe; // URL do Danfe (PDF) 85 | $danfe_simples = (string) $response->danfe_simples; // URL do Danfe Simples (PDF) 86 | $danfe_etiqueta = (string) $response->danfe_etiqueta; // URL do Danfe Simplificada - Etiqueta (PDF) 87 | $log = $response->log; // Log do Sefaz 88 | 89 | print_r($response); 90 | 91 | exit(); 92 | 93 | } else { 94 | 95 | echo '

Erro: '.$response->error.'

'; 96 | 97 | if (isset($response->log)){ 98 | 99 | echo '

Log:

'; 100 | echo ''; 109 | 110 | } 111 | 112 | exit(); 113 | 114 | } 115 | -------------------------------------------------------------------------------- /exemplos/emissaoNotaFiscal-Medicamento.php: -------------------------------------------------------------------------------- 1 | 'Nome do produto', // Nome do produto 20 | 'codigo' => 'nome-do-produto', // Código do produto 21 | 'ncm' => '6109.10.00', // Código NCM 22 | 'cest' => '28.038.00', // Código CEST 23 | 'quantidade' => 1, // Quantidade de itens 24 | 'unidade' => 'UN', // Unidade de medida da quantidade de itens 25 | 'peso' => '0.500', // Peso em KG. Ex: 800 gramas = 0.800 KG 26 | 'origem' => 0, // Origem do produto 27 | 'medicamento' => array( 28 | 'codigo_anvisa' => '1234567891234', // Código de Produto da ANVISA 29 | 'pmc' => '10.00' // Preço máximo consumidor 30 | ), 31 | 'rastro' => array( 32 | 'lote' => '0001', // Número do Lote do produto 33 | 'quantidade' => '1', // Quantidade de produto no Lote 34 | 'data_fabricacao' => '0000-00-00', // Data de fabricação/produção 35 | 'data_validade' => '0000-00-00', // Data de validade 36 | 'codigo_agregacao' => '00000' // Código de Agregação 37 | ), 38 | 'subtotal' => '29.90', // Preço unitário do produto - sem descontos 39 | 'total' => '29.90', // Preço total (quantidade x preço unitário) - sem descontos 40 | 'tributos_federais' => '10.00', // Alíquota aproximada dos tributos federais 41 | 'tributos_estaduais' => '10.00', // Alíquota aproximada dos tributos estaduais 42 | 'impostos' => array( 43 | 'icms' => array( 44 | 'codigo_cfop' => '6.102', // Código Fiscal de Operações e Prestações (CFOP) 45 | 'situacao_tributaria' => '102', // Código da situação tributária 46 | ), 47 | 'ipi' => array( 48 | 'situacao_tributaria' => '99', // Código da situação tributária 49 | 'codigo_enquadramento' => '999', // Código de enquadramento 50 | 'aliquota' => '0.00', // Alíquota IPI 51 | ), 52 | 'pis' => array( 53 | 'situacao_tributaria' => '99', // Código da situação tributária 54 | 'aliquota' => '0.00', // Alíquota PIS 55 | ), 56 | 'cofins' => array( 57 | 'situacao_tributaria' => '99', // Código da situação tributária 58 | 'aliquota' => '0.00', // Alíquota COFINS 59 | ) 60 | ) 61 | ) 62 | ); 63 | 64 | /** 65 | * Informações do Pedido 66 | * Verificar emissaoNotaFiscal.php 67 | */ 68 | $data['pedido'] = array(); 69 | 70 | // Emissão 71 | $webmaniabr = new NFe('SEU_CONSUMER_KEY', 'SEU_CONSUMER_SECRET', 'SEU_ACCESS_TOKEN', 'SEU_ACCESS_TOKEN_SECRET'); 72 | $response = $webmaniabr->emissaoNotaFiscal( $data ); 73 | 74 | // Retorno 75 | if (!isset($response->error)){ 76 | 77 | echo '

NF-e enviada com sucesso.

'; 78 | 79 | $uuid = (string) $response->uuid; // Número único de identificação da Nota Fiscal 80 | $status = (string) $response->status; // aprovado, reprovado, cancelado, processamento ou contingencia 81 | $motivo = (string) $response->motivo; // Motivo do status 82 | $nfe = (int) $response->nfe; // Número da NF-e 83 | $serie = (int) $response->serie; // Número de série 84 | $modelo = (string) $response->modelo; // Modelo da Nota Fiscal (nfe, nfce, cce) 85 | $recibo = (int) $response->recibo; // Número do recibo 86 | $chave = (string)$response->chave; // Número da chave de acesso 87 | $xml = (string) $response->xml; // URL do XML 88 | $danfe = (string) $response->danfe; // URL do Danfe (PDF) 89 | $danfe_simples = (string) $response->danfe_simples; // URL do Danfe Simples (PDF) 90 | $danfe_etiqueta = (string) $response->danfe_etiqueta; // URL do Danfe Simplificada - Etiqueta (PDF) 91 | $log = $response->log; // Log do Sefaz 92 | 93 | print_r($response); 94 | 95 | exit(); 96 | 97 | } else { 98 | 99 | echo '

Erro: '.$response->error.'

'; 100 | 101 | if (isset($response->log)){ 102 | 103 | echo '

Log:

'; 104 | echo ''; 113 | 114 | } 115 | 116 | exit(); 117 | 118 | } 119 | -------------------------------------------------------------------------------- /exemplos/emissaoNotaFiscal-VeiculosNovos.php: -------------------------------------------------------------------------------- 1 | 'Nome do produto', // Nome do produto 20 | 'codigo' => 'nome-do-produto', // Código do produto 21 | 'ncm' => '6109.10.00', // Código NCM 22 | 'cest' => '28.038.00', // Código CEST 23 | 'quantidade' => 1, // Quantidade de itens 24 | 'unidade' => 'UN', // Unidade de medida da quantidade de itens 25 | 'peso' => '0.500', // Peso em KG. Ex: 800 gramas = 0.800 KG 26 | 'origem' => 0, // Origem do produto 27 | 'veiculos_novos' => array( 28 | 'tipo_operacao' => 1, // Tipo da operação 29 | 'chassi' => '0000000000000000000000', // Chassi do Veículo 30 | 'cor' => 'A1', // Cor 31 | 'cor_descricao' => 'Descrição da Cor', // Descrição da Cor 32 | 'cv' => '100', // Potência Motor (CV) 33 | 'cilindrada' => '1000', // Cilindradas 34 | 'peso_liquido' => '2.5000', // Peso líquido 35 | 'peso_bruto' => '2.5000', // Peso bruto total 36 | 'serie' => '00001', // Serial (série) 37 | 'tipo_combustivel' => '16', // Tipo de combustível 38 | 'numero_motor' => '00001', // Número de motor 39 | 'cmt' => '2.000', // Capacidade Máxima de Tração 40 | 'dist' => '150', // Distância entre eixos 41 | 'ano_modelo' => '2019', // Ano Modelo de Fabricação 42 | 'ano_fabricacao' => '2018', // Ano de Fabricação 43 | 'tipo_pintura' => '1', // Tipo de Pintura 44 | 'tipo_veiculo' => '06', // Tipo de Veículo 45 | 'especie_veiculo' => '1', // Espécie de Veículo 46 | 'vin' => 'N', // Condição do VIN 47 | 'condicao_veiculo' => '1', // Condição do veículo 48 | 'marca_modelo' => '00001', // Código Marca Modelo 49 | 'cor_denatran' => '04', // Código da Cor do DENETRAN 50 | 'lotacao' => '5', // Capacidade máxima de lotação 51 | 'restricao' => '0' // Restrição 52 | ), 53 | 'subtotal' => '29.90', // Preço unitário do produto - sem descontos 54 | 'total' => '29.90', // Preço total (quantidade x preço unitário) - sem descontos 55 | 'tributos_federais' => '10.00', // Alíquota aproximada dos tributos federais 56 | 'tributos_estaduais' => '10.00', // Alíquota aproximada dos tributos estaduais 57 | 'impostos' => array( 58 | 'icms' => array( 59 | 'codigo_cfop' => '6.102', // Código Fiscal de Operações e Prestações (CFOP) 60 | 'situacao_tributaria' => '102', // Código da situação tributária 61 | ), 62 | 'ipi' => array( 63 | 'situacao_tributaria' => '99', // Código da situação tributária 64 | 'codigo_enquadramento' => '999', // Código de enquadramento 65 | 'aliquota' => '0.00', // Alíquota IPI 66 | ), 67 | 'pis' => array( 68 | 'situacao_tributaria' => '99', // Código da situação tributária 69 | 'aliquota' => '0.00', // Alíquota PIS 70 | ), 71 | 'cofins' => array( 72 | 'situacao_tributaria' => '99', // Código da situação tributária 73 | 'aliquota' => '0.00', // Alíquota COFINS 74 | ) 75 | ) 76 | ) 77 | ); 78 | 79 | /** 80 | * Informações do Pedido 81 | * Verificar emissaoNotaFiscal.php 82 | */ 83 | $data['pedido'] = array(); 84 | 85 | // Emissão 86 | $webmaniabr = new NFe('SEU_CONSUMER_KEY', 'SEU_CONSUMER_SECRET', 'SEU_ACCESS_TOKEN', 'SEU_ACCESS_TOKEN_SECRET'); 87 | $response = $webmaniabr->emissaoNotaFiscal( $data ); 88 | 89 | // Retorno 90 | if (!isset($response->error)){ 91 | 92 | echo '

NF-e enviada com sucesso.

'; 93 | 94 | $uuid = (string) $response->uuid; // Número único de identificação da Nota Fiscal 95 | $status = (string) $response->status; // aprovado, reprovado, cancelado, processamento ou contingencia 96 | $motivo = (string) $response->motivo; // Motivo do status 97 | $nfe = (int) $response->nfe; // Número da NF-e 98 | $serie = (int) $response->serie; // Número de série 99 | $modelo = (string) $response->modelo; // Modelo da Nota Fiscal (nfe, nfce, cce) 100 | $recibo = (int) $response->recibo; // Número do recibo 101 | $chave = (string)$response->chave; // Número da chave de acesso 102 | $xml = (string) $response->xml; // URL do XML 103 | $danfe = (string) $response->danfe; // URL do Danfe (PDF) 104 | $danfe_simples = (string) $response->danfe_simples; // URL do Danfe Simples (PDF) 105 | $danfe_etiqueta = (string) $response->danfe_etiqueta; // URL do Danfe Simplificada - Etiqueta (PDF) 106 | $log = $response->log; // Log do Sefaz 107 | 108 | print_r($response); 109 | 110 | } else { 111 | 112 | echo '

Erro: '.$response->error.'

'; 113 | 114 | if (isset($response->log)){ 115 | 116 | echo '

Log:

'; 117 | echo ''; 126 | 127 | } 128 | 129 | exit(); 130 | 131 | } 132 | -------------------------------------------------------------------------------- /exemplos/emissaoNotaFiscal-Combustiveis.php: -------------------------------------------------------------------------------- 1 | 'Nome do produto', // Nome do produto 20 | 'codigo' => 'nome-do-produto', // Código do produto 21 | 'ncm' => '6109.10.00', // Código NCM 22 | 'cest' => '28.038.00', // Código CEST 23 | 'quantidade' => 1, // Quantidade de itens 24 | 'unidade' => 'UN', // Unidade de medida da quantidade de itens 25 | 'peso' => '0.500', // Peso em KG. Ex: 800 gramas = 0.800 KG 26 | 'origem' => 0, // Origem do produto 27 | 'combustiveis' => array( 28 | 'codigo_anp' => '740101005', // Código de produto da ANP 29 | 'descricao_anp' => 'ADITIVOS PARA BIODIESEL', // Descrição do produto conforme ANP 30 | 'uf_consumo' => 'SP', // Estado de consumo 31 | 'percentual_glp' => '0.00', // Opcional: Percentual do GLP derivado do petróleo no produto GLP 32 | 'percentual_gnn' => '0.00', // Opcional: Percentual de Gás Natural Nacional (GLGNn) para o produto GLP 33 | 'percentual_gni' => '0.00', // Opcional: Percentual de Gás Natural Importado (GLGNi) para o produto GLP 34 | 'partida' => '0.00', // Opcional: Valor de partida 35 | 'codif' => '00000', // Opcional: Código de autorização/registro do CODIF 36 | 'qtd_temperatura' => '0', // Opcional: Quantidade de combustível faturada à temperatura ambiente 37 | 'bc_cide' => '0.00', // Opcional: Base de cálculo da CIDE em quantidade 38 | 'valor_aliq_cide' => '0.00', // Opcional: Valor da alíquota em reais da CIDE 39 | 'bico' => '000', // Opcional: Número de identificação do bico utilizado no abastecimento 40 | 'bomba' => '000', // Opcional: Número de identificação da bomba ao qual o bico está interligado 41 | 'tanque' => '000', // Opcional: Número de identificação do tanque ao qual o bico está interligado 42 | 'encerrante_inicio' => '000', // Opcional: Valor do encerrante no início do abastecimento 43 | 'encerrante_final' => '000', // Opcional: Valor do encerrante no final do abastecimento 44 | ), 45 | 'subtotal' => '29.90', // Preço unitário do produto - sem descontos 46 | 'total' => '29.90', // Preço total (quantidade x preço unitário) - sem descontos 47 | 'tributos_federais' => '10.00', // Alíquota aproximada dos tributos federais 48 | 'tributos_estaduais' => '10.00', // Alíquota aproximada dos tributos estaduais 49 | 'impostos' => array( 50 | 'icms' => array( 51 | 'codigo_cfop' => '6.102', // Código Fiscal de Operações e Prestações (CFOP) 52 | 'situacao_tributaria' => '102', // Código da situação tributária 53 | ), 54 | 'ipi' => array( 55 | 'situacao_tributaria' => '99', // Código da situação tributária 56 | 'codigo_enquadramento' => '999', // Código de enquadramento 57 | 'aliquota' => '0.00', // Alíquota IPI 58 | ), 59 | 'pis' => array( 60 | 'situacao_tributaria' => '99', // Código da situação tributária 61 | 'aliquota' => '0.00', // Alíquota PIS 62 | ), 63 | 'cofins' => array( 64 | 'situacao_tributaria' => '99', // Código da situação tributária 65 | 'aliquota' => '0.00', // Alíquota COFINS 66 | ) 67 | ) 68 | ) 69 | ); 70 | 71 | /** 72 | * Informações do Pedido 73 | * Verificar emissaoNotaFiscal.php 74 | */ 75 | $data['pedido'] = array(); 76 | 77 | // Emissão 78 | $webmaniabr = new NFe('SEU_CONSUMER_KEY', 'SEU_CONSUMER_SECRET', 'SEU_ACCESS_TOKEN', 'SEU_ACCESS_TOKEN_SECRET'); 79 | $response = $webmaniabr->emissaoNotaFiscal( $data ); 80 | 81 | // Retorno 82 | if (!isset($response->error)){ 83 | 84 | echo '

NF-e enviada com sucesso.

'; 85 | 86 | $uuid = (string) $response->uuid; // Número único de identificação da Nota Fiscal 87 | $status = (string) $response->status; // aprovado, reprovado, cancelado, processamento ou contingencia 88 | $motivo = (string) $response->motivo; // Motivo do status 89 | $nfe = (int) $response->nfe; // Número da NF-e 90 | $serie = (int) $response->serie; // Número de série 91 | $modelo = (string) $response->modelo; // Modelo da Nota Fiscal (nfe, nfce, cce) 92 | $recibo = (int) $response->recibo; // Número do recibo 93 | $chave = (string)$response->chave; // Número da chave de acesso 94 | $xml = (string) $response->xml; // URL do XML 95 | $danfe = (string) $response->danfe; // URL do Danfe (PDF) 96 | $danfe_simples = (string) $response->danfe_simples; // URL do Danfe Simples (PDF) 97 | $danfe_etiqueta = (string) $response->danfe_etiqueta; // URL do Danfe Simplificada - Etiqueta (PDF) 98 | $log = $response->log; // Log do Sefaz 99 | 100 | print_r($response); 101 | 102 | exit(); 103 | 104 | } else { 105 | 106 | echo '

Erro: '.$response->error.'

'; 107 | 108 | if (isset($response->log)){ 109 | 110 | echo '

Log:

'; 111 | echo ''; 120 | 121 | } 122 | 123 | exit(); 124 | 125 | } 126 | -------------------------------------------------------------------------------- /src/WebmaniaBR/NFe.php: -------------------------------------------------------------------------------- 1 | consumerKey = $consumer_key; 16 | $this->consumerSecret = $consumer_secret; 17 | $this->accessToken = $access_token; 18 | $this->accessTokenSecret = $acccess_token_secret; 19 | 20 | } 21 | 22 | function statusSefaz( $data = null ){ 23 | 24 | $data = array(); 25 | $response = $this->connectWebmaniaBR( 'GET', 'https://webmaniabr.com/api/1/nfe/sefaz/', $data ); 26 | if (isset($response->error)) return $response; 27 | if ($response->status == 'online') return true; 28 | else return false; 29 | 30 | } 31 | 32 | function validadeCertificado( $data = null ){ 33 | 34 | $data = array(); 35 | $response = $this->connectWebmaniaBR( 'GET', 'https://webmaniabr.com/api/1/nfe/certificado/', $data ); 36 | if (isset($response->error)) return $response; 37 | return $response->expiration; 38 | 39 | } 40 | 41 | function emissaoNotaFiscal( array $data ){ 42 | 43 | $response = $this->connectWebmaniaBR( 'POST', 'https://webmaniabr.com/api/1/nfe/emissao/', $data ); 44 | return $response; 45 | 46 | } 47 | 48 | function consultaNotaFiscal( $chave_uuid ){ 49 | 50 | $data = $this->validate_key_uuid( $chave_uuid ); 51 | 52 | if (is_object($data) && $data->error){ 53 | return $data->error; 54 | } 55 | 56 | $response = $this->connectWebmaniaBR( 'GET', 'https://webmaniabr.com/api/1/nfe/consulta/', $data ); 57 | return $response; 58 | 59 | } 60 | 61 | function cancelarNotaFiscal( $chave_uuid, $motivo ){ 62 | 63 | $data = $this->validate_key_uuid( $chave_uuid ); 64 | 65 | if (is_object($data) && $data->error){ 66 | return $data->error; 67 | } 68 | 69 | $data = array( 70 | key($data) => $data[key($data)], 71 | 'motivo' => $motivo 72 | ); 73 | 74 | $response = $this->connectWebmaniaBR( 'PUT', 'https://webmaniabr.com/api/1/nfe/cancelar/', $data ); 75 | return $response; 76 | 77 | } 78 | 79 | function inutilizarNumeracao( $sequencia, $motivo, $ambiente, $serie = '', $modelo = '' ){ 80 | 81 | $data = array( 82 | 'sequencia' => $sequencia, 83 | 'motivo' => $motivo, 84 | 'ambiente' => $ambiente, 85 | 'serie' => $serie, 86 | 'modelo' => $modelo 87 | ); 88 | 89 | $response = $this->connectWebmaniaBR( 'PUT', 'https://webmaniabr.com/api/1/nfe/inutilizar/', $data ); 90 | return $response; 91 | 92 | } 93 | 94 | function cartaCorrecao( $chave_uuid, $correcao, $ambiente = '', $evento = '', $url_notificacao = '' ){ 95 | 96 | $data = $this->validate_key_uuid( $chave_uuid ); 97 | 98 | if (is_object($data) && $data->error){ 99 | return $data->error; 100 | } 101 | 102 | $data = array( 103 | key($data) => $data[key($data)], 104 | 'correcao' => $correcao, 105 | 'ambiente' => $ambiente, 106 | 'evento' => $evento, 107 | 'url_notificacao' => $url_notificacao 108 | ); 109 | 110 | $response = $this->connectWebmaniaBR( 'POST', 'https://webmaniabr.com/api/1/nfe/cartacorrecao/', $data ); 111 | return $response; 112 | 113 | } 114 | 115 | function devolucaoNotaFiscal( $chave_uuid, $natureza_operacao, $ambiente, $codigo_cfop = '', $classe_imposto = '', $produtos = array(), $volume = '', $informacoes_fisco = '', $informacoes_complementares = '', $url_notificacao = '' ){ 116 | 117 | $data = $this->validate_key_uuid( $chave_uuid ); 118 | 119 | if (is_object($data) && $data->error){ 120 | return $data->error; 121 | } 122 | 123 | $data = array( 124 | key($data) => $data[key($data)], 125 | 'natureza_operacao' => $natureza_operacao, 126 | 'ambiente' => $ambiente, 127 | 'codigo_cfop' => $codigo_cfop, 128 | 'classe_imposto' => $classe_imposto, 129 | 'produtos' => $produtos, 130 | 'volume' => $volume, 131 | 'informacoes_fisco' => $informacoes_fisco, 132 | 'informacoes_complementares' => $informacoes_complementares, 133 | 'url_notificacao' => $url_notificacao 134 | ); 135 | 136 | $response = $this->connectWebmaniaBR( 'POST', 'https://webmaniabr.com/api/1/nfe/devolucao/', $data ); 137 | return $response; 138 | 139 | } 140 | 141 | function ajusteNotaFiscal( $data ){ 142 | 143 | $response = $this->connectWebmaniaBR( 'POST', 'https://webmaniabr.com/api/1/nfe/ajuste/', $data ); 144 | return $response; 145 | 146 | } 147 | 148 | function complementarNotaFiscal( $data ) { 149 | 150 | $response = $this->connectWebmaniaBR( 'POST', 'https://webmaniabr.com/api/1/nfe/complementar/', $data); 151 | return $response; 152 | 153 | } 154 | 155 | function atualizarEmpresa( $data ) { 156 | 157 | $response = $this->connectWebmaniaBR( 'POST', 'https://webmaniabr.com/api/1/nfe/empresa/', $data); 158 | return $response; 159 | 160 | } 161 | 162 | function exportarRelatorios( $data ) { 163 | 164 | $response = $this->connectWebmaniaBR( 'POST', 'https://webmaniabr.com/api/1/nfe/relatorios/', $data); 165 | return $response; 166 | 167 | } 168 | 169 | function manifestacaoDestinatario( $chave, $ambiente, $evento, $justificativa = '' ) { 170 | 171 | $data = array( 172 | 'chave' => $chave, 173 | 'ambiente' => $ambiente, 174 | 'evento' => $evento, 175 | 'justificativa' => $justificativa 176 | ); 177 | 178 | $response = $this->connectWebmaniaBR( 'POST', 'https://webmaniabr.com/api/1/nfe/manifesta/', $data); 179 | return $response; 180 | 181 | } 182 | 183 | function classeImposto( $data = array(), $method = 'POST' ) { 184 | 185 | $response = $this->connectWebmaniaBR( $method, 'https://webmaniabr.com/api/1/nfe/classe-imposto/', $data); 186 | return $response; 187 | 188 | } 189 | 190 | function validate_key_uuid( $key_uuid ){ 191 | 192 | $data = []; 193 | 194 | if (strlen(preg_replace("/[^0-9]/", '', $key_uuid)) == 44){ 195 | $data['chave'] = preg_replace("/[^0-9]/", '', $key_uuid); 196 | } else if (strlen(trim($key_uuid)) == 36) { 197 | $data['uuid'] = trim($key_uuid); 198 | } else { 199 | $response = new StdClass; 200 | $response->error = 'Informado Chave ou UUID inválido.'; 201 | } 202 | 203 | if ($data){ 204 | return $data; 205 | } else { 206 | return $response; 207 | } 208 | 209 | } 210 | 211 | function connectWebmaniaBR( $request, $endpoint, $data ){ 212 | 213 | // Verify cURL 214 | if (!function_exists('curl_version')){ 215 | 216 | $curl_error = new StdClass; 217 | $curl_error->error = 'cURL não localizado! Não é possível obter conexão na API da WebmaniaBR®. Verifique junto ao programador e a sua hospedagem. (PHP: '.phpversion().')'; 218 | 219 | return $curl_error; 220 | 221 | } 222 | 223 | // Set limits 224 | @set_time_limit( 300 ); 225 | ini_set('max_execution_time', 300); 226 | ini_set('max_input_time', 300); 227 | ini_set('memory_limit', '256M'); 228 | if ( 229 | strpos($endpoint, '/sefaz/') !== false || 230 | strpos($endpoint, '/certificado/') !== false 231 | ){ 232 | $timeout = 5; 233 | } else { 234 | $timeout = 300; 235 | } 236 | 237 | // Header 238 | $headers = array( 239 | 'Cache-Control: no-cache', 240 | 'Content-Type:application/json', 241 | 'X-Consumer-Key: '.$this->consumerKey, 242 | 'X-Consumer-Secret: '.$this->consumerSecret, 243 | 'X-Access-Token: '.$this->accessToken, 244 | 'X-Access-Token-Secret: '.$this->accessTokenSecret 245 | ); 246 | 247 | // Init connection 248 | $rest = curl_init(); 249 | curl_setopt($rest, CURLOPT_CONNECTTIMEOUT , $timeout); 250 | curl_setopt($rest, CURLOPT_TIMEOUT, $timeout); 251 | curl_setopt($rest, CURLOPT_URL, $endpoint); 252 | curl_setopt($rest, CURLOPT_RETURNTRANSFER, true); 253 | curl_setopt($rest, CURLOPT_SSL_VERIFYPEER, false); 254 | curl_setopt($rest, CURLOPT_SSL_VERIFYHOST, false); 255 | curl_setopt($rest, CURLOPT_CUSTOMREQUEST, $request); 256 | curl_setopt($rest, CURLOPT_POSTFIELDS, json_encode( $data )); 257 | curl_setopt($rest, CURLOPT_HTTPHEADER, $headers); 258 | curl_setopt($rest, CURLOPT_FRESH_CONNECT, true); 259 | curl_setopt($rest, CURLOPT_FOLLOWLOCATION, 1); 260 | curl_setopt($rest, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); 261 | curl_setopt($rest, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_NONE); 262 | curl_setopt($rest, CURLOPT_SSLVERSION, CURL_SSLVERSION_DEFAULT); 263 | 264 | // Connect to API 265 | $response = curl_exec($rest); 266 | $http_status = curl_getinfo($rest, CURLINFO_HTTP_CODE); 267 | $curl_errno = (int) curl_errno($rest); 268 | if ($curl_errno){ 269 | $curl_strerror = curl_strerror($curl_errno); 270 | } 271 | curl_close($rest); 272 | 273 | // Get cURL errors 274 | $curl_error = new StdClass; 275 | 276 | if ($curl_errno){ 277 | 278 | // Get User IP 279 | $ip = $_SERVER['CF-Connecting-IP']; // CloudFlare 280 | 281 | if (!$ip){ 282 | $ip = $_SERVER['REMOTE_ADDR']; // Standard 283 | } 284 | if (is_array($ip)){ 285 | $ip = $ip[0]; 286 | } 287 | 288 | // cURL errors 289 | if (!$http_status){ 290 | $curl_error->error = 'Não foi possível obter conexão na API da WebmaniaBR®, possível relação com bloqueio no Firewall ou versão antiga do PHP. Verifique junto ao programador e a sua hospedagem a comunicação na URL: https://webmaniabr.com/api/. (cURL: '.$curl_strerror.' | PHP: '.phpversion().' | cURL: '.curl_version()['version'].')'; 291 | } elseif ($http_status == 500) { 292 | $curl_error->error = 'Ocorreu um erro ao processar a sua requisição. A nossa equipe já foi notificada, em caso de dúvidas entre em contato com o suporte da WebmaniaBR®. (cURL: '.$curl_strerror.' | HTTP Code: '.$http_status.' | IP: '.$ip.')'; 293 | } elseif (!in_array($http_status, array(401, 403))) { 294 | $curl_error->error = 'Não foi possível se conectar na API da WebmaniaBR®. Em caso de dúvidas entre em contato com o suporte da WebmaniaBR®. (cURL: '.$curl_strerror.' | HTTP Code: '.$http_status.' | IP: '.$ip.')'; 295 | } 296 | } 297 | 298 | // Return 299 | if ( isset($curl_error->error) ) { 300 | return $curl_error; 301 | } else { 302 | return json_decode($response); 303 | } 304 | 305 | } 306 | 307 | } 308 | 309 | ?> 310 | -------------------------------------------------------------------------------- /exemplos/emissaoNotaFiscal.php: -------------------------------------------------------------------------------- 1 | 1137, // Número do pedido (opcional) 11 | 'operacao' => 1, // Tipo de Operação da Nota Fiscal 12 | 'natureza_operacao' => 'Venda de produção do estabelecimento', // Natureza da Operação 13 | 'modelo' => 1, // Modelo da Nota Fiscal 14 | 'finalidade' => 1, // Finalidade de emissão da Nota Fiscal 15 | 'ambiente' => 2, // Identificação do Ambiente do Sefaz 16 | 'url_notificacao' => 'http://meudominio.com/retorno.php' // URL de retorno 17 | ); 18 | 19 | /** 20 | * Informações do Cliente 21 | * As informações do cliente são montados dentro da array cliente conforme 22 | * mostrado na tabela Informações da Nota Fiscal. Para notas fiscais de importação 23 | * e exportação é necessário informar o cliente estrangeiro, mais informações. 24 | */ 25 | $data['cliente'] = array( 26 | 'cpf' => '000.000.000-00', // (pessoa fisica) Número do CPF 27 | 'nome_completo' => 'Nome do Cliente', // (pessoa fisica) Nome completo 28 | 'endereco' => 'Av. Brg. Faria Lima', // Endereço de entrega dos produtos 29 | 'complemento' => 'Escritório', // Complemento do endereço de entrega 30 | 'numero' => 1000, // Número do endereço de entrega 31 | 'bairro' => 'Itaim Bibi', // Bairro do endereço de entrega 32 | 'cidade' => 'São Paulo', // Cidade do endereço de entrega 33 | 'uf' => 'SP', // Estado do endereço de entrega 34 | 'cep' => '00000-000', // CEP do endereço de entrega 35 | 'telefone' => '(00) 0000-0000', // Telefone do cliente 36 | 'email' => 'nome@email.com' // E-mail do cliente para envio da NF-e 37 | ); 38 | 39 | /** 40 | * Produtos 41 | * A array dos produtos devem ser montadas de acordo com as informações 42 | * do produto no Banco de Dados da sua plataforma, abaixo encontra-se 43 | * um exemplo de dois produtos com Classe de Imposto e Imposto Manual 44 | */ 45 | $data['produtos'] = array( 46 | array( 47 | 'nome' => 'Nome do produto', // Nome do produto 48 | 'codigo' => 'nome-do-produto', // Código do produto (opcional) 49 | 'ncm' => '6109.10.00', // Código NCM 50 | 'cest' => '28.038.00', // Código CEST (opcional) 51 | 'quantidade' => 3, // Quantidade de itens 52 | 'unidade' => 'UN', // Unidade de medida da quantidade de itens 53 | 'peso' => '0.500', // Peso em KG. Ex: 800 gramas = 0.800 KG (opcional) 54 | 'origem' => 0, // Origem do produto 55 | 'subtotal' => '44.90', // Preço unitário do produto - sem descontos 56 | 'total' => '134.70', // Preço total (quantidade x preço unitário) - sem descontos 57 | 'classe_imposto' => 'REF1000' // Classe de Imposto cadastrado no painel WebmaniaBR ou via API no endpoint /1/nfe/classe-imposto/ 58 | //'informacoes_adicionais' => '' // Características do produto (Cor, tamanho, etc) 59 | ), 60 | array( 61 | 'nome' => 'Nome do produto', // Nome do produto 62 | 'codigo' => 'nome-do-produto', // Código do produto (opcional) 63 | 'ncm' => '6109.10.00', // Código NCM 64 | 'cest' => '28.038.00', // Código CEST (opcional) 65 | 'quantidade' => 1, // Quantidade de itens 66 | 'unidade' => 'UN', // Unidade de medida da quantidade de itens 67 | 'peso' => '0.500', // Peso em KG. Ex: 800 gramas = 0.800 KG (opcional) 68 | 'origem' => 0, // Origem do produto 69 | 'subtotal' => '29.90', // Preço unitário do produto - sem descontos 70 | 'total' => '29.90', // Preço total (quantidade x preço unitário) - sem descontos 71 | 'tributos_federais' => '10.00', // Alíquota aproximada dos tributos federais 72 | 'tributos_estaduais' => '10.00', // Alíquota aproximada dos tributos estaduais 73 | 'impostos' => array( // Impostos na API 74 | 'icms' => array( 75 | 'codigo_cfop' => '6.102', // Código Fiscal de Operações e Prestações (CFOP) 76 | 'situacao_tributaria' => '102', // Código da situação tributária 77 | ), 78 | 'ipi' => array( 79 | 'situacao_tributaria' => '99', // Código da situação tributária 80 | 'codigo_enquadramento' => '999', // Código de enquadramento 81 | 'aliquota' => '0.00', // Alíquota IPI 82 | ), 83 | 'pis' => array( 84 | 'situacao_tributaria' => '99', // Código da situação tributária 85 | 'aliquota' => '0.00', // Alíquota PIS 86 | ), 87 | 'cofins' => array( 88 | 'situacao_tributaria' => '99', // Código da situação tributária 89 | 'aliquota' => '0.00', // Alíquota COFINS 90 | ), 91 | /*'issqn' => array( 92 | 'codigo_cfop' => '5.933', // Código Fiscal de Operações e Prestações (CFOP) 93 | 'exigibilidade' => '1', // Indicador da exigibilidade do ISS 94 | 'item_servico' => '00.00', // Item da lista de serviços em que se classifica o serviço no padrão ABRASF, 95 | 'incentivo_fiscal' => '2', // Indicador de incentivo Fiscal 96 | 'aliquota' => '5.00' // Alíquota do ISSQN 97 | )*/ 98 | ), 99 | /*// Rastreabilidade de produto (opcional) 100 | 'rastro' => array( 101 | 'lote' => "000001", // Número do Lote do produto 102 | 'quantidade' => "100", // Quantidade de produto no Lote 103 | 'data_fabricacao' => "2018-01-01", // Data de fabricação/produção 104 | 'data_validade' => "2018-01-01" // Data de validade 105 | )*/ 106 | ) 107 | ); 108 | 109 | /** 110 | * Informações do Pedido 111 | */ 112 | $data['pedido'] = array( 113 | 'presenca' => 2, // Indicador de presença do comprador no estabelecimento comercial no momento da operação 114 | 'intermediador' => 0, // Indicador de intermediador/marketplace 115 | /*'cnpj_intermediador' => '03.499.243/0001-04', // CNPJ do Intermediador da Transação (opcional) 116 | 'id_intermediador' => 'Mercado Livre', // Identificador cadastrado no intermediador (opcional) */ 117 | 'modalidade_frete' => 0, // Modalidade do frete 118 | 'frete' => '12.56', // Total do frete 119 | 'desconto' => '10.00', // Total do desconto 120 | 'total' => '174.60', // Valor total do pedido pago pelo cliente 121 | 'pagamento' => 0, // Indicador da forma de pagamento: 0 - Pagamento à vista ou 1 - Pagamento a prazo 122 | 'forma_pagamento' => [ 15 ], // Meio de pagamento 123 | 'pagamento' => 0, // Indicador da forma de pagamento 124 | 'forma_pagamento' => '15', // Meio de pagamento (15 - Boleto Bancário), 125 | //'desc_pagamento' => '', // Descrição do Meio de pagamento (Obrigatório para 99 - Outros) 126 | /*// Informações do pagamento (opcional) 127 | 'valor_pagamento' => '', // Valor do pagamento 128 | 'cnpj_credenciadora' => '', // // CNPJ da Credenciadora de cartão de crédito/débito 129 | 'bandeira' => "", // Bandeira da operadora do cartão de crédito/débito 130 | 'autorizacao' => "", // Número da autorização da operadora de cartão de crédito/débito (NSU) 131 | 'tipo_integracao' => 2 // Tipo de integração para pagamento*/ 132 | //'informacoes_fisco' => '', // Informações ao Fisco 133 | //'informacoes_complementares' => ''/ // Informações Complementares ao Consumidor 134 | ); 135 | 136 | /** 137 | * Informações do Transporte (opcional) 138 | * Volumes e pesos a serem transportados 139 | */ 140 | /*$data['transporte'] = array( 141 | 'volume' => 2, // Quantidade de volumes transportados 142 | 'especie' => "CAIXA", // Espécie dos volumes transportados 143 | 'peso_bruto' => "2.500", // Peso bruto dos volumes transportados 144 | 'peso_liquido' => "2.500" // Peso líquido dos volumes transportados 145 | );*/ 146 | 147 | /** 148 | * Informações do Transportadora (opcional) 149 | * Importante: não é necessário informar a transportadora para envio realizado pelos Correios. 150 | */ 151 | /*$data['transporte'] = array( 152 | 'volume' => 2, // Quantidade de volumes transportados 153 | 'especie' => "CAIXA", // Espécie dos volumes transportados 154 | 'peso_bruto' => "2.500", // Peso bruto dos volumes transportados 155 | 'peso_liquido' => "2.500", // Peso líquido dos volumes transportados 156 | 'cnpj' => "00.000.000/0000-00", // CNPJ da transportadora 157 | 'razao_social' => "Nome da empresa LTDA", // Razão social da tranportadora 158 | 'ie' => "00000000", // Inscrição Estadual da transportadora 159 | 'endereco' => "Av. Brg. Faria Lima", // Endereço da transportadora 160 | 'uf' => "SP", // Estado da transportadora 161 | 'cidade' => "São Paulo", // Cidade da transportadora 162 | 'cep' => "00000-000" // CEP da transportadora 163 | );*/ 164 | 165 | /** 166 | * Informações da Fatura (opcional) 167 | */ 168 | /*$data['fatura'] = array( 169 | 'numero' => 2, // Número da Fatura 170 | 'valor' => "CAIXA", // Valor Original da Fatura 171 | 'desconto' => "2.500", // Valor do desconto 172 | 'valor_liquido' => "2.500" // Valor Líquido da Fatura 173 | );*/ 174 | 175 | /** 176 | * Informações das Parcelas (opcional) 177 | */ 178 | /*$data['parcelas'] = array( 179 | array( 180 | 'vencimento' => '2019-08-01', // Data de vencimento 181 | 'valor' => '87.30' // Valor da parcela 182 | ), 183 | array( 184 | 'vencimento' => '2019-08-01', // Data de vencimento 185 | 'valor' => '87.30' // Valor da parcela 186 | ) 187 | );*/ 188 | 189 | /** 190 | * Informação do Local de Entrega (opcional) 191 | * Somente informar quando o local de entrega 192 | * é diferente do endereço do cliente 193 | */ 194 | /*$data['transporte']['entrega'] = array( 195 | 'cnpj' => "00.000.000/0000-00", // Número do CNPJ 196 | 'razao_social' => "", // Razão Social 197 | 'ie' => "", // Número da Inscrição Estadual 198 | 'uf' => "", // Estado do endereço de entrega 199 | 'cep' => "00000-000", // CEP do endereço de entrega 200 | 'endereco' => "", // Endereço de entrega dos produtos 201 | 'numero' => "", // Número de entrega dos produtos 202 | 'complemento' => "", // Complemento do endereço de entrega 203 | 'bairro' => "", // Bairro do endereço de entrega 204 | 'cidade' => "" // Cidade do endereço de entrega 205 | );*/ 206 | 207 | /** 208 | * Informação do Local de Retirada (opcional) 209 | * Somente informar quando o local de retirada 210 | * é diferente do endereço do cliente 211 | */ 212 | /*$data['transporte']['retirada'] = array( 213 | 'cnpj' => "00.000.000/0000-00", // Número do CNPJ 214 | 'razao_social' => "", // Razão Social 215 | 'ie' => "", // Número da Inscrição Estadual 216 | 'uf' => "", // Estado do endereço de entrega 217 | 'cep' => "00000-000", // CEP do endereço de entrega 218 | 'endereco' => "", // Endereço de entrega dos produtos 219 | 'numero' => "", // Número de entrega dos produtos 220 | 'complemento' => "", // Complemento do endereço de entrega 221 | 'bairro' => "", // Bairro do endereço de entrega 222 | 'cidade' => "" // Cidade do endereço de entrega 223 | );*/ 224 | 225 | // Emissão 226 | $webmaniabr = new NFe('SEU_CONSUMER_KEY', 'SEU_CONSUMER_SECRET', 'SEU_ACCESS_TOKEN', 'SEU_ACCESS_TOKEN_SECRET'); 227 | $response = $webmaniabr->emissaoNotaFiscal( $data ); 228 | 229 | // Retorno 230 | if (!isset($response->error)){ 231 | 232 | echo '

NF-e enviada com sucesso.

'; 233 | 234 | $uuid = (string) $response->uuid; // Número único de identificação da Nota Fiscal 235 | $status = (string) $response->status; // aprovado, reprovado, cancelado, processamento ou contingencia 236 | $motivo = (string) $response->motivo; // Motivo do status 237 | $nfe = (int) $response->nfe; // Número da NF-e 238 | $serie = (int) $response->serie; // Número de série 239 | $modelo = (string) $response->modelo; // Modelo da Nota Fiscal (nfe, nfce, cce) 240 | $recibo = (int) $response->recibo; // Número do recibo 241 | $chave = (string)$response->chave; // Número da chave de acesso 242 | $xml = (string) $response->xml; // URL do XML 243 | $danfe = (string) $response->danfe; // URL do Danfe (PDF) 244 | $danfe_simples = (string) $response->danfe_simples; // URL do Danfe Simples (PDF) 245 | $danfe_etiqueta = (string) $response->danfe_etiqueta; // URL do Danfe Simplificada - Etiqueta (PDF) 246 | $log = $response->log; // Log do Sefaz 247 | 248 | print_r($response); 249 | 250 | exit(); 251 | 252 | } else { 253 | 254 | echo '

Erro: '.$response->error.'

'; 255 | 256 | if (isset($response->log)){ 257 | 258 | echo '

Log:

'; 259 | echo ''; 268 | 269 | } 270 | 271 | exit(); 272 | 273 | } --------------------------------------------------------------------------------