Oi, boa tarde. Estou começando a desenvolver a NFe usando sped-nfe. Usando a documentação resolvi tudo ate agora, já enviei a nota, consultei status e tudo. só que to com duas dificuldades. Estou com tudo atualizado via composer.
obs : $conf é a tabela de configuração, $cert e a tabela com o certificado e PegaCampo e uma rotina que pega um campo de uma tabela usando filtro. a rotina ficou assim:
function CarregaCertificado($conn, $configuracao){
$conf = new Tnfe_configuracao;
$conf->Conexao = $conn;
$conf->Carrega($configuracao,'');
$cert = new Tfiscal_certificado;
$cert->Conexao = $conn;
$cert->Carrega($conf->CERTIFICADO,"");
$config = [
"atualizacao" => date('Y-m-d h:i:s'),
"tpAmb" => (int) substr($conf->HAMBIENTE,0,1),
"razaosocial" => PegaCampo($conn, 'servidor.empresa', 'razao_social', 'codigo', $_SESSION['SSempresa']),
"cnpj" => trim(str_replace("/", "", str_replace(".", "", str_replace("-", "", PegaCampo($conn, 'servidor.empresa', 'cnpj', 'codigo', $_SESSION['SSempresa']))))),
"ie" => trim(str_replace(".", "", str_replace("-", "", PegaCampo($conn, 'servidor.empresa', 'ie', 'codigo', $_SESSION['SSempresa'])))),
"siglaUF" => PegaCampo($conn, 'servidor.empresa', 'uf', 'codigo', $_SESSION['SSempresa']),
"schemes" => "PL_009_V4",
"versao" => $conf->VERSAO,
"tokenIBPT" => "", //"AAAAAAA",
"CSC" => $cert->NFCE_CSC,
"CSCid" => $cert->NFCE_IDCSC,
"aProxyConf" => [
"proxyIp" => "",
"proxyPort" => "",
"proxyUser" => "",
"proxyPass" => ""
]
];
$configJson = json_encode($config);
$content = file_get_contents(__DIR__."/../UP".$_SESSION['SSchave_cnpj']."/".$cert->ARQUIVO);
$tools = new Tools($configJson, Certificate::readPfx($content, $cert->SENHA));
return $tools;
}
essa rotina ta funcionando tudo certinho, pois uso ela pra enviar a nfe, consultar status tudo. ai a rotina que eu to usando pra enviar a carta de correção é essa :
function EnviaCartaDeCorrecao($conn, $cartaCodigo, $nfeCodigo, $motivo){
$tools = CarregaCertificado($conn, PegaCampo($conn, 'nfe','nfe_configuracao','codigo',$nfeCodigo));
$tools->model(PegaCampo($conn, 'nfe','modelo','codigo',$nfeCodigo));
$chave = PegaCampo($conn, 'nfe','cnf','codigo',$nfeCodigo);
$xCorrecao = $motivo;
$nSeqEvento = $cartaCodigo;
$response = $tools->sefazCCe($chave, $xCorrecao, $nSeqEvento);
$stdCl = new Standardize($response);
$std = $stdCl->toStd();
$carta = new Tnfe_carta_correcao;
$carta->Conexao = $conn;
$carta->Carrega($cartaCodigo, '');
//verifique se o evento foi processado
if ($std->cStat != 128) {
throw new Exception('Erro ao enviar carta de correcao - '.$std->cStat.' - '.$std->xMotivo);
} else {
$cStat = $std->retEvento->infEvento->cStat;
if ($cStat == '135' || $cStat == '136') {
//SUCESSO PROTOCOLAR A SOLICITA??O ANTES DE GUARDAR
$xml = Complements::toAuthorize($tools->lastRequest, $response);
$carta->XML = $xml;
echo $std->cStat.' - '.$std->xMotivo;
} else {
//houve alguma falha no evento
throw new Exception('Erro ao enviar carta de correcao - '.$std->cStat.' - '.$std->xMotivo);
}
}
$carta->CSTAT = $std->cStat;
$carta->RETORNO = $std->xMotivo;
$carta->Edita($cartaCodigo, '');
}
o retorno que ta dando sempre é : status 215 - Rejeição: Falha no esquema XML
2) o cancelamento to usando :
function CancelaNFE($conn, $cancelamentoCod, $nfeCodigo, $justificativa){
$tools = CarregaCertificado($conn, PegaCampo($conn, 'nfe','nfe_configuracao','codigo',$nfeCodigo));
$tools->model(PegaCampo($conn, 'nfe','modelo','codigo',$nfeCodigo));
$chave = PegaCampo($conn, 'nfe', 'cnf', 'codigo', $nfeCodigo);
$nProt = PegaCampo($conn, 'nfe', 'protocolo', 'codigo', $nfeCodigo);
$response = $tools->sefazCancela($chave, $justificativa, $nProt);
$stdCl = new Standardize($response);
$std = $stdCl->toStd();
$cn = new Tnfe_cancelamento;
$cn->Conexao = $conn;
$cn->Carrega($cancelamentoCod, '');
//verifique se o evento foi processado
if ($std->cStat != 128) {
//houve alguma falha e o evento nao foi processado
throw new Exception('Erro ao enviar carta de correcao - '.$std->cStat.' - '.$std->xMotivo);
} else {
$cStat = $std->retEvento->infEvento->cStat;
if ($cStat == '101' || $cStat == '135' || $cStat == '155') {
//SUCESSO PROTOCOLAR A SOLICITA��O ANTES DE GUARDAR
$xml = Complements::toAuthorize($tools->lastRequest, $response);
$cn->XML = $xml;
echo $std->cStat.' - '.$std->xMotivo;
//Editando a nfe para a situacao de cancelada
EditaRegistroUnico($conn, 'nfe', 'situacao', 'CANCELADO', 'codigo = '.$nfeCodigo);
} else {
//houve alguma falha no evento
throw new Exception('Erro ao enviar carta de correcao - '.$std->cStat.' - '.$std->xMotivo);
}
}
$cn->CSTAT = $std->cStat;
$cn->RETORNO = $std->xMotivo;
$cn->Edita($cancelamentoCod, '');
}
também esta dando Rejeição: Falha no esquema XML.
alguém pode me indicar onde eu to falhando?