Skip to content

Latest commit

 

History

History
178 lines (129 loc) · 5.87 KB

File metadata and controls

178 lines (129 loc) · 5.87 KB

signdocsbrasil-api (Java)

SDK oficial em Java para a API SignDocs Brasil: assinatura eletrônica e digital de documentos com ICP-Brasil, certificado digital, biometria, OTP e trilha de evidências.

Official Java SDK for the SignDocs Brasil e-signature API.

Requisitos

  • Java 11+
  • Dependência: Gson 2.11+

Instalação

Maven

<dependency>
    <groupId>io.github.signdocsbrasil</groupId>
    <artifactId>signdocsbrasil-api</artifactId>
    <version>1.2.0</version>
</dependency>

Gradle

implementation 'io.github.signdocsbrasil:signdocsbrasil-api:1.2.0'

Início Rápido

import com.signdocsbrasil.api.SignDocsBrasilClient;
import com.signdocsbrasil.api.models.*;

SignDocsBrasilClient client = SignDocsBrasilClient.builder()
    .clientId("seu_client_id")
    .clientSecret("seu_client_secret")
    .build();

CreateTransactionRequest request = new CreateTransactionRequest();
request.purpose = "DOCUMENT_SIGNATURE";
request.policy = new Policy("CLICK_ONLY");
request.signer = new Signer("João Silva", "joao@example.com", "user-001");
request.document = new CreateTransactionRequest.InlineDocument(pdfBase64, "contrato.pdf");

Transaction tx = client.transactions().create(request);
System.out.println(tx.transactionId + " " + tx.status);

Private Key JWT (ES256)

String keyPem = Files.readString(Path.of("./private-key.pem"));

SignDocsBrasilClient client = SignDocsBrasilClient.builder()
    .clientId("seu_client_id")
    .privateKey(keyPem)
    .kid("seu-key-id")
    .build();

Recursos Disponíveis

Recurso Métodos
client.transactions() create, list, get, cancel, finalize, listAutoPaginate
client.documents() upload, presign, confirm, download
client.steps() list, start, complete
client.signing() prepare, complete
client.evidence() get
client.verification() verify, downloads
client.users() enroll
client.webhooks() register, list, delete, test
client.signingSessions() create, getStatus, cancel, link, list, waitForCompletion
client.envelopes() create, get, addSession, combinedStamp
client.documentGroups() combinedStamp
client.health() check, history

Envelopes (Múltiplos Signatários)

CreateEnvelopeRequest envRequest = new CreateEnvelopeRequest();
envRequest.setSigningMode("PARALLEL");
envRequest.setTotalSigners(2);
envRequest.setDocumentContent(pdfBase64);
envRequest.setDocumentFilename("contrato.pdf");

Envelope envelope = client.envelopes().create(envRequest);

AddEnvelopeSessionRequest session1Req = new AddEnvelopeSessionRequest();
session1Req.setSignerName("João Silva");
session1Req.setSignerEmail("joao@example.com");
session1Req.setPolicyProfile("CLICK_ONLY");
session1Req.setSignerIndex(1);

EnvelopeSession session1 = client.envelopes().addSession(envelope.getEnvelopeId(), session1Req);

AddEnvelopeSessionRequest session2Req = new AddEnvelopeSessionRequest();
session2Req.setSignerName("Maria Santos");
session2Req.setSignerEmail("maria@example.com");
session2Req.setPolicyProfile("CLICK_ONLY");
session2Req.setSignerIndex(2);

EnvelopeSession session2 = client.envelopes().addSession(envelope.getEnvelopeId(), session2Req);

System.out.println(session1.getUrl() + " " + session2.getUrl());

Canais de entrega

A SignDocs entrega o link por e-mail, WhatsApp ou Telegram — escolha por signatário em deliverVia. WhatsApp e Telegram são habilitados sob demanda; fale com o time comercial. WhatsApp exige signer.phone em E.164; Telegram exige signer.cpf e só alcança quem já registrou o CPF no bot da SignDocs. O OTP pode ir por email, sms, whatsapp ou telegram (otpChannel), independentemente do canal do link. Cada envio por WhatsApp ou Telegram consome a cota de mensagens do tenant; esgotada, a API responde 429.

Signer signer = new Signer("João Silva", "user-001");
signer.setCpf("12345678901");
signer.setPhone("+5511999998888");

CreateSigningSessionRequest request = new CreateSigningSessionRequest();
request.setPurpose("DOCUMENT_SIGNATURE");
request.setPolicy(new Policy("CLICK_ONLY"));
request.setSigner(signer);
request.setDocument(new CreateSigningSessionRequest.SessionDocument(pdfBase64, "contrato.pdf"));
request.setDeliverVia(List.of("whatsapp"));

SigningSession session = client.signingSessions().create(request);
System.out.println(session.getWhatsappInviteSent()); // true quando a Meta aceitou a mensagem

Configuração Avançada

HTTP Client customizado

Injete um java.net.http.HttpClient customizado (ex: para proxying ou SSL customizado):

import java.net.http.HttpClient;

HttpClient httpClient = HttpClient.newBuilder()
    .connectTimeout(Duration.ofSeconds(10))
    .build();

SignDocsBrasilClient client = SignDocsBrasilClient.builder()
    .clientId("seu_client_id")
    .clientSecret("seu_client_secret")
    .httpClient(httpClient)
    .build();

Logging

O SDK aceita um java.util.logging.Logger. São logados apenas: método HTTP, path, status code e duração. Headers de autorização, corpos de request/response e tokens nunca são logados.

import java.util.logging.Logger;

Logger logger = Logger.getLogger("signdocs");

SignDocsBrasilClient client = SignDocsBrasilClient.builder()
    .clientId("seu_client_id")
    .clientSecret("seu_client_secret")
    .logger(logger)
    .build();

Para usar com SLF4J, configure a bridge jul-to-slf4j.

Timeout por requisição

Todas as operações possuem sobrecarga com Duration timeout, que sobrescreve o timeout padrão do client:

Transaction tx = client.transactions().get("tx_123", Duration.ofSeconds(5));

Documentação

Para guias completos de integração com exemplos passo-a-passo de todos os fluxos de assinatura, veja a documentação completa da API.