Existe uma forma simples de automatizar a emissão de NFC-e em seu software desenvolvido em PHP, contanto que ele esteja instalado no windows. Quero te apresentar a integração com o Componente NFCe da TecnoSpeed.
Para demonstrar como usar o Componente NFCe, foi utilizado o XAMPP. Neste caso, para liberar o uso da classe COM, é necessário ter no arquivo de configuração, a seguinte extension:
[PHP_COM_DOTNET]
extension=php_com_dotnet.dll
O exemplo de uso, foi feito uma página simples com HTML e PHP. Para comunicar entre os fontes PHP, foi utilizado requisições com Ajax de uma maneira bem simples.
<?php
$spdNFCe = new COM("NFCeX.spdNFCeX"); //instanciando a NFCeX.dll
$spdNFCeDataSets = new COM("NFCeDataSetX.spdNFCeDataSetX");//instanciando a NfCeDataSetX.dll
?>
Para fazer as configurações, pode-se utilizar o arquivo ini e também pode-se configurar por fonte.
Via arquivo ini basta utilizar o seguinte método:
$spdNFCe->LoadConfig("C:/xampp/htdocs/my portable files/nfceconfig.ini");
As configurações via fonte devem ser feitas da seguinte maneira:
// $spdNFCe->NomeCertificado = "";
// Para a arquitetura de uma aplicação Web, é recomendado usar o caminho e
senha do certificado, pois assim basta que passe o arquivo .pfx e a senha.
$spdNFCe->CaminhoCertificado = "C:/xampp/htdocs/my portable files/certificado.pfx";
$spdNFCe->SenhaCertificado = "senha123"
$spdNFCe->UF = "PR";
$spdNFCe->CNPJ = "29062609000177";
$spdNFCe->ArquivoServidoresHom = $DirArq."/nfceServidoresHom.ini";
$spdNFCe->ArquivoServidoresProd = $DirArq."/nfceServidoresProd.ini";
$spdNFCe->DiretorioEsquemas = $DirArq."/Esquemas";
$spdNFCe->DiretorioTemplates = $DirArq."/Templates";
$spdNFCe->DiretorioLog = $DirArq."/Log";
$spdNFCe->VersaoManual = "6.0";
$spdNFCe->ConexaoSegura = 1;
$spdNFCe->TimeOut = 60000;
$spdNFCe->Ambiente = 2;
$spdNFCe->MaxSizeLoteEnvio = 500;
$spdNFCe->DiretorioXmlDestinatario = $DirArq."\\XMLDestinatario";
$spdNFCe->DiretorioLogErro = $DirArq."\\LogErro";
$spdNFCe->DiretorioTemporario = "C:\\Windows\\Temp";
$spdNFCe->CaracteresRemoverAcentos="áéíóúàèìòùâêîôûäëïöüãõñçÁÉÍÓÚÀÈÌÒÙÂÊÎÔÛÄËÏÖÜÃÕÑǺª&@";
Métodos do Componente NFC-e
Consulta de Status: Método utilizado para realizar a consulta de Status da UF configurada na propriedade $spdNCFe->UF. Tem como retorno um XML com a resposta do Web Service da UF.
<?phpinclude("instanciaComponente.php");// Arquivo PHP que instancia o componente e passa as configurações
try{
echo$spdNFCe->StatusDoServico();//Consulta o Status do serviço
}
catch(Exception$e)
{
echo$e;
}
unset($spdNFCe);//Destroi a instancia da dll NFCeX.dll
unset($spdNFCeDataSets);//Destroi a instancia da dll NFCeDataSetX.dll
?>
Gerar XML por Data Set: Método do componente NFC-e para gerar o XML através da implementação do DataSet.
"Mas ainda não sei como funciona a NF-e, como vou entender o Data Set do componente ?"
<?phpinclude("instanciaComponente.php");// Arquivo PHP que instancia o componente e passa as configurações
try{
$XML = "";
$spdNFCeDataSets->VersaoEsquema = "pl_009";
$spdNFCeDataSets->DicionarioXML = "C:\\Program Files\\EasyPHP-DevServer-14.1VC9\\data\\localweb\\my portable files\\templates\\vm60\\Conversor\\NFCeDataSets.xml";
$spdNFCeDataSets->Incluir(); //Dados da NF-e
$spdNFCeDataSets->SetCampo("versao_A02=3.10");
$spdNFCeDataSets->SetCampo("Id_A03=");
$spdNFCeDataSets->SetCampo("cUf_B02=41");
$spdNFCeDataSets->SetCampo("cNF_B03=004640327");
$spdNFCeDataSets->SetCampo("natOp_B04=VENDA MERC.ADQ.REC.TERC");
$spdNFCeDataSets->SetCampo("mod_B06=65");
$spdNFCeDataSets->SetCampo("serie_B07=".rand(20000,90000));
$spdNFCeDataSets->SetCampo("nNF_B08=312342");
$spdNFCeDataSets->SetCampo("dhEmi_B09=".$datahora);
$spdNFCeDataSets->SetCampo("tpNF_B11=1");
$spdNFCeDataSets->SetCampo("idDest_B11a=1");
$spdNFCeDataSets->SetCampo("cMunFG_B12=4115200");
$spdNFCeDataSets->SetCampo("tpImp_B21=1");
$spdNFCeDataSets->SetCampo("tpEmis_B22=1");
$spdNFCeDataSets->SetCampo("cDV_B23=");
$spdNFCeDataSets->SetCampo("tpAmb_B24=2");
$spdNFCeDataSets->SetCampo("finNFe_B25=1");
$spdNFCeDataSets->SetCampo("indFinal_B25a=0");
$spdNFCeDataSets->SetCampo("indPres_B25b=0");
$spdNFCeDataSets->SetCampo("procEmi_B26=0");
$spdNFCeDataSets->SetCampo("verProc_B27=TecnoPHP BHETA");
//Dados do Emitente
$spdNFCeDataSets->SetCampo("CNPJ_C02=00000000000000");
$spdNFCeDataSets->SetCampo("xNome_C03=Exemplo de Razão Social");
$spdNFCeDataSets->SetCampo("xFant_C04=Exemplo de nome fantasia");
$spdNFCeDataSets->SetCampo("xLgr_C06=Exemplo");
$spdNFCeDataSets->SetCampo("nro_C07=123");
$spdNFCeDataSets->SetCampo("xBairro_C09=Bairro de Exemplo");
$spdNFCeDataSets->SetCampo("cMun_C10=4115200");
$spdNFCeDataSets->SetCampo("xMun_C11=Maringa");
$spdNFCeDataSets->SetCampo("UF_C12=PR");
$spdNFCeDataSets->SetCampo("CEP_C13=87500000");
$spdNFCeDataSets->SetCampo("cPais_C14=1058");
$spdNFCeDataSets->SetCampo("xPais_C15=Brasil");
$spdNFCeDataSets->SetCampo("fone_C16=4432222222");
$spdNFCeDataSets->SetCampo("IE_C17=9044016688");
$spdNFCeDataSets->SetCampo("CRT_C21=3");
//Dados do Destinatário
$spdNFCeDataSets->SetCampo("CNPJ_E02=00000000000000");
$spdNFCeDataSets->SetCampo("xNome_E04=NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL");
$spdNFCeDataSets->SetCampo("xLgr_E06=RUA DO CENTRO");
$spdNFCeDataSets->SetCampo("nro_E07=123");
$spdNFCeDataSets->SetCampo("xCpl_E08=TESTE");
$spdNFCeDataSets->SetCampo("xBairro_E09=Centro");
$spdNFCeDataSets->SetCampo("cMun_E10=4115200");
$spdNFCeDataSets->SetCampo("xMun_E11=Teste");
$spdNFCeDataSets->SetCampo("UF_E12=PR");
$spdNFCeDataSets->SetCampo("CEP_E13=87500000");
$spdNFCeDataSets->SetCampo("cPais_E14=1058");
$spdNFCeDataSets->SetCampo("xPais_E15=BRASIL");
$spdNFCeDataSets->SetCampo("fone_E16=445555555");
$spdNFCeDataSets->SetCampo("IndIEDest_E16a=1");
$spdNFCeDataSets->SetCampo("IE_E17=1111111111");
$spdNFCeDataSets->SetCampo("email_E19=teste@hotmail.com");
//Dados do Itens
$spdNFCeDataSets->IncluirItem();
$spdNFCeDataSets->SetCampo("nItem_H02=1");
$spdNFCeDataSets->SetCampo("xProd_I04=MELAO Saborozinho");
$spdNFCeDataSets->SetCampo("cProd_I02=0999");
$spdNFCeDataSets->SetCampo("cEAN_I03=");
$spdNFCeDataSets->SetCampo("NCM_I05=11081200");
$spdNFCeDataSets->SetCampo("CFOP_I08=51020");
$spdNFCeDataSets->SetCampo("CEST_I05c=");
$spdNFCeDataSets->SetCampo("uCom_I09=AABCC");
$spdNFCeDataSets->SetCampo("qCom_I10=1.00");
$spdNFCeDataSets->SetCampo("vUnCom_I10a=10.0000");
$spdNFCeDataSets->SetCampo("vProd_I11=10.00");
$spdNFCeDataSets->SetCampo("cEANTrib_I12=");
$spdNFCeDataSets->SetCampo("uTrib_I13=AABCC");
$spdNFCeDataSets->SetCampo("qTrib_I14=1");
$spdNFCeDataSets->SetCampo("vUnTrib_I14a=10.00");
$spdNFCeDataSets->SetCampo("indTot_I17b=1");
$spdNFCeDataSets->SetCampo("infAdProd_V01=Observações do produto infAdProd");
//Dados dos impostos
$spdNFCeDataSets->SetCampo("orig_N11=0");
$spdNFCeDataSets->SetCampo("CST_N12=00");
$spdNFCeDataSets->SetCampo("modBC_N13=0");
$spdNFCeDataSets->SetCampo("vBC_N15=0.01");
$spdNFCeDataSets->SetCampo("pICMS_N16=7.60");
$spdNFCeDataSets->SetCampo("vICMS_N17=0.01");
$spdNFCeDataSets->SetCampo("CST_Q06=01");
$spdNFCeDataSets->SetCampo("vBC_Q07=0.01");
$spdNFCeDataSets->SetCampo("pPIS_Q08=1.65");
$spdNFCeDataSets->SetCampo("vPIS_Q09=0.00");
$spdNFCeDataSets->SetCampo("CST_S06=01");
$spdNFCeDataSets->SetCampo("vBC_S07=0.01");
$spdNFCeDataSets->SetCampo("pCOFINS_S08=7.60");
$spdNFCeDataSets->SetCampo("vCOFINS_S11=0.01");
$spdNFCeDataSets->SalvarItem();
$spdNFCeDataSets->SetCampo("vBC_W03=0.01");
$spdNFCeDataSets->SetCampo("vICMS_W04=0.01");
$spdNFCeDataSets->SetCampo("vICMSDeson_W04a=0.00");
$spdNFCeDataSets->SetCampo("vBCST_W05=0.00");
$spdNFCeDataSets->SetCampo("vST_W06=0.00");
$spdNFCeDataSets->SetCampo("vProd_W07=10.00");
$spdNFCeDataSets->SetCampo("vFrete_W08=0.00");
$spdNFCeDataSets->SetCampo("vSeg_W09=0.00");
$spdNFCeDataSets->SetCampo("vDesc_W10=0.00");
$spdNFCeDataSets->SetCampo("vII_W11=0.00");
$spdNFCeDataSets->SetCampo("vIPI_W12=0.00");
$spdNFCeDataSets->SetCampo("vPIS_W13=0.00");
$spdNFCeDataSets->SetCampo("vCOFINS_W14=0.01");
$spdNFCeDataSets->SetCampo("vOutro_W15=0.00");
$spdNFCeDataSets->SetCampo("vNF_W16=10.00");
$spdNFCeDataSets->SetCampo("modFrete_X02=9");
$spdNFCeDataSets->Salvar();
$XML = $spdNFCeDataSets->LoteNFCe;
$chave = str_replace("NFCe", "", $spdNFCeDataSets->GetCampo("id_A03"));
$retornos = array('xml' => $XML, "chaveNFCe" => $chave);
echo json_encode($retornos);
}
catch(Exception$e)
{
echo$e;
}
unset($spdNFCe); //Destroi a instancia da NFCeX.dll
unset($spdNFCeDataSets); //Destroi a instancia daNfCeDataSetX.dll
?>
Assinar Nota : Método do componente NFC-e que tem como parâmetro o XML gerado pelo Data Set e retorna o XML assinado da NFC-e para ser enviado.
Obs.: Após o uso deste método, nada mais pode ser alterado no XML.
?php include("instanciaComponente.php");// Arquivo PHP que instancia o componente e passa as configurações
try
{
$xml = $_POST["xml"];
$xml = $spdNFCe->AssinarNota($xml);
echo$xml;
}
catch(Exception$e)
{
echo$e;
}
unset($spdNFCe); //Destroi a instancia da NFCeX.dll
unset($spdNFCeDataSets); //Destroi a instancia daNfCeDataSetX.dll
?>
Enviar Nota(Assíncrono): Método do componente que tem como parâmetro o num. Lote, o XML Assinado e se o lote é compactado ou não. Tem como retorno o status do processamento do Lote e o número do Recibo.
<?phpinclude("instanciaComponente.php");// Arquivo PHP que instancia o componente e passa as configurações
try
{
$xml = $_POST["xmlRet"];
$xml = $spdNFCe->EnviarNF("0001", $xml, false);
$nroRecibo = simplexml_load_string($xml);
$nroRec = $nroRecibo->infRec;
$retornosEnvio = array('xml' => $xml, "nroRec" => $nroRec);
echo json_encode($retornosEnvio);
}
catch(Exception$e)
{
echo$e;
}
unset($spdNFCe); //Destroi a instancia da NFCeX.dll
unset($spdNFCeDataSets); //Destroi a instancia daNfCeDataSetX.dll
?>
Enviar Nota(Síncrono): Método do componente que faz o envio e já retorna o resultado da autorização da nota.(Alguns Web Services não apresentam estabilidade quanto ao uso deste método, o mais aconselhado é usar o envio Assíncrono).
<?phpinclude("instanciaComponente.php");// Arquivo PHP que instancia o componente e passa as configurações
try
{
$xml = $_POST["xmlRet"];
$xml = $spdNFCe->EnviarNFSincrono("0001", $xml, false);
$nroRecibo = simplexml_load_string($xml);
$nroRec = $nroRecibo->infRec;
$retornosEnvio = array('xml' => $xml, "nroRec" => $nroRec);
echo json_encode($retornosEnvio);
}
catch(Exception$e)
{
echo$e;
}
unset($spdNFCe); //Destroi a instancia da NFCeX.dll
unset($spdNFCeDataSets); //Destroi a instancia daNfceDataSetX.dll
?>
Consultar Recibo: Método do componente que tem como parâmetro o número do Recibo, que vem no retorno do envio Assíncrono. Retorna o resultado do processamento da NFC-e.
<?phpinclude("instanciaComponente.php");// Arquivo PHP que instancia o componente e passa as configurações
try
{
$nroRecibo = $_POST["reciboNota"];
$xml = $spdNFCe->ConsultarRecibo($nroRecibo);
echo$xml;
}
catch(Exception$e)
{
echo$e;
}
unset($spdNFCe); //Destroi a instancia da NFCeX.dll
unset($spdNFCeDataSets); //Destroi a instancia daNfceDataSetX.dll
?>
Consultar NF-e: Método do componente que tem como parâmetro a chave da Nota. Retorna o status do processamento da NFC-e.
<?phpinclude("instanciaComponente.php");// Arquivo PHP que instancia o componente e passa as configurações
try
{
$chaveNota = $_POST["chaveNota"];
$chaveNota = $spdNFCe->ConsultarNF($chaveNota);
echo$chaveNota;
}
catch(Exception$e)
{
echo$e;
}
unset($spdNFCe); //Destroi a instancia da NFCeX.dll
unset($spdNFCeDataSets); //Destroi a instancia daNfCeDataSetX.dll
?>
Gerar PDF: Método do componente NFC-e que gera o PDF da NFC-e a partir do XML Autorizado da nota. Tem como parâmetro o número do Lote, o XML da nota Autorizado, o modelo RTM do componente NFC-e, o formato de saída e o diretório para gravação do arquivo.
<?phpinclude("instanciaComponente.php");// Arquivo PHP que instancia o componente e passa as configurações
try
{
$chaveNFCe = $_POST["chaveNota"];
$XML = file_get_contents("C:\\xampp\\xamppfiles\\htdocs\\my portable files\\XmlDestinatario\\".$chaveNFCe."-nfce.xml") ;
$spdNFCe->ExportarDanfce("00001", $XML, $spdNFCe->ModeloRetrato, 1, "C:\\xampp\\xamppfiles\\htdocs\\my portable files\\PDF\\".$chaveNFCe.".PDF");
}
catch(Exception$e)
{
echo$e;
}
unset($spdNFCe); //Destroi a instancia da NFCeX.dll
unset($spdNFCeDataSets); //Destroi a instancia daNfceDataSetX.dll
?>
Comentários
0 comentário
Por favor, entre para comentar.