Skip to content

Commit

Permalink
v4.0 Tools
Browse files Browse the repository at this point in the history
  • Loading branch information
paseto committed Oct 7, 2017
2 parents 7a7a71c + fb4507e commit 6643b80
Show file tree
Hide file tree
Showing 41 changed files with 6,609 additions and 10,935 deletions.
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ language: php
php:
- 5.6
- 7.0
- hhvm
- 7.1

# This triggers builds to run on the new TravisCI infrastructure.
# See: http://docs.travis-ci.com/user/workers/container-based-infrastructure/
Expand Down
2 changes: 1 addition & 1 deletion VERSION.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
4.0.x-dev
4.0.x-dev
6 changes: 4 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@
],
"require": {
"php" : "~5.6|~7.0",
"nfephp-org/sped-common" : "^5.0"
"nfephp-org/sped-common" : "^5.0",
"justinrainbow/json-schema": "^5.2",
"symfony/yaml": "^3.3"
},
"require-dev": {
"squizlabs/php_codesniffer": "^2.8",
Expand Down Expand Up @@ -47,5 +49,5 @@
"v4.0": "4.0-dev"
}
},
"minimum-stability": "dev"
"minimum-stability": "stable"
}
363 changes: 363 additions & 0 deletions examples/testaMakeCTe.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,363 @@
<?php
/* * @category Teste
* @package Spedcteexamples
* @copyright 2009-2016 NFePHP
* @name testaMakeCTe.php
* @license http://www.gnu.org/licenses/gpl.html GNU/GPL v.3
* @link http://github.com/nfephp-org/sped-cte for the canonical source repository
* @author Samuel M. Basso <samuelbasso@gmail.com>
* Adaptado por Maison K. Sakamoto <maison.sakamoto@gmail.com>
*
* TESTE PARA A VERSÃO 3.0 do CT-e
* */
error_reporting(E_ALL);
ini_set('display_errors', 'On');

require_once '../bootstrap.php';

use NFePHP\CTe\Make;
use NFePHP\CTe\Tools;
use NFePHP\CTe\Common\Standardize;
use NFePHP\Common\Certificate;
use NFePHP\Common\Soap\SoapCurl;

//tanto o config.json como o certificado.pfx podem estar
//armazenados em uma base de dados, então não é necessário
///trabalhar com arquivos, este script abaixo serve apenas como
//exemplo durante a fase de desenvolvimento e testes.
$arr = [
"atualizacao" => "2016-11-03 18:01:21",
"tpAmb" => 2,
"razaosocial" => "SUA RAZAO SOCIAL LTDA",
"cnpj" => "99999999999999",
"siglaUF" => "RS",
"schemes" => "PL_CTe_300",
"versao" => '3.00',
"tokenIBPT" => "AAAAAAA",
"CSC" => "GPB0JBWLUR6HWFTVEAS6RJ69GPCROFPBBB8G",
"CSCid" => "000001",
"proxyConf" => [
"proxyIp" => "",
"proxyPort" => "",
"proxyUser" => "",
"proxyPass" => ""
]
];
//monta o config.json
$configJson = json_encode($arr);

//carrega o conteudo do certificado.
$content = file_get_contents('fixtures/certificado.pfx');

//intancia a classe tools
$tools = new Tools($configJson, Certificate::readPfx($content, '02040608'));
//seta o modelo para 57
$tools->model('57');

$cte = new Make();
//$cteTools = new Tools('../config/config.json');

$dhEmi = date("Y-m-d\TH:i:s-03:00");
//$dhEmi = date("d/m/Y");

$numeroCTE = '2463';

//$cteTools->aConfig['siglaUF'] = $obj->emitenteUFNome; // SIGLA DA UF
//$cteTools->aConfig['cnpj']= Formatador::somenteNumeros($obj->emitenteCNPJ); // CNPJ do emitente
//$cteTools->aConfig['ie']= Formatador::somenteNumeros($obj->emitenteIE); // Inscricao estadual
//$cteTools->aConfig['razaosocial']=$obj->emitenteRazao; // Razao social
//$cteTools->aConfig['nomefantasia']="BARTHOLO TRANSPORTES RODOVIARIOS LTDA"; // Nome fantasia
//$cteTools->aConfig['schemesCTe']="PL_CTe_300"; // Versao do XML
//$cteTools->aConfig['pathXmlUrlFileCTe']="cte_ws3.xml";

