Ir para conteúdo
  • Cadastre-se

Ronaldo.Bispo

Membros
  • Total de ítens

    36
  • Registro em

  • Última visita

Tudo que Ronaldo.Bispo postou

  1. Olá tudo bem! Continuando os testes na NFPS-e de Florianópolis (SoftPlan), ao tentar enviar para um tomador que não é contribuinte ou pessoa física no caso, ocorre a falha: O campo "inscricaoMunicipalTomador" tamanho deve estar entre 1 e 7 <?xml version="1.0" encoding="UTF-8"?> <xmlNfpse> <message>O campo "inscricaoMunicipalTomador" tamanho deve estar entre 1 e 7</message> </xmlNfpse> para solucionar o problema, em SoftPlan.GravarXml.pas foi alterado para verificar se a informação está em branco, caso esteja não é inserido a tag no XML. if (NFSe.Tomador.IdentificacaoTomador.InscricaoMunicipal <> '') then NFSeNode.AppendChild(AddNode(tcStr, '#1', 'inscricaoMunicipalTomador', 0, 30, 1, NFSe.Tomador.IdentificacaoTomador.InscricaoMunicipal, '')); Então estou encaminhando a unit com as alterações para analise. Muito Obrigado. SoftPlan.GravarXml.pas
  2. Olá tudo bem! Fiz algumas alterações para consultar NFS-e e baixar o XML que ainda não estavam funcionando. A consulta da NFS-e retorna uma JSON e não vem o XML . O XML deve ser baixado por outro endpoint. O ConsultarNFSe irá retornar o JSON com as informações da NFS-e, logo em seguida é usado o ConsultarDFe para baixar o xml. function TACBrNFSeXWebserviceSoftPlan.ConsultarDFe(ACabecalho, AMSG: string): string; #define a url de acordo com o tpConsulta tcPorCodigoVerificacao ou tcPorNumero procedure TACBrNFSeProviderSoftPlan.PrepararConsultaNFSe(Response: TNFSeConsultaNFSeResponse); override; #trata o retorno lendo as informações do JSON e executa o ConsultarDFe para baixar o xml procedure TACBrNFSeProviderSoftPlan.TratarRetornoConsultaNFSe(Response: TNFSeConsultaNFSeResponse); override; #prepara a url para baixar o xml da NFS-e procedure TACBrNFSeProviderSoftPlan.PrepararConsultarDFe(Response: TNFSeConsultarDFeResponse); override; #Lê e salva o xml que retornou procedure TACBrNFSeProviderSoftPlan.TratarRetornoConsultarDFe(Response: TNFSeConsultarDFeResponse); override; ... No LerXML, foi alterado para copiar a situação da NFS-e (cancelada/normal) da tag statusNFPSe do XML. Situacao := ObterConteudo(ANode.Childrens.FindAnyNs('statusNFPSe'), tcInt); ... Em ACBrNFSeXConversao.pas, também foi adicionado o tipo tcPorCodigoVerificacao no enumerador TtpConsulta. TtpConsulta = (tcPorNumero, tcPorFaixa, tcPorPeriodo, tcServicoPrestado, tcServicoTomado, tcPorCodigoVerificacao); SoftPlan.Provider.pas SoftPlan.LerXml.pas ACBrNFSeXConversao.pas
  3. 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
  4. Caso tenha alguma alteração no GerarNFSe, ConsultarNFSe e no CancelarNFSe, é necessário abrir outro tópico ou posso continuar postando nesse mesmo?
  5. Boa tarde Italo, Funcionou a parte de gerar token. No arquivoACBrNFSeXServicos.ini eu removi da url a parte '/autenticacao/oauth/token' que ficou no código, eu não tinha me ligado que dava pra usar a variável FpPath pra isso. Então agora nesse arquivo que eu anexei agora a URL ficou: ProGerarToken=https://nfps-e.pmf.sc.gov.br/api/v1 HomGerarToken=http://nfps-e-hml.pmf.sc.gov.br/api/v1 Em resumo o SoftPlan.Provider.pas ficou certinho, e só o arquivo ACBrNFSeXServicos.ini que precisa ser atualizado. Muito obrigado pela ajuda.
  6. Olá pessoal tudo bem? A cidade de Florianópolis utiliza o provedor SoftPlan. O provedor possuí uma API e é necessário fazer a autenticação e gerar o token antes de gerar, consultar e cancelar a NFSe. Então eu implementei os métodos de GerarToken nesse provedor antes de prosseguir com as outras alterações. Se alguém puder validar e gerar um commit delas, provavelmente eu vou continuar com alterações nos outros métodos também. Resumindo as principais alterações na unit SoftPlan.Provider.pas: Foi criado o método PrepararGerarToken aonde é formado a URL com os parametros necessarios que são username, password, client_id, client_secret. Para o client_id foi utilizado Emitente.WSChaveAcesso e para o client_secret foi utilizado Emitente.WSChaveAutoriz. client_id e client_secret tem que credenciar junto a prefeitura, então eles vão fornecer essas credenciais. Foi criado os método TratarRetornoGerarToken que trata os erros ou extrai o token retorno pelo JSON no response. Foi adicionado as seguintes urls no ini cidades: ProGerarToken=https://nfps-e.pmf.sc.gov.br/api/v1/autenticacao/oauth/token HomGerarToken=http://nfps-e-hml.pmf.sc.gov.br/api/v1/autenticacao/oauth/token Desde já agradeço pelo auxilio. Estou a disposição pra qualquer duvidas também. SoftPlan.Provider.pas ACBrNFSeXServicos.ini
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...