Closed maisonsakamoto closed 7 years ago
@maisonsakamoto olha essa funcao mas na biblioteca do NFePHP, talvez de para implementar no sped-cte também.
/**
* sefazDistDFe
* Serviço destinado à distribuição de informações
* resumidas e documentos fiscais eletrônicos de interesse de um ator.
* @param string $fonte sigla da fonte dos dados 'AN'
* e para alguns casos pode ser 'RS'
* @param string $tpAmb tiupo de ambiente
* @param string $cnpj
* @param integer $ultNSU ultimo numero NSU que foi consultado
* @param integer $numNSU numero de NSU que se quer consultar
* @param array $aRetorno array com os dados do retorno
* @param boolean $descompactar se true irá descompactar os dados retornados,
* se não os dados serão retornados da forma que foram recebidos
* @return string contento o xml retornado pela SEFAZ
* @internal function zLoadServico (Common\Base\BaseTools)
*/
public function sefazDistDFe(
$fonte = 'AN',
$tpAmb = '2',
$cnpj = '',
$ultNSU = 0,
$numNSU = 0,
&$aRetorno = array()
) {
if ($tpAmb == '') {
$tpAmb = $this->aConfig['tpAmb'];
}
$siglaUF = $this->aConfig['siglaUF'];
if ($cnpj == '') {
$cnpj = $this->aConfig['cnpj'];
}
//carrega serviço
$servico = 'NFeDistribuicaoDFe';
$this->zLoadServico(
'nfe',
$servico,
$fonte,
$tpAmb
);
if ($this->urlService == '') {
$msg = "A distribuição de documento DFe não está disponível na SEFAZ $fonte!!!";
throw new Exception\RuntimeException($msg);
}
$cUF = self::zGetcUF($siglaUF);
$ultNSU = str_pad($ultNSU, 15, '0', STR_PAD_LEFT);
$tagNSU = "<distNSU><ultNSU>$ultNSU</ultNSU></distNSU>";
if ($numNSU != 0) {
$numNSU = str_pad($numNSU, 15, '0', STR_PAD_LEFT);
$tagNSU = "<consNSU><NSU>$numNSU</NSU></consNSU>";
}
//monta a consulta
$cons = "<distDFeInt xmlns=\"$this->urlPortal\" versao=\"$this->urlVersion\">"
. "<tpAmb>$tpAmb</tpAmb>"
. "<cUFAutor>$cUF</cUFAutor>"
. "<CNPJ>$cnpj</CNPJ>$tagNSU</distDFeInt>";
//validar mensagem com xsd
//if (! $this->validarXml($cons)) {
// $msg = 'Falha na validação. '.$this->error;
// throw new Exception\RuntimeException($msg);
//}
//montagem dos dados da mensagem SOAP
$body = "<nfeDistDFeInteresse xmlns=\"$this->urlNamespace\">"
. "<nfeDadosMsg xmlns=\"$this->urlNamespace\">$cons</nfeDadosMsg>"
. "</nfeDistDFeInteresse>";
//envia dados via SOAP e verifica o retorno este webservice não requer cabeçalho
$this->urlHeader = '';
$retorno = $this->oSoap->send(
$this->urlService,
$this->urlNamespace,
$this->urlHeader,
$body,
$this->urlMethod
);
$lastMsg = $this->oSoap->lastMsg;
$this->soapDebug = $this->oSoap->soapDebug;
//salva mensagens
$tipoNSU = (int) ($numNSU != 0 ? $numNSU : $ultNSU);
$datahora = date('Ymd_His');
$filename = "$tipoNSU-$datahora-distDFeInt.xml";
$this->zGravaFile('nfe', $tpAmb, $filename, $lastMsg);
$filename = "$tipoNSU-$datahora-retDistDFeInt.xml";
$this->zGravaFile('nfe', $tpAmb, $filename, $retorno);
//tratar dados de retorno
$aRetorno = ReturnNFe::readReturnSefaz($servico, $retorno);
return (string) $retorno;
}
Perfeito Samuel existe um serviço (CTeDistribuicaoDFe) que é o equivalente à esse que tu postou (NFeDistribuicaoDFe) então é possível sim, vou entrar no Desenv. agora e mando o Pull Request quando estiver funcional, obrigado !
@maisonsakamoto perfeito. Muito obrigado.
@maisonsakamoto chegaram a implementar o CTeDistribuicaoDFe ?
Não são todos os estados que disponibilizaram esse serviço, então p/ mim não serve, porque eu precisaria no mínimo todo sul e sudoeste do Brasil
2017-07-25 14:33 GMT-03:00 Flávio H. Ferreira notifications@github.com:
@maisonsakamoto https://github.com/maisonsakamoto chegaram a implementar o CTeDistribuicaoDFe ?
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/nfephp-org/sped-cte/issues/89#issuecomment-317811257, or mute the thread https://github.com/notifications/unsubscribe-auth/AGIKidghvasPFsPC9wLRi3VtgAc4nKylks5sRibqgaJpZM4Lq8EP .
--
Atenciosamente,
Maison Kendi Sakamoto Tecnologia da InformaçãoCel: 55 (45) 9118-1184 | Tel: 55 (45) 35263303 email: maison.sakamoto@gmail.com Antes de imprimir, pense em sua responsabilidade e compromisso com o MEIO AMBIENTE.
Eu criei o método em nosso projeto atual para que tenhamos como baixar os CTe's pelo ambiente nacional.
<UF>
<sigla>AN</sigla>
<homologacao>
<CTeDistribuicaoDFe method='CTeDistribuicaoDFe' operation='CTeDistribuicaoDFe' version='3.00'>https://homologacao.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx</CTeDistribuicaoDFe>
</homologacao>
<producao>
<CTeDistribuicaoDFe method='CTeDistribuicaoDFe' operation='CTeDistribuicaoDFe' version='3.00'>https://www1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx</CTeDistribuicaoDFe>
</producao>
</UF>
/**
* cteDownload
* Solicita o download de CTes
*
* @param string $chNFe
* @param string $tpAmb
* @param string $cnpj
* @param array $aRetorno
* @return string
* @throws Exception\RuntimeException
*/
public function cteDownload(
$chCTe='',
$tpAmb = '',
$cnpj = '',
&$aRetorno = array(),
$ultimoNSU = 0
) {
if ($tpAmb == '') {
$tpAmb = $this->aConfig['tpAmb'];
}
$siglaUF = $this->aConfig['siglaUF'];
if ($cnpj == '') {
$cnpj = $this->aConfig['cnpj'];
}
//carrega serviço
$servico = 'CTeDistribuicaoDFe';
$this->zLoadServico(
'cte',
$servico,
'AN',
$tpAmb
);
if ($this->urlService == '') {
$msg = "A distribuição de documento Cte não está disponível na SEFAZ !!!";
throw new Exception\RuntimeException($msg);
}
$cUF = self::getcUF($siglaUF);
$ultimoNSU = str_pad($ultimoNSU, 15, '0', STR_PAD_LEFT);
$body = "";
$body .= "<cteDistDFeInteresse xmlns='http://www.portalfiscal.inf.br/cte/wsdl/CTeDistribuicaoDFe'>";
$body .= " <cteDadosMsg><distDFeInt xmlns='http://www.portalfiscal.inf.br/cte' versao='1.00'>";
$body .= " <tpAmb>{$tpAmb}</tpAmb>";
$body .= " <cUFAutor>{$cUF}</cUFAutor>";
$body .= " <CNPJ>{$cnpj}</CNPJ>";
$body .= " <distNSU><ultNSU>{$ultimoNSU}</ultNSU></distNSU>";
$body .= " </distDFeInt></cteDadosMsg>";
$body .= "</cteDistDFeInteresse>";
//envia dados via SOAP e verifica o retorno este webservice não requer cabeçalho
$retorno = $this->oSoap->send(
$this->urlService,
$this->urlNamespace,
$this->urlHeader,
$body,
$this->urlMethod
);
$lastMsg = $this->oSoap->lastMsg;
//salva mensagens
$filename = "$chCTe-downCTe.xml";
$this->zGravaFile('cte', $tpAmb, $filename, $lastMsg);
$filename = "$chCTe-retCTe.xml";
$this->zGravaFile('cte', $tpAmb, $filename, $retorno);
//tratar dados de retorno
$aRetorno = Response::readReturnSefaz($servico, $retorno);
return (string) $retorno;
}
legal, se quiser upar esse exemplo no projeto fique a vontade, fez testes em quais estados ?
2017-07-26 14:42 GMT-03:00 Flávio H. Ferreira notifications@github.com:
Eu criei o método em nosso projeto atual para que tenhamos como baixar os CTe's pelo ambiente nacional.
AN https://homologacao.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx https://www1.cte.fazenda.gov.br/CTeDistribuicaoDFe/CTeDistribuicaoDFe.asmx /* cteDownload Solicita o download de CTes @param string $chNFe @param string $tpAmb @param string $cnpj @param array $aRetorno @return string @throws Exception\RuntimeException */ public function cteDownload( $chCTe='', $tpAmb = '', $cnpj = '', &$aRetorno = array(), $ultimoNSU = 0 ) { if ($tpAmb == '') { $tpAmb = $this->aConfig['tpAmb']; } $siglaUF = $this->aConfig['siglaUF']; if ($cnpj == '') { $cnpj = $this->aConfig['cnpj']; } //carrega serviço $servico = 'CTeDistribuicaoDFe'; $this->zLoadServico( 'cte', $servico, 'AN', $tpAmb ); if ($this->urlService == '') { $msg = "A distribuição de documento Cte não está disponível na SEFAZ !!!"; throw new Exception\RuntimeException($msg); } $cUF = self::getcUF($siglaUF); $ultimoNSU = str_pad($ultimoNSU, 15, '0', STR_PAD_LEFT); $body = ""; $body .= "
"; $body .= " "; //envia dados via SOAP e verifica o retorno este webservice não requer cabeçalho $retorno = $this->oSoap->send( $this->urlService, $this->urlNamespace, $this->urlHeader, $body, $this->urlMethod ); $lastMsg = $this->oSoap->lastMsg; //salva mensagens $filename = "$chCTe-downCTe.xml"; $this->zGravaFile('cte', $tpAmb, $filename, $lastMsg); $filename = "$chCTe-retCTe.xml"; $this->zGravaFile('cte', $tpAmb, $filename, $retorno); //tratar dados de retorno $aRetorno = Response::readReturnSefaz($servico, $retorno); return (string) $retorno; }"; $body .= " "; $body .= " {$tpAmb} "; $body .= "{$cUF} "; $body .= "{$cnpj} "; $body .= ""; $body .= " {$ultimoNSU} — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/nfephp-org/sped-cte/issues/89#issuecomment-318128776, or mute the thread https://github.com/notifications/unsubscribe-auth/AGIKiTPS0Xv04NfXoPPGeVJm82ORYE9Oks5sR3p3gaJpZM4Lq8EP .
--
Atenciosamente,
Maison Kendi Sakamoto Tecnologia da InformaçãoCel: 55 (45) 9118-1184 | Tel: 55 (45) 35263303 email: maison.sakamoto@gmail.com Antes de imprimir, pense em sua responsabilidade e compromisso com o MEIO AMBIENTE.
@maisonsakamoto estou recebendo CTe para uma Empresa que é de Ribeirão Preto - SP e esses CTe's vem de diversos estados, pelo que pude notar, há cte's de SP, SC, RJ, MG, BA, SC
Bom dia, será que é possível obter o xml autorizado que esta na sefaz através da API, queria passar a chave ou o numero do protocolo e receber o xml que esta na sefaz, será que é possível ?
*Hoje faço o download manualmente acessando o site da sefaz