承接 ferreiramg/clicksign 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

ferreiramg/clicksign

Composer 安装命令:

composer require ferreiramg/clicksign

包简介

SDK para integrar Clicksign em Laravel 12

README 文档

README

Latest Version on Packagist Tests Total Downloads

SDK para integração com a API v3 do Clicksign em aplicações Laravel. Este pacote foi completamente atualizado para trabalhar com a nova arquitetura baseada em envelopes da API v3.

Requisitos

  • PHP 8.2 ou superior
  • Laravel 12.x

Instalação

Você pode instalar o pacote via composer:

composer require ferreiramg/clicksign

Configuração

Publique o arquivo de configuração:

php artisan vendor:publish --tag="clicksign-config"

Configure suas variáveis de ambiente no arquivo .env:

CLICKSIGN_ACCESS_TOKEN=your_access_token_here
CLICKSIGN_BASE_URL=https://app.clicksign.com/api/v3
CLICKSIGN_SANDBOX=false
CLICKSIGN_SANDBOX_URL=https://sandbox.clicksign.com/api/v3
CLICKSIGN_WEBHOOK_SECRET=your_webhook_secret_here

Fluxo Básico de Assinatura

A API v3 do Clicksign segue um fluxo baseado em envelopes:

  1. Envelope: Container que agrupa documentos, signatários e requisitos
  2. Documento: O arquivo que será assinado
  3. Signatário: Pessoa que irá assinar o documento
  4. Requisitos: Regras de assinatura e autenticação
  5. Ativação: Colocar o envelope em execução
  6. Notificação: Enviar notificações aos signatários

Uso com Workflow Helper

Fluxo Completo Simplificado

use Clicksign\Support\ClicksignWorkflow;
use Clicksign\Facades\Clicksign;

// Instanciar o workflow helper
$workflow = new ClicksignWorkflow(app(ClicksignClientInterface::class));

// Dados do signatário
$signers = [
    [
        'name' => 'João Silva',
        'email' => 'joao@example.com',
        'birthday' => '1990-01-01',
        'has_documentation' => true
    ]
];

// Criar workflow completo
$result = $workflow->createSignatureWorkflow(
    envelopeName: 'Contrato de Prestação de Serviços',
    filename: 'contrato.pdf',
    contentBase64: base64_encode(file_get_contents('path/to/contrato.pdf')),
    signers: $signers,
    envelopeOptions: [
        'locale' => 'pt-BR',
        'auto_close' => true,
        'remind_interval' => 3,
        'deadline_at' => '2025-12-31T23:59:59.000-03:00'
    ]
);

$envelopeId = $result['envelope']['data']['id'];

// Ativar o processo de assinatura
$workflow->startSignatureProcess($envelopeId);

// Enviar notificação
$workflow->sendNotification($envelopeId, 'Por favor, assine o documento.');

Fluxo com Template

// Criar workflow usando template
$result = $workflow->createTemplateWorkflow(
    envelopeName: 'Contrato Personalizado',
    filename: 'contrato_preenchido.docx',
    templateId: 'template_123',
    templateData: [
        'nome_cliente' => 'João Silva',
        'valor_contrato' => 'R$ 5.000,00',
        'data_vencimento' => '31/12/2025'
    ],
    signers: $signers
);

Uso Direto da API

Criando um Envelope

use Clicksign\Facades\Clicksign;
use Clicksign\DTO\Envelope;

$envelope = new Envelope(
    name: 'Meu Envelope',
    locale: 'pt-BR',
    autoClose: true,
    remindInterval: 3,
    blockAfterRefusal: true,
    deadlineAt: '2025-12-31T23:59:59.000-03:00'
);

$response = Clicksign::createEnvelope($envelope->toArray());
$envelopeId = $response['data']['id'];

Adicionando um Documento

use Clicksign\DTO\Document;

// Documento a partir de arquivo
$document = Document::fromFile(
    filename: 'contrato.pdf',
    contentBase64: base64_encode(file_get_contents('path/to/arquivo.pdf'))
);

$response = Clicksign::createDocument($envelopeId, $document->toArray());
$documentId = $response['data']['id'];

// Documento a partir de template
$document = Document::fromTemplate(
    filename: 'contrato_preenchido.docx',
    templateId: 'template_123',
    templateData: [
        'nome' => 'João Silva',
        'valor' => 'R$ 1.000,00'
    ]
);

Adicionando Signatários

use Clicksign\DTO\Signer;

