1. Go to this page and download the library: Download grinchenkoedu/diia-php library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
grinchenkoedu / diia-php example snippets
use GrinchenkoUniversity\Diia\ClientFactory;
use GrinchenkoUniversity\Diia\Dto\Credentials;
use GrinchenkoUniversity\Diia\Dto\Scopes;
use GrinchenkoUniversity\Diia\Enum\ScopesDiiaId;
use GrinchenkoUniversity\Diia\Enum\ScopesSharing;
use GuzzleHttp\Client;
$factory = new ClientFactory(
new Client([
'base_uri' => $config['diia_api_url'],
'timeout' => $config['diia_timeout'], // seconds
'connect_timeout' => $config['diia_connect_timeout'], // seconds
]),
new Credentials($config['diia_acquirer_token'], $config['diia_auth_acquirer_token']),
$cache, // any Psr\SimpleCache\CacheInterface
$logger // optional Psr\Log\LoggerInterface
);
// Scopes a branch or an offer gets when you do not set its own.
$defaultScopes = (new Scopes())
->addScopes(ScopesDiiaId::NAME, ScopesDiiaId::SCOPES_ALL)
->addScopes(ScopesSharing::NAME, [ScopesSharing::SCOPE_INTERNAL_PASSPORT]);
$branchClient = $factory->branchClient($defaultScopes);
$offerClient = $factory->offerClient($defaultScopes);
$offerRequestClient = $factory->offerRequestClient();
use GrinchenkoUniversity\Diia\Dto\Acquirers\Branch;
use GrinchenkoUniversity\Diia\Dto\Request\ItemsListRequest;
$branch = new Branch(
'Head office', // name
'Kyiv', // location
'Main street', // street
'1' // house
);
$branchId = $branchClient->create($branch)->getId();
$branchClient->update($branchId, $branch->setEmail('[email protected]'));
$branch = $branchClient->get($branchId);
$branches = $branchClient->list(new ItemsListRequest(10, 0)); // limit, skip
use GrinchenkoUniversity\Diia\Exception\DiiaApiException;
try {
$branchClient->get($branchId);
} catch (DiiaApiException $exception) {
$exception->getStatusCode(); // HTTP status; 0 when no response arrived
$exception->getErrorCode(); // the "code" of Diia's error body, if it has one
$exception->getResponseBody(); // the raw body, for your logs
}
use GrinchenkoUniversity\Diia\Dto\Acquirers\Offer;
use GrinchenkoUniversity\Diia\Dto\Request\OfferRequest;
use GrinchenkoUniversity\Diia\Dto\Scopes;
use GrinchenkoUniversity\Diia\Enum\ScopesDiiaId;
use Matasar\Euspe\EusignSession;
use Matasar\Euspe\Hasher;
$offer = (new Offer('Signing an application'))
->setScopes((new Scopes())->addScopes(ScopesDiiaId::NAME, [ScopesDiiaId::SCOPE_HASHED_FILES_SIGNING]));
$offerId = $offerClient->create($branchId, $offer)->getId();
// euspe returns the hash as raw binary; Diia takes it base64-encoded.
$session = new EusignSession();
$session->open();
$documentHash = base64_encode((new Hasher($session))->hashFile('/path/to/application.pdf'));
// Keep the hashes with the request ID: the callback is checked against them.
$hashes = ['application.pdf' => $documentHash];
$offerRequest = (new OfferRequest(
$offerId,
$requestId // a UUID4 you generate and store for this request
))
->addFile('application.pdf', $documentHash)
->setSignAlgo(OfferRequest::SIGN_ALGO_DSTU)
->setReturnLink('https://example.com/return'); // optional
// Send the user here, or show it as a QR code.
$deepLink = $offerRequestClient->makeDynamic($branchId, $offerRequest)->getDeepLink();
use GrinchenkoUniversity\Diia\Dto\Acquirers\Offer;
use GrinchenkoUniversity\Diia\Dto\Request\OfferRequest;
use GrinchenkoUniversity\Diia\Dto\Scopes;
use GrinchenkoUniversity\Diia\Enum\ScopesSharing;
$offer = (new Offer('Share your ID card to finish enrolment'))
->setScopes((new Scopes())->addScopes(ScopesSharing::NAME, [ScopesSharing::SCOPE_INTERNAL_PASSPORT]));
$sharingOfferId = $offerClient->create($branchId, $offer)->getId();
$offerRequest = (new OfferRequest($sharingOfferId, $requestId))
->setUseDiia(true)
->setReturnLink('https://example.com/return'); // optional
$deepLink = $offerRequestClient->makeDynamic($branchId, $offerRequest)->getDeepLink();
use Matasar\Euspe\SignatureVerifier;
// $requestBody: the raw body Diia sent; $hashes: what you stored for this request ID.
$payload = json_decode($requestBody, true);
$signed = json_decode(base64_decode($payload['encodeData']), true);
$verifier = new SignatureVerifier($session); // an opened EusignSession, as above
foreach ($signed['signedItems'] as $item) {
if (!isset($hashes[$item['name']])) {
throw new UnexpectedValueException('The callback names a file this request did not send.');
}
// Both arguments are raw binary. Throws Matasar\Euspe\Exception\VerificationException
// when the signature is not over this hash: reject the callback then.
$signInfo = $verifier->verifyHash(base64_decode($item['signature']), base64_decode($hashes[$item['name']]));
// Verified: store $item['signature'] with the document.
}