SignDocs Brasil
O SignDocs Brasil é o plugin oficial do WordPress para assinaturas eletrônicas com validade jurídica no Brasil. Incorpore fluxos de assinatura em qualquer página com um shortcode ou bloco Gutenberg, envie envelopes multi-signatário (sequenciais ou paralelos), verifique evidências assinadas direto no painel do WordPress e acompanhe tudo por um log de auditoria com exportação para CSV.
Construído sobre o SDK PHP oficial do SignDocs Brasil (signdocs-brasil/signdocs-brasil-php), o plugin aproveita cache de token OAuth compartilhado entre os workers do PHP-FPM, idempotência determinística, rotação de segredo de webhook com janela de tolerância e observabilidade via cabeçalhos de resposta RateLimit-* / Deprecation / Sunset.
O plugin é voltado ao mercado brasileiro (conformidade com a MP 2.200-2/2001, ICP-Brasil, NT65/ITI para o crédito consignado do INSS), mas funciona para qualquer fluxo de assinatura no mundo. A interface de assinatura é hospedada em sign.signdocs.com.br, isolada da sua instalação WordPress — assim, um site WordPress comprometido não consegue forjar assinaturas.
Por que SignDocs Brasil?
- Conformidade brasileira — MP 2.200-2/2001, pacote de evidências PKCS#7/CMS, suporte a certificado ICP-Brasil A1/A3, fluxo NT65/ITI para crédito consignado do INSS
- Sete políticas de verificação — CLICK_ONLY, CLICK_PLUS_OTP, BIOMETRIC, BIOMETRIC_PLUS_OTP, DIGITAL_CERTIFICATE, BIOMETRIC_SERPRO, BIOMETRIC_SERPRO_AUTO_FALLBACK
- Envelopes multi-signatário — sequenciais (cada signatário aguarda o anterior) ou paralelos (todos assinam ao mesmo tempo), com download consolidado em
.p7sou PDF combinado ao final - Dois modos de autenticação — OAuth2
client_credentials(simples) ou Private Key JWT ES256 (para clientes regulados que não podem armazenar segredos compartilhados) - Integração WooCommerce — envia o link de assinatura por email automaticamente após a conclusão do pedido
- Trilha de auditoria completa — toda chamada de API e toda entrega de webhook são registradas em uma tabela dedicada, com visão filtrável (WP_List_Table) e exportação para CSV
- GDPR / LGPD — handlers de exportação e de eliminação de dados registrados no painel de privacidade do WordPress
- Observabilidade — cabeçalhos
RateLimit-*capturados para o widget do painel; avisos de descontinuação (RFC 8594Deprecation/Sunset) aparecem como avisos no admin - Zero código — configure tudo pelo painel do WordPress
Funcionalidades
- Shortcode
[signdocs]e bloco Gutenberg para incorporar o botão de assinatura em qualquer página ou post - Custom post type
signdocs_envelopepara fluxos multi-signatário com repetidor de signatários - Página administrativa “Verificar Documento” — cole um ID de evidência ou de envelope e inspecione identidades dos signatários, CNPJ do tenant e downloads consolidados
- Log de auditoria com filtros por nível, tipo de evento e intervalo de datas, além de exportação em CSV por streaming (via
php://output, segura para exportações de vários GB) - Rotação de segredo de webhook com janela de tolerância de 7 dias — ambos os segredos (atual + anterior) são aceitos durante a rotação
- Cobertura dos 17 tipos de evento de webhook, incluindo os eventos NT65 (
STEP.PURPOSE_DISCLOSURE_SENT,TRANSACTION.DEADLINE_APPROACHING) - Capacidades personalizadas (
signdocs_manage,signdocs_send,signdocs_verify,signdocs_view_logs) concedidas automaticamente a administrador / editor / autor - Comandos WP-CLI (
wp signdocs health | send | status | webhook-test | log-tail) para automação via shell - Integração WooCommerce — aba de produto “Assinatura SignDocs”, email automático com o link de assinatura e notas de pedido após a conclusão
- Popup, redirecionamento ou overlay — escolha o modo de incorporação que combina com o seu tema
- Assinatura anônima opcional, com limitação de taxa (rate limiting)
- Credenciais criptografadas com AES-256-CBC em
wp_options - Receptor de webhook reforçado: trava de desvio de timestamp (≤300s), verificação HMAC-SHA256 com comparação em tempo constante, deduplicação contra replay via
X-SignDocs-Webhook-Id - Cache de token OAuth compartilhado via transients do WordPress (
WpTransientTokenCacheimplementa aTokenCacheInterfacedo SDK) — um único token reaproveitado por todos os workers do PHP-FPM - Chaves de idempotência determinísticas em toda chamada que cria recursos — retentativas via AJAX nunca criam sessões duplicadas
- Observador de descontinuação (RFC 8594) que exibe um aviso no admin quando a API sinaliza a remoção de um endpoint
- Traduzível: Inglês, Português (Brasil), Espanhol
Casos de uso
- Escritórios de advocacia — procurações, contratos, termos e envelopes multi-parte
- Imobiliárias — contratos de locação e de compra/venda assinados por inquilino, proprietário e fiador (envelope sequencial)
- E-commerce — termos de serviço, contratos de fornecedor, NDAs pós-compra
- RH e departamento pessoal — contratos de trabalho, termos de confidencialidade, documentação de onboarding
- Educação — fichas de matrícula e autorização dos responsáveis (responsáveis + aluno em envelope paralelo)
- SaaS — termos de uso e contratos de licença no onboarding
- Crédito consignado do INSS (específico do Brasil) — fluxo NT65 com verificação biométrica SERPRO e notificação de averbação da finalidade
- Bancos e instituições financeiras — o Private Key JWT permite assinar sem armazenar um segredo compartilhado no banco de dados
Como funciona
- Configure as credenciais da API SignDocs Brasil no painel do WordPress (Client ID + Secret, ou Chave Privada + Key ID)
- Adicione um shortcode, um bloco Gutenberg ou crie um envelope multi-signatário pelo admin
- O signatário clica em “Assinar Documento” e é redirecionado ao domínio seguro
sign.signdocs.com.br(a assinatura nunca acontece dentro do seu site WordPress — isso isola a sua instalação de qualquer comprometimento) - O signatário conclui o fluxo conforme a política configurada (aceite, OTP, biometria, certificado digital)
- Os webhooks atualizam o status no painel do WordPress em tempo real; o pacote de evidências
.p7mfica disponível para download e verificação
Links
Uso
Shortcode
Adicione em qualquer página ou post:
[signdocs document_id="123" policy="CLICK_ONLY" button_text="Sign Contract"]
Com formulário de nome / email / CPF:
[signdocs document_id="123" show_form="true" policy="CLICK_PLUS_OTP"]
Atributos disponíveis:
document_id(obrigatório) — ID do anexo PDF na biblioteca de mídiapolicy— uma de:CLICK_ONLY,CLICK_PLUS_OTP,BIOMETRIC,BIOMETRIC_PLUS_OTP,DIGITAL_CERTIFICATE,BIOMETRIC_SERPRO,BIOMETRIC_SERPRO_AUTO_FALLBACKlocale— idioma:pt-BR,en,esmode— modo de incorporação:redirect(padrão),popup,overlaybutton_text— rótulo do botão (padrão: “Assinar Documento”)show_form—"true"para exibir campos de nome / email / CPF / CNPJreturn_url— URL de redirecionamento após a assinaturaclass— classe CSS adicional para o botão
Bloco Gutenberg
- No editor de blocos, clique em “+” para adicionar um bloco
- Pesquise por “SignDocs” ou “Assinatura”
- Selecione um PDF na barra lateral à direita
- Configure a política, o idioma e o modo
- Publique a página
Envelopes multi-signatário
Para contratos com mais de um signatário (por exemplo, proprietário + inquilino + fiador), use o menu Envelopes:
- Painel > Assinaturas > Envelopes > Adicionar Novo
- Selecione o modo de assinatura:
- SEQUENTIAL — cada signatário assina em ordem; o próximo só recebe o link quando o anterior conclui
- PARALLEL — todos os signatários podem assinar simultaneamente, em qualquer ordem
- Adicione os signatários (nome + email + CPF ou CNPJ + política opcional por signatário)
- Anexe o PDF e publique
- Cada signatário recebe um email com o link individual; o admin vê o status do envelope atualizar conforme cada assinatura é concluída
- Após todos assinarem, um PDF combinado e carimbado (ou um
.p7sconsolidado, para documentos não-PDF) fica disponível para download
Os eventos de webhook STEP.STARTED, STEP.COMPLETED e STEP.FAILED são registrados por signatário no log de cada envelope.
WooCommerce
- Edite um produto e abra a aba “Assinatura SignDocs”
- Marque “Requer assinatura” e selecione o PDF
- Configure a política de verificação
- Quando um pedido é concluído, o link de assinatura é enviado por email ao cliente automaticamente
- Após a assinatura, uma nota é adicionada ao pedido com o ID de evidência
O CPF ou CNPJ do cliente deve estar presente no pedido. O plugin lê as chaves de meta padrão
_billing_cpf/_billing_cnpjusadas pela extensão Brazilian Market on WooCommerce. Se nenhum estiver presente, o plugin adiciona uma nota ao pedido explicando o requisito e não cria a sessão.
Verificação de documentos
A página Assinaturas > Verificar (requer a capacidade signdocs_verify):
- Cole um
evidence_id(assinatura única) ou umenvelope_id(multi-signatário) - O plugin chama
GET /v1/verify/{id}ouGET /v1/verify/envelope/{id}e exibe:- Identidades de cada signatário (nome, CPF/CNPJ)
- CNPJ do tenant
- Horários de cada etapa
- O perfil de política aplicado
- Links de download: pacote de evidências (
.p7m), PDF assinado,.p7sconsolidado (envelopes), PDF combinado (envelopes)
- Use os arquivos de evidência em validadores externos (Validador ITI, Adobe Acrobat) para confirmação independente
Log de auditoria
A página Assinaturas > Log de Auditoria (requer a capacidade signdocs_view_logs):
- Visão WP_List_Table sobre
{prefix}signdocs_log - Filtros: nível (debug / info / warning / error), tipo de evento, intervalo de datas
- Exportação em CSV via
admin-post.php(streaming em blocos, segura para exportações de vários GB) - Retenção automática de 30 dias pela tarefa cron diária
signdocs_prune_logs - Toda chamada de API, entrega de webhook e aviso de descontinuação é registrada com contexto em JSON
WP-CLI
Para operações via shell (úteis para automação, CI/CD e diagnóstico):
wp signdocs health
— verifica a conectividade com a API no ambiente configurado
wp signdocs send --document=42 --email=alice@example.com --cpf=12345678901 --policy=CLICK_PLUS_OTP
— cria uma sessão de assinatura a partir de um anexo do WordPress e imprime o ID e a URL da sessão
wp signdocs status <sessionId>
— consulta o status de uma sessão pelo ID
wp signdocs webhook-test <webhookId>
— envia uma entrega de teste para um webhook registrado
wp signdocs log-tail --level=warning --limit=20
— mostra as últimas N entradas do log de auditoria filtradas por nível
Rotação do segredo de webhook
- Em Configurações > SignDocs Brasil, clique em “Rotacionar Segredo”
- O plugin solicita um novo segredo à API; o segredo anterior passa a ser o “segredo anterior”, com uma janela de tolerância de 7 dias
- Durante a janela, o endpoint
/wp-json/signdocs/v1/webhookaceita ambos os segredos — entregas em trânsito não são rejeitadas - Após 7 dias, a tarefa cron diária
signdocs_expire_prev_secretremove o segredo antigo - O status da rotação fica visível no admin (com contagem regressiva)
Para desenvolvedores
Hooks disponíveis:
Ciclo de vida da sessão:
signdocs_session_created— Sessão criada (via API, não necessariamente via WordPress)signdocs_signing_completed— Assinatura concluída com sucessosigndocs_signing_cancelled— Assinatura cancelada pelo integrador ou pelo signatáriosigndocs_signing_expired— Sessão expirada sem conclusãosigndocs_signing_failed— Assinatura falhou (erro irrecuperável)signdocs_transaction_fallback— Fallback acionado (ex.: SERPRO indisponível)
Por etapa (para envelopes e fluxos personalizados):
signdocs_step_started— Etapa iniciada (OTP enviado, captura biométrica etc.)signdocs_step_completed— Etapa concluídasigndocs_step_failed— Etapa falhousigndocs_purpose_disclosure_sent— (NT65) Notificação de averbação da finalidade entregue ao beneficiáriosigndocs_deadline_approaching— (NT65) ≤2 dias úteis antes do prazo de envio ao INSS
Tenant / API:
signdocs_quota_warning— Uso do tenant cruzou um limite (80 / 90 / 100%)signdocs_api_deprecation_notice— A API sinalizou um endpoint descontinuado
WooCommerce:
signdocs_wc_signing_completed— Assinatura de um pedido WooCommerce concluída
Cada ação recebe $post_id (do CPT signdocs_signing ou signdocs_envelope) e $payload (o array bruto do webhook) como argumentos, exceto signdocs_quota_warning e signdocs_api_deprecation_notice, que recebem apenas o payload.
Capacidades:
signdocs_manage— Configurar credenciais, webhook e identidade visual; gerenciar envelopes de outros usuáriossigndocs_send— Criar sessões e envelopessigndocs_verify— Usar a página de Verificação e inspecionar evidênciassigndocs_view_logs— Acessar o log de auditoria e exportar CSV
Use current_user_can('signdocs_send') no lugar de manage_options / edit_posts ao adicionar funcionalidades personalizadas.
SDK PHP:
O cliente do SDK já configurado (com credenciais criptografadas e cache de token compartilhado) está disponível via:
$client = Signdocs_Client_Factory::get(); // SignDocsBrasil\Api\SignDocsBrasilClient or null
Consulte a documentação do SDK PHP para a superfície completa (transactions, envelopes, verification, users, documentGroups, webhooks etc.).
Serviços externos
Este plugin se conecta à plataforma SignDocs Brasil — operada pela mesma empresa que publica o plugin — para criar, entregar e verificar assinaturas eletrônicas. O plugin não funciona sem enviar dados a esses endpoints, porque a assinatura em si acontece nos servidores do SignDocs (o site WordPress apenas orquestra a requisição e armazena a referência do resultado).
API SignDocs Brasil (api.signdocs.com.br / api-hml.signdocs.com.br)
Usada para criar sessões de assinatura, registrar webhooks, verificar evidências assinadas e gerenciar envelopes multi-signatário. O plugin se autentica com as credenciais de API que você informa no painel do WordPress (OAuth2 client_credentials ou, alternativamente, Private Key JWT quando configurado).
- Quais dados são enviados, a cada criação de sessão: o conteúdo do documento PDF (codificado em base64), o nome do signatário, o email do signatário, o CPF ou CNPJ do signatário (um deles é exigido pela API), a política de verificação selecionada (ex.:
CLICK_ONLY,BIOMETRIC), a preferência de idioma, uma URL de retorno opcional e campos de metadados que identificam a URL do site WordPress e a origem (shortcode, AJAX, WP-CLI, WooCommerce, envelope). - Quando: sempre que uma sessão de assinatura é criada. Isso ocorre no envio via AJAX do shortcode, no
wp signdocs sendda WP-CLI, na conclusão de pedido WooCommerce quando o produto está configurado para assinatura, e em toda criação de envelope / adição de novo signatário. - Outras chamadas de API que não enviam dados do documento: registro de webhook, consulta de status (
GET /v1/signing-sessions/{id}), verificação de evidência (GET /v1/verify/{evidenceId}), status de envelope. Estas enviam apenas o identificador correspondente que você fornece (ID da sessão, ID de evidência, ID do envelope). - Autenticação: toda chamada de API é autenticada com um token Bearer de curta duração obtido no endpoint OAuth2 no mesmo domínio (
POST {baseUrl}/oauth2/token). O plugin envia o seu Client ID e o Client Secret ou uma asserção JWT assinada (quando o modo Private Key JWT está configurado) a esse endpoint na primeira chamada e novamente quando o token em cache expira (tipicamente uma vez por hora, por ambiente); o token de acesso é armazenado em um transient do WordPress e reaproveitado em todas as chamadas seguintes. Nenhum dado do signatário é enviado ao endpoint de token. - Troca de ambiente: o plugin usa
api-hml.signdocs.com.br(HML / sandbox) por padrão eapi.signdocs.com.brsomente quando o administrador troca explicitamente o ambiente para “Produção” na página de configurações. - Fornecido por SignDocs Brasil. Termos de Uso. Política de Privacidade.
SDK de navegador SignDocs Brasil (cdn.signdocs.com.br / cdn-hml.signdocs.com.br)
Um arquivo JavaScript (signdocs-brasil.js) carregado do CDN do SignDocs que abre o popup, o redirecionamento ou o overlay de assinatura quando o signatário clica no botão “Assinar Documento” renderizado pelo shortcode ou bloco Gutenberg.
- Quais dados são enviados: nada diretamente por este carregamento de script — é uma requisição de recurso estático, igual à de qualquer outro arquivo JavaScript de um CDN de terceiros. Nenhuma informação pessoal é transmitida pela requisição ao CDN em si; o script é idêntico, byte a byte, para todos os sites que o carregam.
- Quando: a cada visualização de página no front-end que renderiza o shortcode
[signdocs]ou o bloco Gutenberg do SignDocs (o script é enfileirado condicionalmente — páginas sem o bloco não o carregam). - O ambiente do CDN (HML vs. produção) segue a mesma opção
signdocs_environmentda API. - Fornecido por SignDocs Brasil. Termos de Uso. Política de Privacidade.
Interface de assinatura SignDocs Brasil (sign.signdocs.com.br)
Após o signatário clicar em “Assinar Documento”, ele é levado à página segura de assinatura em sign.signdocs.com.br — e não a uma página hospedada pelo seu site WordPress. O fluxo de assinatura (OTP, captura biométrica, seleção de certificado digital, confirmação por aceite) é executado inteiramente nesse domínio. Esse isolamento é intencional: mesmo que o seu site WordPress fosse comprometido, um atacante não conseguiria forjar assinaturas, porque os fatores de autenticação são coletados em uma origem separada, sob controle do SignDocs Brasil.
- Quais dados são enviados: o signatário interage diretamente com esse domínio para concluir o fluxo de assinatura. Os dados trocados ali (códigos OTP, fotos biométricas, seleção de certificado) não passam pelo seu site WordPress. O seu plugin recebe de volta apenas o resultado, via o webhook descrito acima.
- Quando: quando o signatário clica no botão de assinatura renderizado pelo plugin e o SDK de navegador abre a superfície de assinatura (popup / redirecionamento / overlay).
- Fornecido por SignDocs Brasil. Termos de Uso. Política de Privacidade.