$signer = Signer::create(
    name: 'João Silva',
    email: 'joao@example.com',
    birthday: '1990-01-01',
    hasDocumentation: true
);

$response = Clicksign::createSigner($envelopeId, $signer->toArray());
$signerId = $response['data']['id'];

Adicionando Requisitos

use Clicksign\DTO\Requirement;

// Requisito de assinatura
$signatureReq = Requirement::createSignatureRequirement(
    documentId: $documentId,
    signerId: $signerId,
    role: 'sign'
);

Clicksign::createRequirement($envelopeId, $signatureReq->toArray());

// Requisito de autenticação
$authReq = Requirement::createAuthRequirement(
    documentId: $documentId,
    signerId: $signerId,
    auth: 'email'
);

Clicksign::createRequirement($envelopeId, $authReq->toArray());

Ativando o Envelope

use Clicksign\DTO\Envelope;

$envelope = new Envelope(
    id: $envelopeId,
    status: 'running'
);

Clicksign::updateEnvelope($envelopeId, $envelope->toUpdateArray());

Enviando Notificações

Clicksign::sendNotification($envelopeId, [
    'type' => 'notifications',
    'attributes' => [
        'message' => 'Por favor, assine o documento urgentemente.'
    ]
]);

Operações em Massa

Atualizações em Lote de Requisitos

$operations = [
    [
        'op' => 'remove',
        'ref' => [
            'type' => 'requirements',
            'id' => 'requirement_123'
        ]
    ],
    [
        'op' => 'add',
        'data' => [
            'type' => 'requirements',
            'attributes' => [
                'action' => 'provide_evidence',
                'auth' => 'icp_brasil'
            ],
            'relationships' => [
                'document' => [
                    'data' => ['type' => 'documents', 'id' => $documentId]
                ],
                'signer' => [
                    'data' => ['type' => 'signers', 'id' => $signerId]
                ]
            ]
        ]
    ]
];

Clicksign::bulkRequirements($envelopeId, ['atomic:operations' => $operations]);

Templates

Criando um Template

use Clicksign\DTO\Template;

$template = new Template(
    name: 'Contrato Padrão',
    contentBase64: base64_encode(file_get_contents('template.docx')),
    color: '#577b8d'
);

$response = Clicksign::createTemplate($template->toArray());

Status e Monitoramento

Verificando Status do Envelope

$status = $workflow->getEnvelopeStatus($envelopeId);

echo "Status do envelope: " . $status['envelope']['data']['attributes']['status'];
echo "Signatários: " . count($status['signers']['data']);
echo "Requisitos: " . count($status['requirements']['data']);

Eventos

// Eventos de um documento específico
$documentEvents = Clicksign::getDocumentEvents($envelopeId, $documentId);

// Eventos de todos os documentos do envelope
$envelopeEvents = Clicksign::getEnvelopeEvents($envelopeId);

Modo Sandbox

Para testes, configure o modo sandbox:

CLICKSIGN_SANDBOX=true

Ou use diretamente:

$client = new ClicksignClient(
    accessToken: 'your_token',
    baseUrl: 'https://sandbox.clicksign.com/api/v3'
);

Tratamento de Erros

use Clicksign\Exceptions\{
    AuthenticationException,
    DocumentNotFoundException,
    ValidationException,
    ClicksignException
};

try {
    $response = Clicksign::createEnvelope($envelope->toArray());
} catch (AuthenticationException $e) {
    // Token inválido
} catch (ValidationException $e) {
    // Dados inválidos
    $errors = $e->getErrors();
} catch (DocumentNotFoundException $e) {
    // Documento não encontrado
} catch (ClicksignException $e) {
    // Outros erros da API
}

Contribuindo

Por favor, veja CONTRIBUTING para detalhes.

Segurança

Se você descobrir alguma vulnerabilidade de segurança, por favor envie um e-mail para luis@lpdeveloper.com.br ao invés de usar o issue tracker.

Créditos

Licença

A licença MIT (MIT). Por favor veja License File para mais informações.

ferreiramg/clicksign 适用场景与选型建议

ferreiramg/clicksign 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 27 次下载、GitHub Stars 达 0, 最近一次更新时间为 2025 年 07 月 10 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「sdk」 「signature」 「laravel」 「clicksign」 「digital-signature」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 ferreiramg/clicksign 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 ferreiramg/clicksign 我们能提供哪些服务?
定制开发 / 二次开发

基于 ferreiramg/clicksign 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 27
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 10
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-07-10