$chave = montaChave(
'43', date('y', strtotime($dhEmi)), date('m', strtotime($dhEmi)), $arr['cnpj'], $tools->model(), '1', $numeroCTE, '1', '10'
);

$resp = $cte->infCteTag($chave, $versao = '3.00');
//header('Content-type: text/xml; charset=UTF-8');
//printf ("<pre>%s</pre>", htmlentities ($resp));
//exit();

$cDV = substr($chave, -1); //Digito Verificador

$resp = $cte->ideTag(
$cUF = '41', // Codigo da UF da tabela do IBGE
$cCT = '00000010', // Codigo numerico que compoe a chave de acesso
$CFOP = '6352', // Codigo fiscal de operacoes e prestacoes
$natOp = substr('PRESTACAO DE SERVICO DE TRANSPORTE A ESTABELECIMEN', 0, 60), // Natureza da operacao
//$forPag = '', // 0-Pago; 1-A pagar; 2-Outros
$mod = '57', // Modelo do documento fiscal: 57 para identificação do CT-e
$serie = '2', // Serie do CTe
$nCT = $numeroCTE, // Numero do CTe
$dhEmi, // Data e hora de emissão do CT-e: Formato AAAA-MM-DDTHH:MM:DD
$tpImp = '1', // Formato de impressao do DACTE: 1-Retrato; 2-Paisagem.
$tpEmis = '1', // Forma de emissao do CTe: 1-Normal; 4-EPEC pela SVC; 5-Contingência
$cDV, // Codigo verificador
$tpAmb = '2', // 1- Producao, 2-homologacao
$tpCTe = '0', // 0- CT-e Normal; 1 - CT-e de Complemento de Valores;
// 2 -CT-e de Anulação; 3 - CT-e Substituto
$procEmi = '0', // Descricao no comentario acima
$verProc = '3.0', // versao do aplicativo emissor
$indGlobalizado = '1',
//$refCTE = '', // Chave de acesso do CT-e referenciado
$cMunEnv = '4108304', // Utilizar a tabela do IBGE. Informar 9999999 para as operações com o exterior.
$xMunEnv = 'FOZ DO IGUACU', // Informar PAIS/Municipio para as operações com o exterior.
$UFEnv = 'PR', // Informar 'EX' para operações com o exterior.
$modal = '01', // Preencher com:01-Rodoviário; 02-Aéreo; 03-Aquaviário;04-
$tpServ = '0', // 0- Normal; 1- Subcontratação; 2- Redespacho;
// 3- Redespacho Intermediário; 4- Serviço Vinculado a Multimodal
$cMunIni = '4108304', // Utilizar a tabela do IBGE. Informar 9999999 para as operações com o exterior.
$xMunIni = 'FOZ DO IGUACU', // Informar 'EXTERIOR' para operações com o exterior.
$UFIni = 'PR', // Informar 'EX' para operações com o exterior.
$cMunFim = '3523909', // Utilizar a tabela do IBGE. Informar 9999999 para operações com o exterior.
$xMunFim = 'ITU', // Informar 'EXTERIOR' para operações com o exterior.
$UFFim = 'SP', // Informar 'EX' para operações com o exterior.
$retira = '1', // Indicador se o Recebedor retira no Aeroporto, Filial,
// Porto ou Estação de Destino? 0-sim; 1-não
$xDetRetira = '', // Detalhes do retira
$indIEToma = '1', $dhCont = '', // Data e Hora da entrada em contingência; no formato AAAAMM-DDTHH:MM:SS
$xJust = '' // Justificativa da entrada em contingência
);

$resp = $cte->toma3Tag(
$toma = '3' // Indica o "papel" do tomador: 0-Remetente; 1-Expedidor; 2-Recebedor; 3-Destinatário
);

$resp = $cte->toma4Tag(
$toma = '4', // 4-Outros, informar os dados cadastrais do tomador quando ele for outros
$CNPJ = '11509962000197', // CNPJ
$CPF = '', // CPF
$IE = 'ISENTO', // Iscricao estadual
$xNome = 'OTIMIZY', // Razao social ou Nome
$xFant = 'OTIMIZY', // Nome fantasia
$fone = '5434625522', // Telefone
$email = 'contato@otimizy.com.br' // email
);

