signdocs-brasil / signdocs-brasil-php
Official PHP SDK for the SignDocsBrasil API — digital document signing with ICP-Brasil support
Package info
github.com/signdocsbrasil/signdocs-brasil-php
pkg:composer/signdocs-brasil/signdocs-brasil-php
Requires
- php: ^8.1
- firebase/php-jwt: ^6.0
- guzzlehttp/guzzle: ^7.0
- psr/log: ^3.0
Requires (Dev)
- phpstan/phpstan: ^1.0
- phpunit/phpunit: ^10.0
README
SDK oficial em PHP para a API SignDocsBrasil.
Requisitos
- PHP 8.1+
- Dependências:
guzzlehttp/guzzle,firebase/php-jwt
Instalação
composer require signdocs-brasil/signdocs-brasil-php
Início Rápido
use SignDocsBrasil\Api\SignDocsBrasilClient; use SignDocsBrasil\Api\Config; use SignDocsBrasil\Api\Models\CreateTransactionRequest; use SignDocsBrasil\Api\Models\Policy; use SignDocsBrasil\Api\Models\Signer; $client = new SignDocsBrasilClient(new Config( clientId: 'seu_client_id', clientSecret: 'seu_client_secret', )); $tx = $client->transactions->create(new CreateTransactionRequest( purpose: 'DOCUMENT_SIGNATURE', policy: new Policy(profile: 'CLICK_ONLY'), signer: new Signer( name: 'João Silva', email: 'joao@example.com', userExternalId: 'user-001', ), document: ['content' => $pdfBase64, 'filename' => 'contrato.pdf'], )); echo $tx->transactionId . ' ' . $tx->status;
Private Key JWT (ES256)
$client = new SignDocsBrasilClient(new Config( clientId: 'seu_client_id', privateKey: file_get_contents('./private-key.pem'), kid: 'seu-key-id', ));
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, list, waitForCompletion |
$client->envelopes |
create, get, addSession, combinedStamp |
$client->documentGroups |
combinedStamp |
$client->health |
check, history |
Envelopes (Múltiplos Signatários)
use SignDocsBrasil\Api\Models\CreateEnvelopeRequest; use SignDocsBrasil\Api\Models\AddEnvelopeSessionRequest; $envelope = $client->envelopes->create(new CreateEnvelopeRequest( signingMode: 'PARALLEL', totalSigners: 2, documentContent: $pdfBase64, documentFilename: 'contrato.pdf', )); $session1 = $client->envelopes->addSession($envelope->envelopeId, new AddEnvelopeSessionRequest( signerName: 'João Silva', signerEmail: 'joao@example.com', policyProfile: 'CLICK_ONLY', )); $session2 = $client->envelopes->addSession($envelope->envelopeId, new AddEnvelopeSessionRequest( signerName: 'Maria Santos', signerEmail: 'maria@example.com', policyProfile: 'CLICK_ONLY', signerIndex: 2, )); echo $session1->url . ' ' . $session2->url;
Configuração Avançada
Guzzle Client customizado
Injete um GuzzleHttp\Client customizado (ex: para proxying, middleware ou métricas):
use GuzzleHttp\Client as GuzzleClient; $guzzle = new GuzzleClient(['proxy' => 'http://proxy:8080']); $client = new SignDocsBrasilClient(new Config( clientId: 'seu_client_id', clientSecret: 'seu_client_secret', guzzle: $guzzle, ));
Logging
O SDK aceita qualquer logger PSR-3 (Psr\Log\LoggerInterface). 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.
use Monolog\Logger; use Monolog\Handler\StreamHandler; $logger = new Logger('signdocs'); $logger->pushHandler(new StreamHandler('php://stdout')); $client = new SignDocsBrasilClient(new Config( clientId: 'seu_client_id', clientSecret: 'seu_client_secret', logger: $logger, ));
Timeout por requisição
Todas as operações aceitam $timeout (em segundos) como parâmetro opcional, que sobrescreve o timeout padrão do client:
$tx = $client->transactions->get('tx_123', timeout: 5);
Documentação
Para guias completos de integração com exemplos passo-a-passo de todos os fluxos de assinatura, veja a documentação centralizada.