public function sefazEnviaLote($aXml, $tpAmb = '2', $idLote = '', &$aRetorno = array(), $indSinc = 0, $compactarZip = false, $salvarMensagens = true)
{
$sxml = $aXml;
if (empty($aXml)) {
$msg = "Pelo menos uma NFe deve ser informada.";
throw new Exception\InvalidArgumentException($msg);
}
if (is_array($aXml)) {
if (count($aXml) > 1) {
//multiplas nfes, não pode ser sincrono
$indSinc = 0;
}
$sxml = implode("", $sxml);
}
$sxml = preg_replace("/<\\?xml.*\\?>/", "", $sxml);
$siglaUF = $this->aConfig['siglaUF'];
if ($tpAmb == '') {
$tpAmb = $this->aConfig['tpAmb'];
}
if ($idLote == '') {
$idLote = LotNumber::geraNumLote(15);
}
//carrega serviço
$servico = 'NfeAutorizacao';
$this->zLoadServico('nfe', $servico, $siglaUF, $tpAmb);
if ($this->urlService == '') {
$msg = "O envio de lote não está disponível na SEFAZ {$siglaUF}!!!";
throw new Exception\RuntimeException($msg);
}
//montagem dos dados da mensagem SOAP
$cons = "<enviNFe xmlns=\"{$this->urlPortal}\" versao=\"{$this->urlVersion}\">" . "<idLote>{$idLote}</idLote>" . "<indSinc>{$indSinc}</indSinc>" . "{$sxml}" . "</enviNFe>";
//valida a mensagem com o xsd
//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 = "<nfeDadosMsg xmlns=\"{$this->urlNamespace}\">{$cons}</nfeDadosMsg>";
$method = $this->urlMethod;
if ($compactarZip) {
$gzdata = base64_encode(gzencode($cons, 9, FORCE_GZIP));
$body = "<nfeDadosMsgZip xmlns=\"{$this->urlNamespace}\">{$gzdata}</nfeDadosMsgZip>";
$method = $this->urlMethod . "Zip";
}
//envia a solicitação via SOAP
$retorno = $this->oSoap->send($this->urlService, $this->urlNamespace, $this->urlHeader, $body, $method);
$this->soapDebug = $this->oSoap->soapDebug;
//salva mensagens
if ($salvarMensagens) {
$lastMsg = $this->oSoap->lastMsg;
$filename = "{$idLote}-enviNFe.xml";
$this->zGravaFile('nfe', $tpAmb, $filename, $lastMsg);
$filename = "{$idLote}-retEnviNFe.xml";
$this->zGravaFile('nfe', $tpAmb, $filename, $retorno);
}
//tratar dados de retorno
$aRetorno = ReturnNFe::readReturnSefaz($servico, $retorno);
//caso o envio seja recebido com sucesso mover a NFe da pasta
//das assinadas para a pasta das enviadas
return (string) $retorno;
}