$resp = $cte->enderTomaTag(
$xLgr = 'Avenida Independência', // Logradouro
$nro = '482', // Numero
$xCpl = '', // COmplemento
$xBairro = 'Centro', // Bairro
$cMun = '4308607', // Codigo do municipio do IBEGE Informar 9999999 para operações com o exterior
$xMun = 'Garibaldi', // Nome do município (Informar EXTERIOR para operações com o exterior.
$CEP = '95720000', // CEP
$UF = $arr['siglaUF'], // Sigla UF (Informar EX para operações com o exterior.)
$cPais = '1058', // Codigo do país ( Utilizar a tabela do BACEN )
$xPais = 'Brasil' // Nome do pais
);

$resp = $cte->emitTag(
$CNPJ = $arr['cnpj'], // CNPJ do emitente
$IE = '9057800426', // Inscricao estadual
$IEST = "", // Inscricao estadual
$xNome = $arr['razaosocial'], // Razao social
$xFant = 'Nome Fantasia' // Nome fantasia
);

$resp = $cte->enderEmitTag(
$xLgr = 'RUA CARLOS LUZ', // Logradouro
$nro = '33', // Numero
$xCpl = '', // Complemento
$xBairro = 'PARQUE PRESIDENTE', // Bairro
$cMun = '4108304', // Código do município (utilizar a tabela do IBGE)
$xMun = 'FOZ DO IGUACU', // Nome do municipio
$CEP = '85863150', // CEP
$UF = $arr['siglaUF'], // Sigla UF
$fone = '4535221216' // Fone
);

$resp = $cte->remTag(
$CNPJ = '06539526000392', // CNPJ
$CPF = '', // CPF
$IE = '9057800426', // Inscricao estadual
$xNome = 'CT-E EMITIDO EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL', $Fant = 'INPET', // Nome fantasia
$fone = '', // Fone
$email = '' // Email
);

$resp = $cte->enderRemeTag(
$xLgr = 'ALD TITO MUFFATO', // Logradouro
$nro = '290', // Numero
$xCpl = 'SALA 04', // Complemento
$xBairro = 'JARDIM ITAMARATY', // Bairro
$cMun = '4108304', // Codigo Municipal (Informar 9999999 para operações com o exterior.)
$xMun = 'Foz do Iguacu', // Nome do municipio (Informar EXTERIOR para operações com o exterior.)
$CEP = '85863070', // CEP
$UF = 'PR', // Sigla UF (Informar EX para operações com o exterior.)
$cPais = '1058', // Codigo do pais ( Utilizar a tabela do BACEN )
$xPais = 'Brasil' // Nome do pais
);

$resp = $cte->destTag(
$CNPJ = '06539526000120', // CNPJ
$CPF = '', // CPF
$IE = '387171890111', // Inscriao estadual
$xNome = 'CT-E EMITIDO EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL', $fone = '1148869000', // Fone
$ISUF = '', // Inscrição na SUFRAMA
$email = '' // Email
);

$resp = $cte->enderDestTag(
$xLgr = 'RODOVIA WALDOMIRO CORREA DE CAMARGO', // Logradouro
$nro = '7000', // Numero
$xCpl = 'KM 64, SP 79', // COmplemento
$xBairro = 'VILA MARTINS', // Bairro
$cMun = '3523909', // Codigo Municipal (Informar 9999999 para operações com o exterior.)
$xMun = 'ITU', // Nome do Municipio (Informar EXTERIOR para operações com o exterior.)
$CEP = '13308200', // CEP
$UF = 'SP', // Sigla UF (Informar EX para operações com o exterior.)
$cPais = '1058', // Codigo do Pais (Utilizar a tabela do BACEN)
$xPais = 'Brasil' // Nome do pais
);

$resp = $cte->vPrestTag(
$vTPrest = 3334.32, // Valor total da prestacao do servico
$vRec = 3334.32 // Valor a receber
);

$resp = $cte->compTag(
$xNome = 'FRETE VALOR', // Nome do componente
$vComp = '3334.32' // Valor do componente
);

$resp = $cte->icmsTag(
$cst = '00', // 00 - Tributacao normal ICMS
$pRedBC = '', // Percentual de redução da BC (3 inteiros e 2 decimais)
$vBC = 3334.32, // Valor da BC do ICMS
$pICMS = 12, // Alícota do ICMS
$vICMS = 400.12, // Valor do ICMS
$vBCSTRet = '', // Valor da BC do ICMS ST retido
$vICMSSTRet = '', // Valor do ICMS ST retido
$pICMSSTRet = '', // Alíquota do ICMS
$vCred = '', // Valor do Crédito Outorgado/Presumido
$vTotTrib = 754.38, // Valor de tributos federais, estaduais e municipais
$outraUF = false // ICMS devido à UF de origem da prestação, quando diferente da UF do emitente
);

