Existe uma forma simples de automatizar a emissão de NF-e em seu software desenvolvido em PHP, contanto que ele esteja instalado no windows. Quero te apresentar a integração com o Componente NFe da TecnoSpeed.

Antes de iniciar o tutorial, é necessário fazer o download da versão gratuita de testes do Componente. Para isso, no botão abaixo:

 

Para demonstrar como usar o Componente NFe, 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.

Clique para Baixar

Como usar o componente ?

Após ter instalado o componente na máquina, basta fazer a instancia da classe do componente no PHP, conforme exemplo:

 
  

<?php
$spdNFe = new COM("NFeX.spdNFeX"); //instanciando a NFeX.dll
$spdNFeDataSets = new COM("NFeDataSetX.spdNFeDataSetX");//instanciando a NfeDataSetX.dll   

Logo após criar o objeto do componente, é necessário configurar a Software House emissora, inserindo o CNPJ de contrato com a TecnoSpeed (Segundo parametro pode ir em branco, será implementado futuramente):

 
  

$spdNFe->ConfigurarSoftwareHouse('11111111111111', "");
   

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:

 
  

$spdNFe->LoadConfig("C:/xampp/htdocs/my portable files/nfeconfig.ini");   

As configurações via fonte devem ser feitas da seguinte maneira:

 
  

 // $spdNFe->NomeCertificado = "CN=TECNOSPEED TECNOLOGIA DE INFORMACAO LTDA:08187168000160, OU=AR CERTIFICADOS PONTO COM, O=ICP-Brasil, C=BR, S=PR, L=MARINGA, E=";
 // 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. 
$spdNFe->CaminhoCertificado = "C:/xampp/htdocs/my portable files/certificado.pfx";	
$spdNFe->SenhaCertificado = "senha123"	
$spdNFe->UF = "PR";	
$spdNFe->CNPJ = "08187168000160";	
$spdNFe->ArquivoServidoresHom = $DirArq."/nfeServidoresHom.ini";	
$spdNFe->ArquivoServidoresProd = $DirArq."/nfeServidoresProd.ini";	
$spdNFe->DiretorioEsquemas = $DirArq."/Esquemas";	
$spdNFe->DiretorioTemplates = $DirArq."/Templates";	
$spdNFe->DiretorioLog = $DirArq."/Log";	
$spdNFe->VersaoManual = "5.0a";	
$spdNFe->ConexaoSegura = 1;	
$spdNFe->TimeOut = 60000;	
$spdNFe->Ambiente = 2;	
$spdNFe->MaxSizeLoteEnvio = 500;	
$spdNFe->DiretorioXmlDestinatario = $DirArq."\\XMLDestinatario";	
$spdNFe->DiretorioLogErro = $DirArq."\\LogErro";	
$spdNFe->DiretorioTemporario = "C:\\Windows\\Temp";	
$spdNFe->ModoOperacao = "NORMAL";	
$spdNFe->CaracteresRemoverAcentos="áéíóúàèìòùâêîôûäëïöüãõñçÁÉÍÓÚÀÈÌÒÙÂÊÎÔÛÄËÏÖÜÃÕÑǺª&@";   

Métodos do Componente NF-e

Consulta de Status: Método utilizado para realizar a consulta de Status da UF configurada na propriedade $spdNFe->UF. Tem como retorno um XML com a resposta do Web Service da UF.

 
  
<?php include("instanciaComponente.php");// Arquivo PHP que instancia o componente e passa as configurações
try{
	echo $spdNFe->StatusDoServico();//Consulta o Status do serviçõ
}
catch(Exception $e){
	echo $e;
}
unset($spdNFe);//Destroi a instancia da dll NFeX.dll
unset($spdNFeDataSets);//Destroi a instancia da dll NFeDataSetX.dll
?>   

Gerar XML por Data Set: Método do componente NF-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 ?"  

Vídeo explicativo sobre a NF-e e o DataSet do componente.

 
  
