grinchenkoedu / diia-php
PHP 的非官方 Diia 库
1.0.0
2024-08-26 17:57 UTC
Requires
- php: >=7.4
- ext-json: *
- guzzlehttp/guzzle: ^7.6
- psr/log: ^1.1
- psr/simple-cache: ^1.0
Requires (Dev)
- phpunit/phpunit: ^9
This package is not auto-updated.
Last update: 2024-09-12 21:18:49 UTC
README
这个库不是官方的,没有部分是由 Diia 开发者提供或批准的。
安装
composer require grinchenkoedu/diia-php
推荐库
- ramsey/uuid - 用于生成 UUID
- matasarei/euspe - 加密库
示例
客户端库不实现回调处理程序,只实现 API 调用。
客户端初始化
以下代码应封装在服务提供者或工厂中。
/** @var \GuzzleHttp\Client $httpClient */ $httpClient = new Client([ 'base_uri' => 'http://api.dev.lan', // replace with actual API URL 'timeout' => 2.0, ]); $tokenProvider = new BearerTokenProvider( new AuthClient($httpClient), new Credentials('token', 'auth_token'), $cacheInterface // PSR cache interface ); $globalScopes = (new Scopes()) ->addScopes(ScopesDiiaId::NAME, ScopesDiiaId::SCOPES_ALL) ->addScopes(ScopesSharing::NAME, [ // any sharing scopes if needed ]) ; $scopesMapper = new ScopesMapper($globalScopes); $branchMapper = new BranchMapper($scopesMapper); $offerMapper = new OfferMapper($scopesMapper); $dependencyResolver = (new DependencyResolver()) ->addDependency(new ItemsListRequestMapper()) ->addDependency($branchMapper) ->addDependency($offerMapper) ->addDependency(new OfferRequestMapper()) ; $requestJsonMapper = new RequestJsonMapper($dependencyResolver); $client = new AcquirersClient( $httpClient, new HttpHeadersProvider($tokenProvider), $requestJsonMapper, new ResponseJsonMapper(new ApiResourceMapper()), new ResponseJsonMapper( new ItemsListResponseMapper('branches', $branchMapper) ), new ResponseJsonMapper($branchMapper), new ResponseJsonMapper( new ItemsListResponseMapper('offers', $offerMapper) ), new ResponseJsonMapper(new OfferResponseMapper()) );
分支
// Branch of the organization $branch = new Branch( 'Branch name', // like "Head Office" 'Branch location', // like "City" 'Branch street', // like "Street" 'Branch building' // like "1" ); $resource = $client->createBranch($branch); $branchId = $resource->getId(); // The branches can be also updated or deleted. // To update scopes branches must be removed and created again (see $globalScopes). $client->updateBranch($branchId, $branch); $client->deleteBranch($branchId);
Дія.Підпис
// Define scopes. $scopes = new Scopes(); $scopes->addScopes( ScopesDiiaId::NAME, [ ScopesDiiaId::SCOPE_HASHED_FILES_SIGNING, ] ); // Add a new offer. $offer = new Offer('Document description'); $offer->setScopes($scopes); /** @var \GrinchenkoUniversity\Diia\Dto\ApiResource $apiResource */ $apiResource = $client->createOffer($branchId, $offer); // You need to save the ID of the offer for future use. $offerId = $apiResource->getId(); $offerRequest = new OfferRequest( $offerId, $requestId // UUID4, must be previously generated and saved ); $crypto = new Matasar\Euspe\Crypto(); // from matasarei/euspe $documentHash = $crypto->hashFile('/path/to/file.pdf'); // not only PDF $offerRequest ->addFile('filename', $documentHash) ->setSignAlgo(OfferRequest::SIGN_ALGO_DSTU) ->setReturnLink('https://example.com/return') // users return link, optional ; $offerResponse = $client->makeOfferRequest($branchId, $offerId); // Users deep link to sign the document. var_dump($offerResponse->getDeepLink());
Дія.Шеринг
// Define scopes $scopes = new Scopes(); $scopes->addScopes(ScopesSharing::NAME, [ // list of scopes (documents) to share ]) $offer = new Offer('Reason to get document'); $offer->setScopes($scopes); /** @var \GrinchenkoUniversity\Diia\Dto\ApiResource $apiResource */ $apiResource = $client->createOffer($brancId, $offer); $offerRequest = new OfferRequest( $apiResource->getId(), // you need to save the ID of the offer for future use $requestId // UUID4, must be previously generated and saved ); $offerRequest ->setUseDiia(true) ->setReturnLink('https://example.com/return') // users return link, optional ; /** @var \GrinchenkoUniversity\Diia\Dto\Response\OfferResponse $offerResponse */ $offerResponse = $client->makeOfferRequest($brancId, $offerRequest); // Users deep link to share document(s). var_dump($offerResponse->getDeepLink());
测试和开发
- 安装供应商
docker run --rm -v $(pwd):/app -w /app composer:lts composer install
- 运行测试
docker run --rm -v $(pwd):/app -w /app composer:lts vendor/bin/phpunit