Bom dia !!!
`Preciso de ajuda para cancelar nota fiscal , segue meu esquema.
public function cancelar()
{
// Dados
$id_nfe = $this->request->getvar('id_nfe');
$id_venda = $this->request->getvar('id_venda');
// Dados da NFe
$nfe = $this->nfe_model->asObject()->where('id_nfe', $id_nfe)->first();
// Justificativa para o cancelamento
$justificativa = $this->request->getvar('justificativa');
// Pega o numero do protocolo da XML
$string_1 = explode('<nProt>', $nfe->protocolo);
$string_2 = explode('</nProt>', $string_1[1]);
$num_do_protocolo = $string_2[0];
// ---------------------------------
try {
// Dados da config da NFe
$dados = $this->config_nfce_model->asObject()->where('id_config', 1)->first();
$dados_empresa = $this->config_empresa_model->asObject()->where('id_config', 1)->first();
$CNPJ = str_replace(".", "", $dados_empresa->cnpj);
$CNPJ = str_replace("/", "", $CNPJ);
$CNPJ = str_replace("-", "", $CNPJ);
$ie = str_replace(".", "", $dados_empresa->inscricao_estadual);
$ie = str_replace("/", "", $ie);
$ie = str_replace("-", "", $ie);
// ------------------------------------------------------------ CONFIG
$config = [
"atualizacao" => date('Y-m-d h:i:s'),
"tpAmb" => (int) $dados->tpAmb,
"razaosocial" => $dados_empresa->razao_social,
"cnpj" => $CNPJ, // PRECISA SER VÁLIDO
"ie" => $ie, // PRECISA SER VÁLIDO
"siglaUF" => $dados_empresa->UF,
"schemes" => "PL_009_V4",
"versao" => '4.00',
"tokenIBPT" => "AAAAAAA",
"CSC" => "AD6A9D2E-3F93-437F-BE5B-E8FA800A08F4",
"CSCid" => "000001"
];
$configJson = json_encode($config);
// ----------------------------------------------------------------------
// Certificado
$arq_certificado = WRITEPATH . "uploads/"."$this->cnpj/"."certificado_nfce.pfx";
$certificadoDigital = file_get_contents($arq_certificado);
// -----------
$certificate = Certificate::readPfx($certificadoDigital, $dados->senha);
$tools = new Tools($configJson, $certificate);
$tools->model('55');
$chave = $nfe->chave;
$xJust = $justificativa;
$nProt = $num_do_protocolo;
$response = $tools->sefazCancela($chave, $xJust, $nProt);
echo "<pre>";
print_r ( $response);
exit;
//você pode padronizar os dados de retorno atraves da classe abaixo
//de forma a facilitar a extração dos dados do XML
//NOTA: mas lembre-se que esse XML muitas vezes será necessário,
// quando houver a necessidade de protocolos
$stdCl = new Standardize($response);
//nesse caso $std irá conter uma representação em stdClass do XML
$std = $stdCl->toStd();
// Cria sessão para mostrar os alertas
$session = session();
//verifique se o evento foi processado
if ($std->cStat != 128) {
//houve alguma falha e o evento não foi processado
//TRATAR
$session->setFlashdata('alert', 'erro_cancelamento_nfe');
} 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);
// Adiciona o XML Protocolado no banco de dados e altera o status
$this->nfe_model->save([
'id_nfe' => $id_nfe,
'xml_protocolado_cancelamento' => $xml,
'status' => 'Cancelada'
]);
$session->setFlashdata('alert', 'success_cancelamento_nfe');
} else {
//houve alguma falha no evento
//TRATAR
$session->setFlashdata('alert', 'erro_cancelamento_nfe');
}
}
// Retorna para a página de vendas com o alerta
return redirect()->to("/vendas/show/$id_venda");
} catch (\Exception $e) {
echo $e->getMessage();
}
}
esta dando este erro :
2021070209530932GO4.052128Lote de Evento Processado2GO4.052215Rejeição: Falha no schema XML5221073063961600017855001000000019115976013511011112021-07-02T09:53:10-03:00