Existe uma forma simples de automatizar a emissão de CT-e em seu software desenvolvido em PHP, contanto que ele esteja instalado no windows. Quero te apresentar a integração com o Componente CTe da TecnoSpeed.
Para demonstrar como usar o Componente CTe, 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.
Após ter instalado o componente na máquina, basta fazer a instancia da classe do componente no PHP, conforme exemplo:
<?php
$spdCTe = new COM("CTeX.spdCTeX"); //instanciando a CTeX.dll
$spdCTeDataSets = new COM("CTeDataSetX.spdCTeDataSetX");//instanciando a CTeDataSetX.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 parâmetro pode ir em branco, será implementado futuramente):
$spdCTe->ConfigurarSoftwareHouse('11111111111111', "aaaa");
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:
$spdCTe->LoadConfig("C:/xampp/htdocs/my portable files/cteconfig.ini");
As configurações via fonte devem ser feitas da seguinte maneira:
// $spdCTe->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.
$spdCTe->CaminhoCertificado = "C:/xampp/htdocs/my portable files/certificado.pfx";
$spdCTe->SenhaCertificado = "senha123"
$spdCTe->UF = "PR";
$spdCTe->CNPJ = "29062609000177";
$spdCTe->ArquivoServidoresHom = $DirArq."/cteServidoresHom.ini";
$spdCTe->ArquivoServidoresProd = $DirArq."/cteServidoresProd.ini";
$spdCTe->DiretorioEsquemas = $DirArq."/Esquemas";
$spdCTe->DiretorioTemplates = $DirArq."/Templates";
$spdCTe->DiretorioLog = $DirArq."/Log";
$spdCTe->VersaoManual = "3.0";
$spdCTe->ConexaoSegura = 1;
$spdCTe->TimeOut = 60000;
$spdCTe->Ambiente = 2;
$spdCTe->DiretorioXmlTomadorServico = $DirArq."/XmlTomadorServico";
$spdCTe->MaxSizeLoteEnvio = 500;
$spdCTe->DiretorioLogErro = $DirArq."\\LogErro";
$spdCTe->DiretorioTemporario = "C:\\Windows\\Temp";
$spdCTe->ModoOperacao = 0; //0 = moNormal, 1 = moSVCAN, 2 = moSVCRS, 3 = moEPEC
$spdCTe->CaracteresRemoverAcentos="áéíóúàèìòùâêîôûäëïöüãõñçÁÉÍÓÚÀÈÌÒÙÂÊÎÔÛÄËÏÖÜÃÕÑǺª&@";
Métodos do Componente CT-e
Consulta de Status: Método utilizado para realizar a consulta de Status da UF configurada na propriedade $spdCTe->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$spdCTe->StatusDoServico();//Consulta o Status do serviço
}
catch(Exception$e)
{
echo$e;
}
unset($spdCTe);//Destroi a instancia da dll CTeX.dll
unset($spdCTeDataSets);//Destroi a instancia da dll CTeDataSetX.dll
?>
Assinar CT : Método do componente CT-e que tem como parâmetro o XML gerado pelo Data Set e retorna o XML assinado da CT-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 = $spdCTe->AssinarCT($xml);
echo$xml;
}
catch(Exception$e)
{
echo$e;
}
unset($spdCTe); //Destroi a instancia da CTeX.dll
unset($spdCTeDataSets); //Destroi a instancia da CTeDataSetX.dll
?>
Enviar CTe(Síncrono): Método do componente que faz o envio e já retorna o resultado da autorização do CTe.(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 = $spdCTe->EnviarCTSincrono( $xml );
$nroRecibo = simplexml_load_string($xml);
$nroRec = $nroRecibo->infRec;
$retornosEnvio = array('xml' => $xml, "nroRec" => $nroRec);
echo json_encode($retornosEnvio);
}
catch(Exception$e)
{
echo$e;
}
unset($spdCTe); //Destroi a instancia da CTeX.dll
unset($spdCTeDataSets); //Destroi a instancia da CTeDataSetX.dll
?>
Enviar CTe(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 = $spdCTe->EnviarCT("0001", $xml);
$nroRecibo = simplexml_load_string($xml);
$nroRec = $nroRecibo->infRec;
$retornosEnvio = array('xml' => $xml, "nroRec" => $nroRec);
echo json_encode($retornosEnvio);
}
catch(Exception$e)
{
echo$e;
}
unset($spdCTe); //Destroi a instancia da CTeX.dll
unset($spdCTeDataSets); //Destroi a instancia daCTeDataSetX.dll
?>
Gerar PDF: Método do componente CT-e que gera o PDF da CT-e a partir do XML Autorizado do CTe. 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.
<?phpinclude("instanciaComponente.php");// Arquivo PHP que instancia o componente e passa as configurações
try
{
$chaveCTe = $_POST["chaveNota"];
$XML = file_get_contents("C:\\xampp\\xamppfiles\\htdocs\\my portable files\\XmlTomadorServico\\".$chaveCTe."-cte.xml") ;
$spdCTe->ExportarDacteParaPDF($XML, $spdCTe->ModeloRetrato,"testeCte.pdf");
}
catch(Exception$e)
{
echo$e;
}
unset($spdCTe); //Destroi a instancia da CTeX.dll
unset($spCTeDataSets); //Destroi a instancia da CTeDataSetX.dll
?>
Comentários
2 comentários
Fala Gabriel, boa tarde
Tudo bem?
temos um projeto de intermediação de frete e estamos querendo começar a consumir a CTe dos clientes.
Teria como nos ajudar com o caminho das pedras ou prestar um serviço pra gente?
Rafael
51 997302005
Olá Rafael, bom dia.
Tudo bem e com você?
Vou encaminhar seu contato ao setor comercial, eles entrarão em contato para lhe apresentar os serviços prestados pela Tecnospeed.
Atenciosamente.
Por favor, entre para comentar.