<?php include("instanciaComponente.php");// Arquivo PHP que instancia o componente e passa as configurações
try{
	$XML = "";
	$spdNFeDataSets->VersaoEsquema = "pl_008i1";	
	$spdNFeDataSets->DicionarioXML = "C:\\Program Files\\EasyPHP-DevServer-14.1VC9\\data\\localweb\\my portable files\\templates\\vm50a\\Conversor\\NFeDataSets.xml";
	
	$spdNFeDataSets->Incluir();
		//Dados da NF-e
		$spdNFeDataSets->SetCampo("versao_A02=3.10");
		$spdNFeDataSets->SetCampo("Id_A03=");
		$spdNFeDataSets->SetCampo("cUf_B02=41");
		$spdNFeDataSets->SetCampo("cNF_B03=004640327");
		$spdNFeDataSets->SetCampo("natOp_B04=VENDA MERC.ADQ.REC.TERC");
		$spdNFeDataSets->SetCampo("indPag_B05=1");
		$spdNFeDataSets->SetCampo("mod_B06=55");
		$spdNFeDataSets->SetCampo("serie_B07=".rand(20000,90000));
		$spdNFeDataSets->SetCampo("nNF_B08=312342");
		$spdNFeDataSets->SetCampo("dhEmi_B09=".$datahora);
		$spdNFeDataSets->SetCampo("dhSaiEnt_B10=".$datahora);
		$spdNFeDataSets->SetCampo("tpNF_B11=1");
		$spdNFeDataSets->SetCampo("idDest_B11a=1");
		$spdNFeDataSets->SetCampo("cMunFG_B12=4115200");
		$spdNFeDataSets->SetCampo("tpImp_B21=1");
		$spdNFeDataSets->SetCampo("tpEmis_B22=1");
		$spdNFeDataSets->SetCampo("cDV_B23=");
		$spdNFeDataSets->SetCampo("tpAmb_B24=2");
		$spdNFeDataSets->SetCampo("finNFe_B25=1");
		$spdNFeDataSets->SetCampo("indFinal_B25a=0");
		$spdNFeDataSets->SetCampo("indPres_B25b=0");
		$spdNFeDataSets->SetCampo("procEmi_B26=0");
		$spdNFeDataSets->SetCampo("verProc_B27=TecnoPHP BHETA");
		
		//Dados do Emitente
		$spdNFeDataSets->SetCampo("CNPJ_C02=08187168000160");
		$spdNFeDataSets->SetCampo("xNome_C03=Exemplo de Razão Social");
		$spdNFeDataSets->SetCampo("xFant_C04=Exemplo de nome fantasia");
		$spdNFeDataSets->SetCampo("xLgr_C06=Exemplo");
		$spdNFeDataSets->SetCampo("nro_C07=123");
		$spdNFeDataSets->SetCampo("xBairro_C09=Bairro de Exemplo");
		$spdNFeDataSets->SetCampo("cMun_C10=4115200");
		$spdNFeDataSets->SetCampo("xMun_C11=Maringa");
		$spdNFeDataSets->SetCampo("UF_C12=PR");
		$spdNFeDataSets->SetCampo("CEP_C13=87500000");
		$spdNFeDataSets->SetCampo("cPais_C14=1058");
		$spdNFeDataSets->SetCampo("xPais_C15=Brasil");
		$spdNFeDataSets->SetCampo("fone_C16=4432222222");
		$spdNFeDataSets->SetCampo("IE_C17=9044016688");
		$spdNFeDataSets->SetCampo("CRT_C21=3");
		
		//Dados do Destinatário
		$spdNFeDataSets->SetCampo("CNPJ_E02=08187168000160");
		$spdNFeDataSets->SetCampo("xNome_E04=NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL");
		$spdNFeDataSets->SetCampo("xLgr_E06=RUA DO CENTRO");
		$spdNFeDataSets->SetCampo("nro_E07=123");
		$spdNFeDataSets->SetCampo("xCpl_E08=TESTE");
		$spdNFeDataSets->SetCampo("xBairro_E09=Centro");
		$spdNFeDataSets->SetCampo("cMun_E10=4115200");
		$spdNFeDataSets->SetCampo("xMun_E11=Teste");
		$spdNFeDataSets->SetCampo("UF_E12=PR");
		$spdNFeDataSets->SetCampo("CEP_E13=87500000");
		$spdNFeDataSets->SetCampo("cPais_E14=1058");
		$spdNFeDataSets->SetCampo("xPais_E15=BRASIL");
		$spdNFeDataSets->SetCampo("fone_E16=445555555");
		$spdNFeDataSets->SetCampo("IndIEDest_E16a=1");
		$spdNFeDataSets->SetCampo("IE_E17=9044016688");
		$spdNFeDataSets->SetCampo("email_E19=alexandre_muzulao@hotmail.com");
		
		//Dados do Itens
		$spdNFeDataSets->IncluirItem();
			$spdNFeDataSets->SetCampo("nItem_H02=1");
			$spdNFeDataSets->SetCampo("xProd_I04=MELAO Saborozinho");
			$spdNFeDataSets->SetCampo("cProd_I02=0999");
			$spdNFeDataSets->SetCampo("cEAN_I03=");
			$spdNFeDataSets->SetCampo("NCM_I05=11081200");
			$spdNFeDataSets->SetCampo("CFOP_I08=51020");
			$spdNFeDataSets->SetCampo("CEST_I05c=");
			$spdNFeDataSets->SetCampo("uCom_I09=AABCC");
			$spdNFeDataSets->SetCampo("qCom_I10=1.00");
			$spdNFeDataSets->SetCampo("vUnCom_I10a=10.0000");
			$spdNFeDataSets->SetCampo("vProd_I11=10.00");
			$spdNFeDataSets->SetCampo("cEANTrib_I12=");
			$spdNFeDataSets->SetCampo("uTrib_I13=AABCC");
			$spdNFeDataSets->SetCampo("qTrib_I14=1");
			$spdNFeDataSets->SetCampo("vUnTrib_I14a=10.00");
			$spdNFeDataSets->SetCampo("indTot_I17b=1");
			$spdNFeDataSets->SetCampo("infAdProd_V01=infAdProd Observações do produto infAdProd");
			
			//Dados dos impostos
			$spdNFeDataSets->SetCampo("orig_N11=0");
			$spdNFeDataSets->SetCampo("CST_N12=00");
			$spdNFeDataSets->SetCampo("modBC_N13=0");
			$spdNFeDataSets->SetCampo("vBC_N15=0.01");
			$spdNFeDataSets->SetCampo("pICMS_N16=7.60");
			$spdNFeDataSets->SetCampo("vICMS_N17=0.01");
			
			$spdNFeDataSets->SetCampo("CST_Q06=01");
			$spdNFeDataSets->SetCampo("vBC_Q07=0.01");
			$spdNFeDataSets->SetCampo("pPIS_Q08=1.65");
			$spdNFeDataSets->SetCampo("vPIS_Q09=0.00");
			
			$spdNFeDataSets->SetCampo("CST_S06=01");
			$spdNFeDataSets->SetCampo("vBC_S07=0.01");
			$spdNFeDataSets->SetCampo("pCOFINS_S08=7.60");
			$spdNFeDataSets->SetCampo("vCOFINS_S11=0.01");
		$spdNFeDataSets->SalvarItem();
		
		$spdNFeDataSets->SetCampo("vBC_W03=0.01");
		$spdNFeDataSets->SetCampo("vICMS_W04=0.01");
		$spdNFeDataSets->SetCampo("vICMSDeson_W04a=0.00");
		$spdNFeDataSets->SetCampo("vBCST_W05=0.00");
		$spdNFeDataSets->SetCampo("vST_W06=0.00");
		$spdNFeDataSets->SetCampo("vProd_W07=10.00");
		$spdNFeDataSets->SetCampo("vFrete_W08=0.00");
		$spdNFeDataSets->SetCampo("vSeg_W09=0.00");
		$spdNFeDataSets->SetCampo("vDesc_W10=0.00");
		$spdNFeDataSets->SetCampo("vII_W11=0.00");
		$spdNFeDataSets->SetCampo("vIPI_W12=0.00");
		$spdNFeDataSets->SetCampo("vPIS_W13=0.00");
		$spdNFeDataSets->SetCampo("vCOFINS_W14=0.01");
		$spdNFeDataSets->SetCampo("vOutro_W15=0.00");
		$spdNFeDataSets->SetCampo("vNF_W16=10.00");
		
		$spdNFeDataSets->SetCampo("modFrete_X02=9");

	$spdNFeDataSets->Salvar();
	$XML = $spdNFeDataSets->LoteNFe;	
	$chave = str_replace("NFe", "", $spdNFeDataSets->GetCampo("id_A03"));	
	$retornos = array('xml' => $XML, "chaveNFe" => $chave);
	
	echo json_encode($retornos);
}
catch(Exception $e){
	echo $e;
}
unset($spdNFe); //Destroi a instancia da NFeX.dll
unset($spdNFeDataSets); //Destroi a instancia daNfeDataSetX.dll
?>   

