nfephp-org / sped-cte

API para geração e comunicação das CTe com as SEFAZ autorizadoras
Other
104 stars 127 forks source link

obter o xml autorizado #89

Closed maisonsakamoto closed 7 years ago

maisonsakamoto commented 7 years ago

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

samuelbasso commented 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;
}
maisonsakamoto commented 7 years ago

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 !

samuelbasso commented 7 years ago

@maisonsakamoto perfeito. Muito obrigado.

fhferreira commented 7 years ago

@maisonsakamoto chegaram a implementar o CTeDistribuicaoDFe ?

maisonsakamoto commented 7 years ago

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.

fhferreira commented 7 years ago

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;
    }
maisonsakamoto commented 7 years ago

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 .= " "; $body .= " {$tpAmb}"; $body .= " {$cUF}"; $body .= " {$cnpj}"; $body .= " {$ultimoNSU}"; $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; }

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

fhferreira commented 7 years ago

@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