Boa noite, terminei de implementar o cancelamento completo hoje, relativamente simples se seguir os seguintes passos:
1 - Pesquisar por NF-e emitidas e selecionar uma ou mais;
2 - Nessa pesquisa eu retorno os campos obrigatórios: chave e protocolo; também o número de série sequencial e único de cada NF-e (para depois utilizar na geração dos arquivos XML e PDF, os quais eu zipo como NFe_NUMERO-SERIE_cencelada.zip);
3 - Instancio a classe Tools para usar o método sefazCancela($chave, $justificativa, $protocolo);
4 - Instancio a classe $obj = Standarlize para usar o método toStd($retornoDoMetodoAcima);
5 - Faço a checagem in_array($obj->retEvento->infEvento->cStat, [155, 135, 101]);
6 - Se OK, executo os demais passos:
6.1 - Protocolar a autorização do cancelamento (retorno do sefazCancela) na requisição inicial feita para tal ($objTools->lastRequest);
6.2 - Salvar o XML da autorização do cancelamento na pasta arquivos-temp específica;
6.3 - Abro o XML da NF-e original que fora cancelada e marco como tal, usando a string desse XML aberto o retorno do sefazCancela como parâmetros do método Complements::cancelRegister($conteudoXmlOriginalNfe, $retSefaz);
6.4 - Gerar o PDF da DANFE de cancelamento utilizando o sped-da, com base no XML que acabei de gerar no retorno do método executado no passo anterior;
6.5 - Adicionar o XML e PDF no ZIP padrão NFe_numero-serie_cancelada.zip (é uma particularidade do nosso sistema, algo que veio "de cima" e eu fiz assim);
6.6 - Persistir no banco os dados da NF-e gerada (INSERT de um novo registro na tabela que armazeno as NF-e, com o mesmo número de série da NF-e original, porém status "C" - cancelada (outra particularidade do nosso sistema)).
Dessa forma não há necessidade de consultas futuras pois tenho tudo: informação persistida, DANFE da NF-e cancelada, XML que originou essa DANFE, XML da autorização criado e protocolado com o retorno do sefazCancela.