Assinar Nota : Método do componente NF-e que tem como parâmetro o XML gerado pelo Data Set e retorna o XML assinado da NF-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 = $spdNFe->AssinarNota($xml);	echo $xml;
}
catch(Exception $e){	echo $e;
}
unset($spdNFe); //Destroi a instancia da NFeX.dll
unset($spdNFeDataSets); //Destroi a instancia daNfeDataSetX.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.

 
  

<?php include("instanciaComponente.php");// Arquivo PHP que instancia o componente e passa as configurações
try{
	$xml = $_POST["xmlRet"];	
    $xml = $spdNFe->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($spdNFe); //Destroi a instancia da NFeX.dll
unset($spdNFeDataSets); //Destroi a instancia daNfeDataSetX.dll
?>   

Exemplo de retorno Assíncrono:

 
  
<retEnviNFe versao="3.10" xmlns="http://www.portalfiscal.inf.br/nfe"><tpAmb>2</tpAmb><verAplic>PR-v3_6_7</verAplic><cStat>103</cStat><xMotivo>Lote recebido com sucesso</xMotivo><cUF>41</cUF><dhRecbto>2016-09-27T08:53:54-03:00</dhRecbto><infRec><nRec>411110215728646</nRec><tMed>1</tMed></infRec></retEnviNFe>   

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).

 
  

