Olá tudo bem!
O cancelamento de NFS-e do profedor SoftPlan funcionou mas foi preciso fazer alguns ajustes porque alguns atributos conflitaram com o serviço de gerar token.
Coloquei os três pontos no mesmo tópico, não sei se era obrigatório criar um tópico para cada um.
Estava com problemas com a identificação do tomador na unit SoftPlan.GravarXML, era necessário remover os caracteres especiais e deixar apenas números.
NFSeNode.AppendChild(AddNode(tcStr, '#1', 'identificacaoTomador', 0, 20, 1, OnlyNumber(NFSe.Tomador.IdentificacaoTomador.Cnpj), ''));
O atributo ChaveAutoriz esta sendo utilizado para definir o numeroAEDF no xml de envio e de cancelamento também e conflitava com o serviço de gerar token.
Esse mesmo atributo foi utilizado para salvar o client_secret que é utilizado para gerar o token. Então para evitar conflitos eu fiz alterações no serviço de gerar token para utilizar o atributo Emitente.WSFraseSecr ao invés do Emitente.WSChaveAutoriz.
Então em procedure TACBrNFSeProviderSoftPlan.PrepararGerarToken(Response: TNFSeGerarTokenResponse) aonde define a URL foi alterado
de:
FpPath := FpPath + '&client_secret=' + Emitente.WSChaveAutoriz;
para:
FpPath := FpPath + '&client_secret=' + Emitente.WSFraseSecr;
E em procedure TACBrNFSeXWebserviceSoftPlan.SetHeaders(aHeaderReq: THTTPHeader) aonde define o cabeçalho do request foi alterado
de:
with TConfiguracoesNFSe(FPConfiguracoes).Geral do
Auth := Emitente.WSChaveAcesso + ':' + Emitente.WSChaveAutoriz;
para:
with TConfiguracoesNFSe(FPConfiguracoes).Geral do
Auth := Emitente.WSChaveAcesso + ':' + Emitente.WSFraseSecr;
O número da nota estava ficando errado quando gerava a nfse.
Estava copiando o numero do rps ao invés do numero da nota no xml de retorno. Então alterei para copiar da tag 'numeroSerie' ao invés da tag 'identificacao';
Então em procedure TACBrNFSeProviderSoftPlan.TratarRetornoEmitir(Response: TNFSeEmiteResponse) foi alterado
de:
with Response do
begin
...
NumeroNota := ObterConteudoTag(ANode.Childrens.FindAnyNs('identificacao'), tcStr);
end;
para:
with Response do
begin
...
NumeroNota := ObterConteudoTag(ANode.Childrens.FindAnyNs('numeroSerie'), tcStr);
end;
Muito Obrigado
SoftPlan.GravarXml.pas
SoftPlan.Provider.pas