glsv/diadoc-api

用于操作 diadoc.ru 的 API

v0.4.0 2023-02-10 14:57 UTC

This package is auto-updated.

Last update: 2024-09-10 18:40:47 UTC


README

为使用 api-docs.diadoc.ru 的 API 提供包装。

  • 通过登录名和密码自行获取和存储令牌来发送 API 请求;
  • 通过处理以 DTO(数据传输对象)形式表示的命令和执行结果来规范化使用;

安装

composer require glsv/diadoc-api

依赖

使用

使用库的通用逻辑

// Сервис аутентификации
$authenticator = new PasswordAuthenticator($login, $passwd);

// API с передачей в него настрок и зависимостей
$api = new DiadocClientApi($baseUrl, $developer_key, $authenticator);

// Сформировать запрос на конкретную функцию. 
// Инициализация всех обязательных свойств запроса производится через конструктор
$request = new GetDocumentRequest($boxId, $messageId, $entityId);

// Создать объект команды с передачей API и созданного запроса
$command = new GetDocumentCommand($api, $request);

// Выполнить команду
$result = $command->execute();

在 $result 中将返回实现 Glsv\DiadocApi\interfaces\ApiResponseInterface 接口的对象

ApiResponseInterface 实现了 3 个方法

  • isError(): bool
  • getError(): string
  • getData(): array

因此,可以通过这些方法检查请求是否成功执行。如果没有,则获取错误消息。

如果请求成功执行,则通过 getData() 方法获取结果。getData() 的内容取决于请求类型。返回数据的格式需要查看 Diadoc 文档。

1. 获取文档(元数据)

<?php
use Glsv\DiadocApi\services\PasswordAuthenticator;
use Glsv\DiadocApi\DiadocClientApi;
use Glsv\DiadocApi\requests\GetDocumentRequest;
use Glsv\DiadocApi\commands\GetDocumentCommand;

$baseUrl = 'https://diadoc-api.kontur.ru';
// Your login and passwd in diadoc.ru
$login = 'user@yourdomain.com';
$passwd = 'passwd';
$developer_key = 'gl-a05289f6-408f-4ece-9670-xxxxxx';

$boxId = '4fb9ac6ec32e40579a106fdb0092aea6';
$messageId = 'dc7e1be3-4d22-4c6b-89ce-6df3186e1c56';
$documenId = 'ec164dfb-bc95-442f-8f60-e34ee51e5c16';

$authenticator = new PasswordAuthenticator($login, $passwd);
$api = new DiadocClientApi($baseUrl, $developer_key, $authenticator);

$request = new GetDocumentRequest($boxId, $messageId, $entityId);
$res = (new GetDocumentCommand($api, $request))->execute();

print_r($res);

结果

返回结果为 SuccessResponseErrorResponse 对象,这两个对象都实现了 Glsv\DiadocApi\interfaces\ApiResponseInterface 接口。可以通过 getData() 方法获取 Diadoc 原始响应数据的数组形式。

Diadoc 返回数据的格式: developer.kontur.ru/Docs/diadoc-api/proto/Document.html

Glsv\DiadocApi\responses\SuccessResponse Object
(
    [data:protected] => Array
        (
            [MessageId] => dc7e1be3-4d22-4c6b-89ce-6df3186e1c57
            [EntityId] => ec164dfb-bc95-442f-8f60-e34ee51e5c15
            [CreationTimestampTicks] => 638060933238601247
            [CounteragentBoxId] => 51082e19b28d4ffcb0f974431444ae03@diadoc.ru
            [DocumentType] => AcceptanceCertificate
            
            /////////////////////////
            // Другие атрибуты response
            /////////////////////////
            
            [DocflowStatus] => Array
                (
                    [PrimaryStatus] => Array
                        (
                            [Severity] => Success
                            [StatusText] => Подписан контрагентом
                        )

                )

            [MessageIdGuid] => dc7e1be3-4d22-4c6b-89ce-6df3186e1c57
            [EntityIdGuid] => ec164dfb-bc95-442f-8f60-e34ee51e5c15
            [CreationTimestamp] => 2022-12-08T10:48:43.8601247Z
        )
)

2. 获取打印的签名文档形式

<?php
use Glsv\DiadocApi\services\PasswordAuthenticator;
use Glsv\DiadocApi\DiadocClientApi;
use Glsv\DiadocApi\requests\GeneratePrintFormRequest;
use Glsv\DiadocApi\commands\GeneratePrintFormCommand;

$baseUrl = 'https://diadoc-api.kontur.ru';
// Your login and passwd in diadoc.ru
$login = 'user@yourdomain.com';
$passwd = 'passwd';
$developer_key = 'gl-a05289f6-408f-4ece-9670-xxxxxx';

$boxId = '4fb9ac6ec32e40579a106fdb0092aea6';
$messageId = 'dc7e1be3-4d22-4c6b-89ce-6df3186e1c56';
$documenId = 'ec164dfb-bc95-442f-8f60-e34ee51e5c16';

$authenticator = new PasswordAuthenticator($login, $passwd);
$api = new DiadocClientApi($baseUrl, $developer_key, $authenticator);

$request = new GeneratePrintFormRequest($boxId, $messageId, $entityId);
$res = (new GeneratePrintFormCommand($api, $request))->execute();

print_r($res);

结果

返回结果为 SuccessFileResponseErrorResponse 对象,这两个对象都实现了 Glsv\DiadocApi\interfaces\ApiResponseInterface 接口。

在成功执行的情况下,SuccessFileResponse->getData() 返回一个包含单个 FileDto() 元素的数组 FileDto 包含文件的 base64 编码内容,名称和 contentType。

Glsv\DiadocApi\responses\SuccessFileResponse Object
(
    [fileDto:protected] => Glsv\DiadocApi\dto\FileDto Object
        (
            [binaryData] => Содержимое файла в base64
            [filename] => 4fb9ac6e-c32e-4057-9a10-6fdb0092aea5.ec164dfb-bc95-442f-8f60-e34ee51e5c15.638061937254976253_ru_.pdf
            [contentType] => application/pdf
        )
)