📤 Upload de Certificado Digital
Método: POST
Endpoint: https://api.emitix.com.br/certificate/upload
Descrição Geral
Essa rota é responsável por receber o arquivo de certificado digital (A1) no formato .pfx e convertê-lo em um hash seguro.
O hash resultante é utilizado nas demais rotas da API da Emitix (como emissão de NF-e, eventos, inutilização, etc.), substituindo o envio direto do arquivo em cada requisição.
⚠️ O envio deve ser feito como multipart/form-data, e o campo de envio deve ser nomeado como
file.
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
file | arquivo (.pfx) | ✅ | Certificado digital A1 no formato .pfx a ser convertido em hash. |
Autenticação
Essa rota não requer token de autenticação.
Apenas o envio correto do arquivo .pfx é necessário.
Exemplo de Requisição com cURL
curl -X POST https://api.emitix.com.br/certificate/upload \
-H "Content-Type: multipart/form-data" \
-F "file=@/caminho/para/seucertificado.pfx"
Exemplo de Implementação
- Node.js
- Python
- PHP
- C#
import axios from "axios";
import FormData from "form-data";
import fs from "fs";
async function uploadCertificado() {
const formData = new FormData();
formData.append("file", fs.createReadStream("C:/certificados/SEU_CERTIFICADO.pfx"));
try {
const response = await axios.post("https://api.emitix.com.br/certificate/upload", formData, {
headers: formData.getHeaders(),
});
console.log("Upload concluído com sucesso!");
console.log("Hash gerado:", response.data.hash);
} catch (error) {
console.error("Erro ao enviar certificado:", error.response?.data || error.message);
}
}
uploadCertificado();
import requests
url = "https://api.emitix.com.br/certificate/upload"
files = {"file": open("C:/certificados/SEU_CERTIFICADO.pfx", "rb")}
response = requests.post(url, files=files)
if response.status_code == 200:
print("Upload realizado com sucesso!")
print("Hash gerado:", response.json())
else:
print("Falha no upload:", response.text)
<?php
$url = "https://api.emitix.com.br/certificate/upload";
$filePath = "C:/certificados/SEU_CERTIFICADO.pfx";
$curl = curl_init();
$postFields = [
'file' => new CURLFile($filePath)
];
curl_setopt_array($curl, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $postFields,
]);
$response = curl_exec($curl);
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($httpCode === 200) {
echo "Upload realizado com sucesso!\n";
echo "Resposta: " . $response;
} else {
echo "Erro no upload. Código HTTP: " . $httpCode . "\n";
echo "Detalhes: " . $response;
}
curl_close($curl);
?>
using System;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var url = "https://api.emitix.com.br/certificate/upload";
var filePath = @"C:\certificados\SEU_CERTIFICADO.pfx";
using var client = new HttpClient();
using var form = new MultipartFormDataContent();
using var fileStream = File.OpenRead(filePath);
var fileContent = new StreamContent(fileStream);
fileContent.Headers.ContentType = new MediaTypeHeaderValue("application/x-pkcs12");
form.Add(fileContent, "file", Path.GetFileName(filePath));
try
{
var response = await client.PostAsync(url, form);
var responseBody = await response.Content.ReadAsStringAsync();
if (response.IsSuccessStatusCode)
{
Console.WriteLine("Upload realizado com sucesso!");
Console.WriteLine("Resposta: " + responseBody);
}
else
{
Console.WriteLine("Erro no upload: " + response.StatusCode);
Console.WriteLine("Detalhes: " + responseBody);
}
}
catch (Exception ex)
{
Console.WriteLine("Erro: " + ex.Message);
}
}
}
Boas Praticas
- Envie apenas certificados A1 no formato
.pfx. - Utilize o hash retornado em vez do certificado físico nas próximas requisições.
- O hash é único por certificado e deve ser renovado sempre que o certificado expirar.