$resp = $cte->infCTeNormTag(); // Grupo de informações do CT-e Normal e Substituto

$resp = $cte->infCargaTag(
$vCarga = 130333.31, // Valor total da carga
$prodPred = 'TUBOS PLASTICOS', // Produto predominante
$xOutCat = '' // Outras caracteristicas da carga
);

$resp = $cte->infQTag(
$cUnid = '01', // Código da Unidade de Medida: ( 00-M3; 01-KG; 02-TON; 03-UNIDADE; 04-LITROS; 05-MMBTU
$tpMed = 'ESTRADO', // Tipo de Medida
// ( PESO BRUTO, PESO DECLARADO, PESO CUBADO, PESO AFORADO, PESO AFERIDO, LITRAGEM, CAIXAS e etc)
$qCarga = 18145.0000 // Quantidade (15 posições, sendo 11 inteiras e 4 decimais.)
);

$resp = $cte->infDocTag();

$resp = $cte->infNFeTag(
$pChave = '43160472202112000136550000000010571048440722', // Chave de acesso da NF-e
$PIN = '', // PIN SUFRAMA
$dPrev = '2016-10-30' // Data prevista de entrega
);

$resp = $cte->infModalTag($versaoModal = '3.00');

$resp = $cte->rodoTag(
$RNTRC = '00739357' // Registro Nacional de Transportadores Rodoviários de Carga
);

$resp = $cte->montaCTe();

$filename = "xml/{$chave}-cte.xml";

if ($resp) {
//header('Content-type: text/xml; charset=UTF-8');
$xml = $cte->getXML();
file_put_contents($filename, $xml);
//chmod($filename, 0777);
//echo $xml;
} else {
header('Content-type: text/html; charset=UTF-8');
foreach ($cte->erros as $err) {
echo 'tag: &lt;' . $err['tag'] . '&gt; ---- ' . $err['desc'] . '<br>';
}
}

//exit();
//$xml = file_get_contents($filename);
//Assina
$xml = $tools->signCTe($xml);
//header('Content-type: text/xml; charset=UTF-8');
//print_r($xml);
//Salva xml assinado
$filename = "xml/{$chave}-cte.xml";
file_put_contents($filename, $xml);


$axmls[] = $xml;
$res = $tools->sefazEnviaLote($axmls);

//Converte resposta
$stdCl = new Standardize($res);
//Output array
$arr = $stdCl->toArray();
//print_r($arr);
//Output object
$std = $stdCl->toStd();

if ($std->cStat != 103) {//103 - Lote recebido com Sucesso
//processa erros
} else {
echo "recibo: " . $std->infRec->nRec;
//Consulta Recibo
$res = $tools->sefazConsultaRecibo($std->infRec->nRec);
$stdCl = new Standardize($res);
$arr = $stdCl->toArray();
print_r($arr);
}

exit();
$aRetorno = array();
$tpAmb = '2';
$idLote = '';
$indSinc = '1';
$flagZip = false;

$retorno = $cteTools->sefazEnvia($xml, $tpAmb = '2', $idLote, $aRetorno, $indSinc, $flagZip);
echo '<pre>';
echo htmlspecialchars($cteTools->soapDebug);
print_r($aRetorno);
echo "</pre>";

function montaChave($cUF, $ano, $mes, $cnpj, $mod, $serie, $numero, $tpEmis, $codigo = '')
{
if ($codigo == '') {
$codigo = $numero;
}
$forma = "%02d%02d%02d%s%02d%03d%09d%01d%08d";
$chave = sprintf(
$forma, $cUF, $ano, $mes, $cnpj, $mod, $serie, $numero, $tpEmis, $codigo
);
return $chave . calculaDV($chave);
}

function calculaDV($chave43)
{
$multiplicadores = array(2, 3, 4, 5, 6, 7, 8, 9);
$iCount = 42;
$somaPonderada = 0;
while ($iCount >= 0) {
for ($mCount = 0; $mCount < count($multiplicadores) && $iCount >= 0; $mCount++) {
$num = (int) substr($chave43, $iCount, 1);
$peso = (int) $multiplicadores[$mCount];
$somaPonderada += $num * $peso;
$iCount--;
}
}
$resto = $somaPonderada % 11;
if ($resto == '0' || $resto == '1') {
$cDV = 0;
} else {
$cDV = 11 - $resto;
}
return (string) $cDV;
}
Loading

0 comments on commit 6643b80

Please sign in to comment.