<?php include("instanciaComponente.php");// Arquivo PHP que instancia o componente e passa as configurações
try{
	$xml = $_POST["xmlRet"];
	$xml = $spdNFe->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($spdNFe); //Destroi a instancia da NFeX.dll
unset($spdNFeDataSets); //Destroi a instancia daNfeDataSetX.dll
?>   

Exemplo de retorno Síncrono:

 
  
<retEnviNFe versao="3.10" xmlns="http://www.portalfiscal.inf.br/nfe"><tpAmb>2</tpAmb><verAplic>PR-v3_6_7</verAplic><cStat>104</cStat><xMotivo>Lote processado</xMotivo><cUF>41</cUF><dhRecbto>2016-09-27T09:00:42-03:00</dhRecbto><protNFe versao="3.10"><infProt Id="ID141160000760514"><tpAmb>2</tpAmb><verAplic>PR-v3_6_7</verAplic><chNFe>41160908187168000160553670003123421004640324</chNFe><dhRecbto>2016-09-27T09:00:42-03:00</dhRecbto><nProt>141160000760514</nProt><digVal>HpNE7evWmgOzlahz1yY6hMUiQj0=</digVal><cStat>100</cStat><xMotivo>Autorizado o uso da NF-e</xMotivo></infProt></protNFe></retEnviNFe>   

Minha nota está trazendo rejeições, e agora, o que fazer ?

Como encontrar soluções para as Rejeições

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 NF-e.

 
  

<?php include("instanciaComponente.php");// Arquivo PHP que instancia o componente e passa as configurações
try{
	$nroRecibo = $_POST["reciboNota"];
	$xml = $spdNFe->ConsultarRecibo($nroRecibo);
	echo $xml;	
}
catch(Exception $e){
	echo $e;	
}
unset($spdNFe); //Destroi a instancia da NFeX.dll
unset($spdNFeDataSets); //Destroi a instancia daNfeDataSetX.dll
?>   

Exemplo de retorno do método:

 
  
<retConsReciNFe versao="3.10" xmlns="http://www.portalfiscal.inf.br/nfe"><tpAmb>2</tpAmb><verAplic>PR-v3_6_7</verAplic><nRec>411110215728750</nRec><cStat>104</cStat><xMotivo>Lote processado</xMotivo><cUF>41</cUF><dhRecbto>2016-09-27T09:21:27-03:00</dhRecbto><protNFe versao="3.10"><infProt><tpAmb>2</tpAmb><verAplic>PR-v3_6_7</verAplic><chNFe>41160908187168000160552910003123421004640328</chNFe><dhRecbto>2016-09-27T09:21:24-03:00</dhRecbto><nProt>141160000760604</nProt><digVal>hCm7VA2TpfJSa69oqOAN7Pa0i1g=</digVal><cStat>100</cStat><xMotivo>Autorizado o uso da NF-e</xMotivo></infProt></protNFe></retConsReciNFe>   

Consultar NF-e: Método do componente que tem como parâmetro a chave da Nota. Retorna o status do processamento da NF-e.

 
  

<?php include("instanciaComponente.php");// Arquivo PHP que instancia o componente e passa as configurações
try{
	$chaveNota = $_POST["chaveNota"];
	$chaveNota = $spdNFe->ConsultarNF($chaveNota);
	echo $chaveNota;
	}
catch(Exception $e){
	echo $e;
	}
unset($spdNFe); //Destroi a instancia da NFeX.dll
unset($spdNFeDataSets); //Destroi a instancia daNfeDataSetX.dll
?>   

Exemplo de retorno do método:

 
  
<retConsSitNFe versao="3.10" xmlns="http://www.portalfiscal.inf.br/nfe"><tpAmb>2</tpAmb><verAplic>PR-v3_6_7</verAplic><cStat>100</cStat><xMotivo>Autorizado o uso da NF-e</xMotivo><cUF>41</cUF><dhRecbto>2016-09-27T09:22:08-03:00</dhRecbto><chNFe>41160908187168000160552910003123421004640328</chNFe><protNFe versao="3.10"><infProt Id="ID141160000760604"><tpAmb>2</tpAmb><verAplic>PR-v3_6_7</verAplic><chNFe>41160908187168000160552910003123421004640328</chNFe><dhRecbto>2016-09-27T09:21:24-03:00</dhRecbto><nProt>141160000760604</nProt><digVal>hCm7VA2TpfJSa69oqOAN7Pa0i1g=</digVal><cStat>100</cStat><xMotivo>Autorizado o uso da NF-e</xMotivo></infProt></protNFe></retConsSitNFe>   

Minha nota está trazendo rejeições, e agora, o que fazer ?

Como encontrar soluções para as Rejeições

Gerar PDF: Método do componente NF-e que gera o PDF da NF-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 NF-e, o formato de saída e o diretório para gravação do arquivo.

 
  

<?php include("instanciaComponente.php");// Arquivo PHP que instancia o componente e passa as configurações
try{
	$chaveNFe = $_POST["chaveNota"];
	$XML = file_get_contents("C:\\xampp\\xamppfiles\\htdocs\\my portable files\\XmlDestinatario\\".$chaveNFe."-nfe.xml") ;
	$spdNFe->ExportarDanfe("00001", $XML, $spdNFe->ModeloRetrato, 1, "C:\\xampp\\xamppfiles\\htdocs\\my portable files\\PDF\\".$chaveNFe.".PDF");
}
catch(Exception $e){
	echo $e;
}
unset($spdNFe); //Destroi a instancia da NFeX.dll
unset($spdNFeDataSets); //Destroi a instancia daNfeDataSetX.dll
?>   

Clique aqui e veja como enviar e-mail com o componente direto do PHP.

 

Também é possível auditar/validar o XML da NFe antes de fazer o envio. Para isto, usa-se o método AuditorValidarXml , que tem como parâmetro o XML da NFe e o separador do retorno.

 
  

<?php include("instanciaComponente.php");// Arquivo PHP que instancia o componente e passa as configurações
try{
 $xml = $_POST["xmlNFe"];
 //Configurações previas e necessárias... 
 $spdNFe->AuditorExibirRegrasValidacao = true;
 $spdNFe->AuditorCodigoProduto = 1;
 $spdNFe->AuditorModoOperacao = 0;
 $spdNFe->AuditorEstagio = 0;
 $spdNFe->AuditorTipoResposta = 1;
 $spdNFe->AuditorDiretorioEsquemas = "C:\\xampp\\htdocs\\my portable files\\Esquemas\\Auditor";
 $spdNFe->AuditorDiretorioTemplates = "C:\\xampp\\htdocs\\my portable files\\templates\\Auditor";
 $spdNFe->AuditorDiretorioRegras = "C:\\xampp\\htdocs\\my portable files\\templates\\Auditor\\Regras";
 $xmlResposta = $spdNFe->AuditorValidarXml($xml, "|");
 echo $xmlResposta;
}
catch(Exception $e){
	echo $e;
}
?>   

Exemplo de retorno do método:

 
  

{"notas":[{"ID":"Nota NFe41160908187168000160557450003123421004640329","valido":"XML Valido"}],"tags":[],"helper":[]}   

 

É possível importar um XML de uma NF-e para o DataSet do componente NF-e como segue o exemplo:

 
  <?php include("instanciaComponente.php");
try{
	$XML = $_POST["xmlNFe"];	
	$spdNFeDataSets->ConverterXmlParaDataSet($XML,"pl_008i1");

	//informações da NF-e
	$versao_A02    =    $spdNFeDataSets->GetCampo("versao_A02");
	$Id_A03        =	$spdNFeDataSets->GetCampo("Id_A03");
	$cUf_B02       =	$spdNFeDataSets->GetCampo("cUf_B02");
	$cNF_B03       =	$spdNFeDataSets->GetCampo("cNF_B03");
	$natOp_B04     =    $spdNFeDataSets->GetCampo("natOp_B04");
	$indPag_B05    =	$spdNFeDataSets->GetCampo("indPag_B05");	
	$mod_B06       =	$spdNFeDataSets->GetCampo("mod_B06");
	$serie_B07     =    $spdNFeDataSets->GetCampo("serie_B07");	
	$nNF_B08       =    $spdNFeDataSets->GetCampo("nNF_B08");	
	$dhEmi_B09     =	$spdNFeDataSets->GetCampo("dhEmi_B09");
	$dhSaiEnt_B10  =	$spdNFeDataSets->GetCampo("dhSaiEnt_B10");
	$tpNF_B11      =	$spdNFeDataSets->GetCampo("tpNF_B11");
	$idDest_B11a   =	$spdNFeDataSets->GetCampo("idDest_B11a");
	$cMunFG_B12    =	$spdNFeDataSets->GetCampo("cMunFG_B12");
	$tpImp_B21     =	$spdNFeDataSets->GetCampo("tpImp_B21");
	$tpEmis_B22	   =	$spdNFeDataSets->GetCampo("tpEmis_B22");
	$cDV_B23       =	$spdNFeDataSets->GetCampo("cDV_B23");
	$tpAmb_B24     =	$spdNFeDataSets->GetCampo("tpAmb_B24");
	$finNFe_B25    =	$spdNFeDataSets->GetCampo("finNFe_B25");
	$indFinal_B25a =	$spdNFeDataSets->GetCampo("indFinal_B25a");
	$indPres_B25b  =	$spdNFeDataSets->GetCampo("indPres_B25b");
	$procEmi_B26   =	$spdNFeDataSets->GetCampo("procEmi_B26");
	$verProc_B27   =	$spdNFeDataSets->GetCampo("verProc_B27");

	//Informações do Emitente
	$CNPJ_C02 	=  $spdNFeDataSets->GetCampo("CNPJ_C02");
	$xNome_C03 	=  $spdNFeDataSets->GetCampo("xNome_C03");

	//Informações do Destinatário	
	$CNPJ_E02 	=	$spdNFeDataSets->GetCampo("CNPJ_E02");
	$xNome_E04	=	$spdNFeDataSets->GetCampo("xNome_E04");

	//Informações do Item da Nota
	$spdNFeDataSets->FindDataSet("H")->First();
	while( $spdNFeDataSets->FindDataSet("H")->Eof() === false ){
		$nItem_H02 	=	$spdNFeDataSets->GetCampo("nItem_H02");
		$xProd_I04 	=	$spdNFeDataSets->GetCampo("xProd_I04");
		$vProd_I11	=	$spdNFeDataSets->GetCampo("vProd_I11");
		$CSOSN_N12a	=	$spdNFeDataSets->GetCampo("CSOSN_N12a");
		$spdNFeDataSets->FindDataSet("H")->Next();
	}

	//Informações das Faturas
	$spdNFeDataSets->FindDataSet("Y")->First();
	while( $spdNFeDataSets->FindDataSet("Y")->Eof() === false){
		$nFat   = 	$spdNFeDataSets->GetCampo("nFat_Y03");
		$vOrig	=	$spdNFeDataSets->GetCampo("vOrig_Y04");
		$vOrig 	=	$spdNFeDataSets->GetCampo("vDesc_Y05");
		$vLiq 	=	$spdNFeDataSets->GetCampo("vLiq_Y06");
		$spdNFeDataSets->FindDataSet("Y")->Next();
	}

    //Informações das Duplicatas
	$spdNFeDataSets->FindDataSet("Dup")->First();
	while( $spdNFeDataSets->FindDataSet("Dup")->Eof() === false){
		$nroDup = 	$spdNFeDataSets->GetCampo("nDup_Y08");
		$venc	=	$spdNFeDataSets->GetCampo("dVenc_Y09");
		$vDup 	=	$spdNFeDataSets->GetCampo("vDup_Y10");
		$spdNFeDataSets->FindDataSet("Dup")->Next();
	}
}catch(Exception $e){
	echo $e;
}
unset($spdNFe); //Destroi a instancia da NFeX.dll
unset($spdNFeDataSets); //Destroi a instancia daNfeDataSetX.dll
?>   
 
   Lista de Tipos dentro do DataSet 
 {A - Dados da Nota Fiscal eletrônica} 
 {B - Identificação da Nota Nota Fiscal Eletrônica } 
 {C - Identificação do Emitente da Nota Nota Fiscal Eletrônica } 
 {D - Identificação do Fisco Emitente da Nota Nota Fiscal Eletrônica } 
 {E - Identificação do Destinatário da Nota Nota Fiscal Eletrônica } 
 {F - Identificação do Local da Retirada da Nota Nota Fiscal Eletrônica } 
 {G - Identificação do Local da Entrega da Nota Nota Fiscal Eletrônica } 
 {H - Detalhamento de Produtos e Serviços da Nota Nota Fiscal Eletrônica } 
 {I - Produtos e Serviços da Nota Nota Fiscal Eletrônica } 
 {J - Detalhamento Específico de Veículos Novos } 
 {K - Detalhamento Específico de Medicamentos } 
 {L - Detalhamento Específico de Armamentos } 
 {M - Tributos Incidentes no Produto ou Serviço }
 {N - ICMS Normal e ST } {O - Imposto sobre Produto Industrializado } 
 {P - Imposto de Importação } 
 {Q - PIS } 
 {R - PIS ST }
 {S - COFINS } 
 {T - COFINS ST }
 {U - ISSQN } 
 {V - Informações Adicionais do Item } 
 {W - Valores Totais da NFe } 
 {X - Informações do Transporte da NFe }
 {Y - Dados da Cobrança }
 {Z - Informações Adicionais da NFe }   

Em anexo demonstração com o instalador do XAMPP.

Sabendo como usar o componente, possuímos uma documentação dos métodos do componente em caso de dúvida.

Clique aqui para acessar a documentação do produto

Arquivos para download