dencel/eparaksts
Composer 安装命令:
composer require dencel/eparaksts
包简介
PHP client library for the eParaksts e-signature and identity platform
README 文档
README
PHP 8.4+ client library for the eParaksts Latvian e-signature and identity platform.
Installation
composer require dencel/eparaksts
Two APIs
The library covers two distinct eParaksts services:
| Class | Host | Purpose |
|---|---|---|
Eparaksts |
eidas.eparaksts.lv |
OAuth2 identity & remote signing |
SignAPI |
signapi.eparaksts.lv |
Document session signing |
Eparaksts — Identity & OAuth2
Authorization code flow (web login)
use Dencel\Eparaksts\Eparaksts; $e = new Eparaksts('client-id', 'client-secret'); // 1. Redirect the user $url = $e->authorize(Eparaksts::SCOPE_IDENTIFICATION, 'random-state', 'https://app.test/callback'); header('Location: ' . $url); // 2. Handle the callback $token = $e->requestToken(Eparaksts::GRANT_AUTHORIZATION_CODE, [ 'code' => $_GET['code'], 'redirect_uri' => 'https://app.test/callback', ]); // 3. Fetch the authenticated user $user = $e->me(Eparaksts::SCOPE_IDENTIFICATION);
Client credentials flow (server-to-server)
$token = $e->requestToken(Eparaksts::GRANT_CLIENT_CREDENTIALS, [ 'scope' => Eparaksts::SCOPE_SIGNATURE, ]);
Scopes
| Constant | Value |
|---|---|
SCOPE_IDENTIFICATION |
openid profile |
SCOPE_SIGNATURE |
openid sign |
SCOPE_IDENTIFICATION_WITH_AGE_14/16/18/21 |
age-gated identification |
Remote signing
// Get available identities for the authenticated user $identities = $e->getSignIdentity(Eparaksts::SCOPE_SIGNATURE); // Pick the signing certificate $identity = $e->findIdentity(Eparaksts::CERT_MOBILEID_SIGN, $identities); $cert = $e->findCert(Eparaksts::CERT_MOBILEID_SIGN, $identities); // Sign a digest $signature = $e->sign($digest, 'rsa-sha256', $identity['id']); // Batch sign multiple digests $signatures = $e->signBatch([ ['digest_value' => $digest1, 'document_name' => 'doc1.pdf'], ['digest_value' => $digest2, 'document_name' => 'doc2.pdf'], ], 'rsa-sha256', $identity['id']);
Certificate type constants: CERT_MOBILEID_AUTH, CERT_MOBILEID_SIGN, CERT_SIGNING, CERT_QSEAL.
Session persistence
Eparaksts implements __serialize/__unserialize so it can be stored in the PHP session:
$_SESSION['eparaksts'] = serialize($e); $e = unserialize($_SESSION['eparaksts']);
Logout
$url = $e->logout('https://app.test/'); header('Location: ' . $url);
SignAPI — Document signing sessions
use Dencel\Eparaksts\SignAPI\v1\SignAPI; $api = new SignAPI('client-id', 'client-secret'); $api->freshToken(); // fetches and stores a client_credentials token
Signing flow
// 1. Create a session $session = $api->session()->start(); $sessionId = $session['sessionId']; // 2. Upload document $file = $api->storage()->upload($sessionId, '/path/to/doc.pdf'); // 3. Compute digest (pass auth certificate from Eparaksts::findCert()) $digest = $api->signing()->calculateDigest($sessionId, $authCert); // 4. Sign the digest remotely (using Eparaksts client) $signature = $eparaksts->sign($digest['digests'][0]['digest'], 'rsa-sha256', $identityId); // 5. Finalize $api->signing()->finalizeSigning($authCert, $sessionId, $signature); // 6. Download signed document $response = $api->storage()->download($sessionId, $file['fileId']); // For .edoc documents only — download as ASiC-E container: $response = $api->storage()->download($sessionId, $file['fileId'], asice: true); // 7. Close session $api->session()->close($sessionId);
eSeal (server-side signing)
$keyData = $api->configuration()->publicKey(); $encryptedPassword = $api->signing()->encryptSignKeyPassword('pfx-password'); $api->signing()->eSealCreate( sessions: $sessionId, authCertificate: $authCert, signKey: base64_encode(file_get_contents('seal.pfx')), signKeyPassword: $encryptedPassword, );
Batch signing (multiple sessions)
$digest = $api->signing()->calculateDigest(['session-1', 'session-2'], $authCert); $api->signing()->finalizeSigning($authCert, [ ['sessionId' => 'session-1', 'signatureValue' => $sig1], ['sessionId' => 'session-2', 'signatureValue' => $sig2], ]);
Other services
// Sharing $api->share()->start($sessionId, ['123456-12345']); $api->share()->delete($sessionId); // Validation $api->validation()->validate($sessionId); // Configuration $maxFileSize = $api->configuration()->get('maxFileSize');
Debugging
Inject a Guzzle HandlerStack with a history middleware to inspect all HTTP traffic:
use GuzzleHttp\Handler\MockHandler; use GuzzleHttp\HandlerStack; use GuzzleHttp\Middleware; $container = []; $stack = HandlerStack::create(); $stack->push(Middleware::history($container)); $e = new Eparaksts('client', 'secret', handlerStack: $stack); $api = new SignAPI('client', 'secret', handlerStack: $stack); // After requests: foreach ($container as $tx) { echo $tx['request']->getMethod() . ' ' . $tx['request']->getUri() . PHP_EOL; }
Requirements
- PHP 8.4+
ext-fileinfo,ext-openssl
License
MIT — see LICENSE.
dencel/eparaksts 适用场景与选型建议
dencel/eparaksts 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 61 次下载、GitHub Stars 达 0, 最近一次更新时间为 2025 年 12 月 13 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 dencel/eparaksts 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 dencel/eparaksts 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 61
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 5
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-12-13