-
Contagem de Conteúdo
68 -
Ingressou
-
Última visita
-
Dias Ganhos
6
Tipo de Conteúdo
Perfis
Fóruns
Blogs
Calendário
Downloads
Tudo que foi postado por Kleverson Cruz
-
Olá. A forma mais simples de gerar um link publico é hospedar o seu HTML em um servidor, há muitas alternativas gratuitas, mas minha favorita é o GitHub Pages.
- 3 respostas
-
- 1
-
- html
- projeto web
-
(e 1 mais)
Todas as Tags
-
Oi pessoal, tudo bem? Recentemente, tive a oportunidade de participar do quadro "Papo de Desenvolvedor" no canal da Casa do Desenvolvedor no YouTube. Foi uma conversa introdutória sobre a linguagem de programação C#, e também exploramos se ainda é válido começar a estudar essa linguagem. 🤓 Durante o bate-papo, compartilhei minha perspectiva sobre o uso do C#, tanto na criação de interfaces quanto nos sistemas e projetos que estou desenvolvendo atualmente. Ficarei feliz se vocês quiserem conferir mais detalhes sobre nossa conversa: Estou à disposição para possíveis dúvidas que possam surgir!
-
- 1
-
- desenvolvimento
- dicas
-
(e 2 mais)
Todas as Tags
-
Opa Fernando, beleza? Vou tentar passar a minha visão sobre as suas dúvidas: Tem bastante conteúdo para criação e publicação de apps nas lojas de aplicativos. Com um pouco de experiência, uma boa ideia e MUITO tempo é possível criar uma aplicação e publica-la. O salário vai depender muito da experiência que você possui. Se você possui uma longa experiência com uma tecnologia poderá negociar salários maiores. Manter uma carreira dentro de uma empresa é o método mais consistente de possuir uma fonte de renda, mas nada impede que desenvolvedores atuem como freelancers em outros projetos . Geralmente grandes aplicações são desenvolvidas e mantidas por dezenas de pessoas, então dificilmente um único desenvolvedor conseguirá dar conta de tudo, ainda mais considerando que há muitas áreas diferentes, como front-end, back-end, sre, dba e etc .
- 2 respostas
-
- 5
-
- criação de aplicativos
- programação
-
(e 2 mais)
Todas as Tags
-
Opa, tudo bem? Utilizei o Azure Pipelines apenas com pipelines NodeJS, mas acredito que não seja muito diferente com Wordpress. Vamo lá: 1. Configure o repositório. Vá para o Azure DevOps. Selecione seu projeto ou crie um novo. 2. Configurar o arquivo azure-pipelines.yml No diretório raiz do seu projeto, crie um arquivo chamado "azure-pipelines.yml". Este arquivo vai ser preenchido com as instruções da sua pipeline. trigger: - master # Indica que a pipeline será disparada sempre que houver commit na branch master pool: vmImage: 'ubuntu-latest' steps: - task: NodeTool@0 inputs: versionSpec: '16.x' displayName: 'Install Node.js' - script: | npm install npm build displayName: 'Install and Build' # Esse é um exemplo básico de pipeline que utiliza NodeJS. # Modifique e adicione mais etapas conforme necessário, como build da aplicação, execução de teste, cópia de arquivos e etc. Na documentação do azure devops tem mais alguns modelos de yaml que podem ser úteis. 3: Commit e Push Com o repositório clonado localmente adicione o código do seu projeto WordPress e faça push para o Azure Repos. 4: Ative a Pipeline No Azure DevOps, vá para "Pipelines" no menu e clique em "New Pipeline" e escolha o repositório onde está o azure-pipelines.yml. Por fim clique em "Run" para executar a pipeline. A construção do arquivo yaml vai depender de como sua aplicação está construída e hospedada. Por exemplo, se os arquivos do site precisam disponíveis de forma estática num servidor web, você pode criar uma etapa na pipeline que faça uma conexão FTP com o servidor e copie todos os arquivos do Azure Repos. Espero ter ajudado de alguma forma 😉
-
Olá. Dei uma olhada no JS que já tem e parece que está bem definido o funcionamento no tabuleiro 3X3. Para conseguir um 4X4 basta modificar os array 'winPatterns' com os padrões corretos de vitória no 4x4, aumentar o tamanho do array 'gameBoard' e por fim ajustar o HTML com os novos elementos. O código parece bem estruturado então deve conseguir incrementar a lógica sem muitos problemas.
- 4 respostas
-
- 1
-
- jogo da velha
- javascript
-
(e 1 mais)
Todas as Tags
-
IntelliJ: Como obter a versão permanente após os 30 dias?
Kleverson Cruz respondeu à lutz no tópico em Java
Olá As versões comerciais do Intellij possuem o período trial de 30 dias, porém tem disponível a versão community totalmente gratuita: https://www.jetbrains.com/idea/download/?section=windows -
Pesquisando imagem de produtos automaticamente na internet
Kleverson Cruz respondeu à joao vitor delaia no tópico em C#
Olá. O Google fornece uma API para pesquisas customizadas onde é possível obter imagens: https://developers.google.com/custom-search/v1/overview?hl=pt-br Em C# você pode consumir da seguinte forma: usign var client = new HttpClient(); var url = "https://customsearch.googleapis.com/customsearch/v1?cx=[IdMecanismoPesquisa]&key=[API_KEY]&searchType=image&q=Coca Cola&num=1"; var request = new HttpRequestMessage(HttpMethod.Get, url); request.Headers.Add("Accept", "application/json"); var response = await client.SendAsync(request); response.EnsureSuccessStatusCode(); Console.WriteLine(await response.Content.ReadAsStringAsync()); A partir dessa requisição será obtido a resposta: ... "items": [ { "kind": "customsearch#result", "title": "Coca-Cola - Wikipedia", "htmlTitle": "<b>Coca</b>-<b>Cola</b> - Wikipedia", "link": "https://upload.wikimedia.org/wikipedia/commons/thumb/e/e8/15-09-26-RalfR-WLC-0098_-_Coca-Cola_glass_bottle_%28Germany%29.jpg/1200px-15-09-26-RalfR-WLC-0098_-_Coca-Cola_glass_bottle_%28Germany%29.jpg", "displayLink": "en.wikipedia.org", "snippet": "Coca-Cola - Wikipedia", "htmlSnippet": "<b>Coca</b>-<b>Cola</b> - Wikipedia", "mime": "image/jpeg", "fileFormat": "image/jpeg", "image": { "contextLink": "https://en.wikipedia.org/wiki/Coca-Cola", "height": 2128, "width": 1200, "byteSize": 283763, "thumbnailLink": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQJyEDVQYqZINpelmoCLYQPCr6MQXd1m9-6goF80ivqcAhL-84dXFEQwYY&s", "thumbnailHeight": 150, "thumbnailWidth": 85 } } ] ... A documentação descreve os passos para obter o token de acesso e id do mecanismo de pesquisa programável. Importante notar que há uma limitação de uso gratuito de 100 consultas por dia. Uma outra alternativa é utilizar o pacote HtmlAgilityPack para realizar a extração das imagens a partir do HTML das páginas do Google, mas isso vai exigir um bom conhecimento em técnicas de webscraping. -
Imagem de fundo não aparece no Header
Kleverson Cruz respondeu à robert no tópico em 🤔❓ Dúvidas de Desenvolvimento
Olá O estilo parece estar definido corretamente, é possível que você não esteja aplicando ao elemento no HTML. Em index.html verifique se foi informado: <header class="banner">- 1 resposta
-
- 2
-
Olá Davi, tudo bom? O problema no seu código é o uso da função Array.of. Para resolver seu problema você pode chamar a Array.from diretamente: function getArrayWithLength(string) { return Array.from(string); } console.log(getArrayWithLength("Hello JS Arrays")); //Saida: //[ // 'H', 'e', 'l', 'l', // 'o', ' ', 'J', 'S', // ' ', 'A', 'r', 'r', // 'a', 'y', 's' //]
- 1 resposta
-
- 1
-
- javascript
- array
-
(e 2 mais)
Todas as Tags
-
Como acessar variável contendo informações em json
Kleverson Cruz respondeu à porter no tópico em C#
Opa @porter, beleza? Ao executar JsonConvert.DeserializeObject, ele retornará um objeto genérico (object). Isso significa que você não terá um tipo específico para trabalhar e acessar os dados do JSON. Para conseguir acessar os valores você pode criar uma classe equivalente ao JSON e especificar o tipo de objeto para o qual deseja desserializar informando o argumento no método DeserializeObject: NotaFiscal notaFiscal = JsonConvert.DeserializeObject<NotaFiscal>(content); string idDaNota = notaFiscal.id; Outra opção é usar os tipos dynamic(não tão recomendado, pois não há verificação de tipo rs): dynamic jsonData = JsonConvert.DeserializeObject(content); string status_processamento = jsonData.retorno.status_processamento; -
Se a intenção é transformar a imagem retangular em um quadrado, você pode usar a propriedade overflow: hidden para esconder as partes excedentes da imagem e ajustar o tamanho da imagem usando CSS. <div class="quadrado"> <img src="sua-imagem.jpg" alt="Imagem Retangular"> </div> .quadrado { width: 200px; /* Largura desejada do quadrado */ height: 200px; /* Altura desejada do quadrado */ overflow: hidden; /* Para cortar as partes excedentes da imagem */ } .quadrado img { width: 100%; height: 100%; object-fit: cover; /* Ajusta a imagem para preencher o quadrado */ }
-
Opa @robert, beleza? Consegue postar o trecho do código? Pela imagem não é possível identificar o problema.
- 1 resposta
-
- javascript
- codigo
-
(e 2 mais)
Todas as Tags
-
Opa @Killberly, beleza? Sim, você pode criar um contador dentro de uma função, porém você deve criar a variável fora do loop. function exemplo() { var contador = 0; for (var c = 1; c <= 10; c++) { contador = c; } return contador; } var resultado = exemplo(); console.log(resultado);
- 1 resposta
-
- 1
-
- javascript
- function
-
(e 1 mais)
Todas as Tags
-
Livro Ata em PHP: Como Padronizar e Preencher Campos
Kleverson Cruz respondeu à jcvilanova no tópico em PHP
Opa @jcvilanova, beleza? Não tenho experiência com PHP, mas posso ajudar com esse problema de forma mais conceitual rs. Em C# eu tenho o Razor Pages onde é possível criar uma página HTML e inserir informações compiladas. Por exemplo: <p>...@DateTime.Now nesta cidade de...</p> Então seria possível criar uma pagina HTML com o texto fixo, informações dinâmicas, exportar para PDF e realizar a impressão. Isso também pode ser feito usando apenas HTML e JS, mas acredito que você possa seguir um caminho parecido em PHP. -
Python rodando 24 horas no servidor
Kleverson Cruz respondeu à William Rodrigues no tópico em Python
Não tenho muita experiência com os serviços da hostinger, mas dando uma olhada na página de hospedagem compartilhada parece que só é possível hospedar sites. Pra manter uma aplicação aplicação em execução você precisa ter um servidor e para isso eles oferecem uma solução de VPC que pode resolver seu problema. -
Python rodando 24 horas no servidor
Kleverson Cruz respondeu à William Rodrigues no tópico em Python
Geralmente, as hospedagens gratuitas impõem um limite de tempo que uma aplicação pode ficar em execução. Uma alternativa que pode ser interessante é utilizar sua função em uma solução serverless, como AWS Lambda ou Azure Functions. Nesse tipo de serviço, é possível configurar para que sua aplicação seja executada a cada 30 segundos sem a necessidade de manter e custear um servidor 24 horas. -
Para obter apenas o valor da primeira propriedade do objeto JSON sem a chave, você pode acessá-lo diretamente pelo índice: document.write(passedArray[1][0]);
- 2 respostas
-
- javascript
- array
-
(e 3 mais)
Todas as Tags
-
O erro 404 indica que o endereço que está tentando acessar não existe no servidor. Em qual momento você está pegando o erro?
-
Opa, tudo bem? Ao abrir HTML no navegador é possível utilizar as ferramentas de desenvolvimento(F12) para analisar erros. Quando tentei executar a função somar obtive o erro: "Uncaught ReferenceError: n2 is not defined" Ou seja, você não definiu a variável n2 antes de usa-la. var n1 = Number(tn1.value) var n1 = Number(tn2.value) //Atribuindo valor para n1, mas deveria ser n2 var s = n1 + n2 Atribuir valor corretamente na variável n2 deve deixar seu código funcional var n1 = Number(tn1.value) var n2 = Number(tn2.value) var s = n1 + n2
-
Cálculo entre inputs vindo do banco de dados jQuery
Kleverson Cruz respondeu à lgbruno no tópico em Outras Linguagens
Pode ser que haja algum erro na formatação dos números. Mas apenas analisando o código não consegui identificar um erro. O valor obtido em row["preco_pedido"] é um número valido? É possível que o DB esteja retornando um valor diferente do esperado.- 1 resposta
-
- jquery
- javascript
-
(e 1 mais)
Todas as Tags
-
Buscar Endereço por CEP em um campo de endereço dinâmico via Javascript
Kleverson Cruz respondeu à lgbruno no tópico em JavaScript
O principal erro em seu código está na função meu_callback onde será obtido os elementos que tenham exatamente os ids: rua, bairro, cidade, uf. Ou seja, sempre será utilizado os elementos definidos no HTML. Acredito que essa seja a melhor forma de fazer seu código funcional: Modifiquei o HTML e defini o id no grupo_endereco e adicionei o atributo "data-grupoid" no input cep. <!DOCTYPE html> <head> <title>Teste</title> <script src="script.js"></script> </head> <body> <div id="endereco"> <div class="grupo_endereco" id="campo1"> <button type="button" onclick="adicionarCampo()">+</button> <br><br> <input type="text" name="cep[]" id="cep" data-grupoid="campo1" maxlength="9" placeholder="CEP" onblur="pesquisacep(this);" onkeypress="$(this).mask('#####-###');"><br> <input type="text" name="rua[]" id="rua" placeholder="Rua"> <input type="text" name="numero[]" id="numero" placeholder="n"> <input type="text" name="complemento[]" id="complemento" placeholder="Complemento"> <input type="text" name="bairro[]" id="bairro" placeholder="Bairro"> <input type="text" name="cidade[]" id="cidade" placeholder="Cidade"> <input type="text" name="uf[]" id="uf" placeholder="UF"> </div> </div> </body> </html> Criei uma variável global para definir qual é o grupo de endereço que está sendo modificado. Essa variável será utilizada nas outras funções para manipular os elementos. Também adicionei o atributo data-grupoid e função onBlur nos elementos gerados dinamicamente. var controleCampo = 1 var grupoAtual function adicionarCampo() { controleCampo++ // console.log(controleCampo); document .getElementById('endereco') .insertAdjacentHTML( 'beforeend', '<br><div class="grupo_endereco" id="campo' + controleCampo + '"><button type="button" id="' + controleCampo + '" onclick="removerCampo(' + controleCampo + ')"> - </button><br><br><input type="text" name="cep[]" id="cep" data-grupoid="campo' + controleCampo + '" maxlength="9" placeholder="CEP" onblur="pesquisacep(this);"><br><input type="text" name="rua[]" id="rua" placeholder="Rua"><input type="text" name="numero[]" id="numero" placeholder="n"><input type="text" name="complemento[]" id="complemento" placeholder="Complemento"><input type="text" name="bairro[]" id="bairro" placeholder="Bairro"><input type="text" name="cidade[]" id="cidade" placeholder="Cidade"><input type="text" name="uf[]" id="uf" placeholder="UF"></div>' ) } function removerCampo(idCampo) { document.getElementById('campo' + idCampo).remove() } function limpa_formulario_cep() { grupoAtual.querySelector('#rua').value = '' grupoAtual.querySelector('#bairro').value = '' grupoAtual.querySelector('#cidade').value = '' grupoAtual.querySelector('#uf').value = '' } function meu_callback(conteudo) { if (!('erro' in conteudo)) { grupoAtual.querySelector('#rua').value = conteudo.logradouro; grupoAtual.querySelector('#bairro').value = conteudo.bairro grupoAtual.querySelector('#cidade').value = conteudo.localidade grupoAtual.querySelector('#uf').value = conteudo.uf } else { limpa_formulario_cep() alert('CEP não encontrado.') } } function pesquisacep(input) { // Obtém o ID definido no atributo data-grupoid. var grupoId = input.getAttribute('data-grupoid') // Define a variável global grupoAtual com o elemento do grupo. grupoAtual = document.getElementById(grupoId) var valor = input.value var cep = valor.replace(/\D/g, '') if (cep != '') { var validacep = /^[0-9]{8}$/ if (validacep.test(cep)) { grupoAtual.querySelector('#rua').value = '...' grupoAtual.querySelector('#bairro').value = '...' grupoAtual.querySelector('#cidade').value = '...' grupoAtual.querySelector('#uf').value = '...' var script = document.createElement('script') script.src = 'https://viacep.com.br/ws/'+ cep + '/json/?callback=meu_callback' document.body.appendChild(script) } else { limpa_formulario_cep() alert('Formato de CEP inválido.') } } else { limpa_formulario_cep() } } Não ficou muito bonito, mas está funcional hehe- 1 resposta
-
- javascript
- jquery
-
(e 2 mais)
Todas as Tags
-
H3 herdar características de estilo de H2
Kleverson Cruz respondeu à Wmark77 no tópico em HTML & CSS
Você pode definir uma classe CSS para ser utilizada por múltiplos elementos da seguinte forma: h2, h3 { color: blueviolet; } Outra alternativa é criar um seletor para o estilo e decorar seus elementos H2 e H3 .titulo { color: red; } -
A lógica parece estar correta, talvez seja um erro nesse aplicativo. Em outro compilador também obtém false?
- 1 resposta
-
- javascript
- codigo
-
(e 1 mais)
Todas as Tags
-
Ambos são notebooks muito semelhantes, mas eu pessoalmente iria no Asus e se estiver dentro do orçamento vale a pela pegar a versão 16GB dele.
-
Como funciona na prática a emissão de NFS-e com o PlugNotas?
Kleverson Cruz postou um tópico em PlugNotas
Oi, pessoal! Tudo bem? Hoje gostaria de compartilhar com vocês um guia sobre como utilizar a API PlugNotas para emitir Notas Fiscais de Serviço Eletrônicas (NFS-e) de forma prática. Com um único JSON é possível emitir notas de forma simplificada, independentemente do padrão de webservice ou da cidade de prestação. Acesso à API: Antes de iniciar o processo, verifique se você possui a chave de API necessária para autenticar suas requisições. Para este guia, vamos utilizar o ambiente Sandbox da API PlugNotas, que oferece respostas fixas e permite testes sem a necessidade de informar um prestador devidamente credenciado. Endpoint utilizado será: https://api.sandbox.plugnotas.com.br/ Informe o token 2da392a6-79d2-4304-a8b7-959572c7e44d no cabeçalho x-api-key como autenticação para todas as suas requisições. Cabeçalho x-api-key preenchido com token de sandbox Caso esteja utilizando o ambiente de produção, o endpoint será: https://api.plugnotas.com.br/ Para obter o token de produção, siga os passos descritos na documentação: Obtendo o Token Certifique-se de ajustar o endpoint e o token de acordo com o ambiente que você está utilizando. Agora, vamos prosseguir com os passos para emitir uma NFS-e. Cadastrar certificado: O primeiro passo é cadastrar um certificado digital. Para isso, utilize a rota POST /certificado e inclua na requisição um form-data contendo o arquivo do certificado e a respectiva senha. A obrigatoriedade do certificado pode variar de acordo com cada prefeitura ou webservice. Caso queira verificar se uma cidade utiliza certificado, você pode utilizar a rota GET /nfse/cidades. O arquivo do certificado deve ser informado em corpo no formato form-data. Cadastrar prestador: Agora vamos realizar o cadastro do prestador enviando uma requisição POST para a rota /empresa. No corpo da requisição, além dos dados básicos da empresa, inclua o campo "nfse" com as configurações de número de RPS (Recibo Provisório de Serviços), ambiente de emissão e autenticação da prefeitura. Certifique-se também de incluir o campo "certificado" com o ID obtido no passo anterior, para vincular o certificado ao cadastro do prestador. { "cpfCnpj": "71073473000167", "inscricaoMunicipal": "8214100099", "simplesNacional": true, "regimeTributario": 1, "razaoSocial": "Tecnospeed S/A", "certificado": "64b58c5405f34cdce812efc1", "endereco": { "bairro": "Zona 01", "cep": "87020025", "codigoCidade": "4115200", "estado": "PR", "logradouro": "Duque de Caxias", "numero": "882", "tipoLogradouro": "Avenida", "codigoPais": "1058", "complemento": "17 andar", "descricaoCidade": "Maringá", "descricaoPais": "Brasil", "tipoBairro": "Zona" }, "nfse": { "ativo": true, "tipoContrato": 0, "config": { "producao": true, "rps": { "lote": 1, "numeracao": [ { "numero": 1, "serie": "RPS" } ] }, "prefeitura": { "login": "teste", "senha": "teste123" } } } } Emitir NFS-e Após o cadastro do prestador, você estará pronto para emitir uma NFS-e. Para isso, envie uma requisição POST para a rota /nfse, incluindo um JSON com as informações da nota de serviço. Vamos destacar algumas das propriedades obrigatórias que compõem esse JSON Prestador: Deve ser informado o CPF/CNPJ e outros dados relevantes do prestador de serviço, conforme necessário. Por padrão serão utilizados os dados do cadastro realizado previamente. Tomador: Nesse campo, devem ser fornecidos os dados do tomador do serviço, como CPF/CNPJ, razão social, endereço e e-mail. Serviço: Aqui, serão informados os detalhes do serviço prestado, como código, discriminação, valor a ser cobrado e impostos aplicáveis. Com os campos devidamente apresentados podemos montar o JSON: [ { "prestador": { "cpfCnpj": "82186217000100" }, "tomador": { "cpfCnpj": "99999999999999", "razaoSocial": "Empresa de Teste LTDA", "email": "teste@plugnotas.com.br", "endereco": { "descricaoCidade": "Maringa", "cep": "87020100", "tipoLogradouro": "Rua", "logradouro": "Barao do rio branco", "tipoBairro": "Centro", "codigoCidade": "4115200", "complemento": "sala 01", "estado": "PR", "numero": "1001", "bairro": "Centro" } }, "servico": [ { "codigo": "14.10", "codigoTributacao": "14.10", "discriminacao": "Descrição dos serviços prestados", "cnae": "7490104", "iss": { "tipoTributacao": 7, "exigibilidade": 1, "aliquota": 3 }, "valor": { "servico": 1 } } ] } ] A emissão da NFS-e é um processo assíncrono. Você receberá um protocolo e um ID que serão utilizados para consultar a situação da nota posteriormente. Se não houver erros de validação em sua requisição, você receberá a seguinte resposta: { "documents": [ { "id": "64b5445a47188375a92f6414" } ], "message": "Nota(as) em processamento", "protocol": "22535d12-b458-4b12-b5d2-37c46f1f01ae" } Consultar NFS-e Após a emissão é necessário enviar uma requisição GET para /nfse/consultar/{idouprotocolo} a fim de verificar a situação da nota emitida. Essa consulta permitirá obter informações sobre o status atual da NFS-e. Durante o processo de consulta, você pode encontrar os seguintes status: PROCESSANDO: Indica que a nota está em processamento. Nesse caso, é necessário realizar consultas subsequentes até obter a situação final da nota. REJEITADO: Caso ocorra algum erro durante a emissão da nota, você receberá esse status juntamente com o motivo da rejeição. Analise a mensagem de erro, ajuste os dados do JSON de envio e tente a emissão novamente. CONCLUÍDO: Indica que a NFS-e foi devidamente autorizada. No ambiente Sandbox, todas as emissões resultarão em sucesso. Ao consultar uma nota concluída, você receberá os seguintes dados: [ { "id": "64b5445a47188375a92f6414", "emissao": "17/07/2023", "situacao": "CONCLUIDO", "prestador": "82186217000100", "tomador": "99999999999999", "valorServico": 1, "numeroNfse": "22143", "serie": "LAL", "lote": 290008, "numero": 7, "codigoVerificacao": "5278FE6A7", "autorizacao": "17/07/2023", "mensagem": "RPS Autorizada com sucesso", "pdf": "https://api.sandbox.plugnotas.com.br/nfse/pdf/64b5445a47188375a92f6414", "xml": "https://api.sandbox.plugnotas.com.br/nfse/xml/64b5445a47188375a92f6414" } ] Exportar NFS-e Após consultar a NFS-e e obter a situação "CONCLUÍDO", você pode exportar a nota nos formatos PDF ou XML. Para isso, basta realizar as seguintes operações: Para exportar o PDF da nota, faça uma requisição GET para /nfse/pdf/{idNota}. Isso permitirá que você obtenha o arquivo PDF contendo os dados da NFS-e. Para exportar o XML da nota, faça uma requisição GET para /nfse/xml/{idNota}. Isso permitirá que você obtenha o arquivo XML gerado pela prefeitura. PDF obtido ao exportar. E assim concluímos o guia de utilização da API PlugNotas para emissão de NFS-e. Espero que este guia tenha sido útil e fornecido todas as informações necessárias para você começar a utilizar a API em seus projetos. Caso queira explorar mais detalhes, exemplos e informações adicionais, recomendo que consulte a documentação completa, disponível no seguinte link: Documentação API PlugNotas