Pular para o conteúdo principal

Upload de documentos


A chamada deve ser autenticada seguindo o padrão descrito na seção 1.3. Teste de Autenticação. Com as seguintes ressalvas:

  • O valor da variável md5_hash (md5_body para a v1 da nossa autenticação) enviada na assinatura do header deverá ser o MD5 do binário arquivo que esta sendo enviado
  • O binário do arquivo deve ser enviado no corpo da request como um FormData utilizando como chave a string "files" e no valor o arquivo a ser enviado. (Este conteúdo não é encriptado)
  • No body de resposta dessa chamada será enviado um GUID que é o identificador do documento (chamado de DOCUMENT_KEY daqui para frente) e deve ser armazenado para uso futuro.

Request

ENDPOINT
/upload
MÉTODO
POST
Response Body
{
"document_key": "cfbc8469-89ea-4a80-9f64-ba7b1566c68b",
"document_md5": "cd451103fa512frc98ce684d3896698c"
}
Atenção

Lembrar de salvar a document_key, chave essa necessária para a consulta do documento.

Exemplo de chamada

Exemplo para upload de uma imagem a partir de uma URL.


import jwt
import hashlib
import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder
import json
from datetime import datetime

BASE_URL = "https://api-auth.sandbox.qitech.app"
API_KEY = "4c268c0a-53ff-429b-92b6-47ef98a6d89a" # Esta chave é um exemplo, por favor utilize sua própria chave
CLIENT_PRIVATE_KEY = ''''
-----BEGIN EC PRIVATE KEY-----
MIHbAgEBBEHh1hIeOPE5XNNhn6bxRAmVswsPZ0wZCmzVvP8Tl/LZK9ofVmRVGzll
srU1uezJEyHKYdOHrE2p52xUj+pHzjJvb6AHBgUrgQQAI6GBiQOBhgAEAAofUz1J
hBSOyGHLsnV9Sz0DSWmhl7U+ljqbfa8PKVFWSV3w16I1v2zME5/UzUhHn1gWsjnv
7/ekcLLAQbvqMPNXAfjIhFXLAPzqbB9iCuVua1v0Vgy52rBemOWrJka/Ws2bnKR8
h1N1OxOYeYr6C2jqMygBLktKMAs+282CEiEb4bIv
-----END EC PRIVATE KEY-----
''' # Esta chave é um exemplo, por favor utilize sua própria chave

def get_document(url):
try:
response = requests.get(url)
return response.content
except Exception as error:
print("Error fetching document:", error)
raise

def upload_document(array_buffer):
endpoint = "/upload"
method = "POST"
timestamp = datetime.now().strftime("%Y-%m-%dT%H:%M:%S.%f")[:-3] + "Z"
md5_hash = hashlib.md5(array_buffer).hexdigest()

jwt_header = {
"typ": "JWT",
"alg": "ES512",
}

jwt_body = {
"payload_md5": md5_hash,
"timestamp": timestamp,
"method": method,
"uri": endpoint,
}

encoded_header_token = jwt.encode(jwt_body, CLIENT_PRIVATE_KEY, algorithm="ES512", headers=jwt_header)

signed_header = {
"Authorization": encoded_header_token,
"API-CLIENT-KEY": API_KEY,
"Content-Type": "multipart/form-data",
}

url = f"{BASE_URL}{endpoint}"
multipart_data = MultipartEncoder(
fields={'file': ('image.jpeg', array_buffer, 'image/jpeg')}
)
signed_header['Content-Type'] = multipart_data.content_type

try:
response = requests.post(url, headers=signed_header, data=multipart_data)
response_data = response.json()
document_key = response_data.get('document_key')
print(f'Response data is: {response_data} and document_key is: {document_key}')
return document_key
except Exception as error:
print('Error:', error)
raise


def main():
file_url = "{FILE_URL}"

document_buffer = get_document(file_url_front)

document_key = upload_document(document_buffer)

print("document_key is", document_key)

if __name__ == "__main__":
main()