{"id":36988408,"url":"https://github.com/tochka-developers/jsonrpc-client","last_synced_at":"2026-01-13T23:25:44.846Z","repository":{"id":23115208,"uuid":"97834214","full_name":"tochka-developers/jsonrpc-client","owner":"tochka-developers","description":"JsonRpc Client package for Laravel","archived":false,"fork":false,"pushed_at":"2025-12-18T10:56:03.000Z","size":159,"stargazers_count":8,"open_issues_count":0,"forks_count":13,"subscribers_count":4,"default_branch":"v3","last_synced_at":"2025-12-21T17:44:56.789Z","etag":null,"topics":["jsonrpc","jsonrpc-client","laravel","php"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tochka-developers.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-07-20T12:45:01.000Z","updated_at":"2025-12-18T10:52:23.000Z","dependencies_parsed_at":"2025-07-22T15:07:15.382Z","dependency_job_id":"3c3f90b1-c223-4ac3-a7c8-7685a1e2150b","html_url":"https://github.com/tochka-developers/jsonrpc-client","commit_stats":{"total_commits":59,"total_committers":9,"mean_commits":6.555555555555555,"dds":0.4067796610169492,"last_synced_commit":"4c4c78e66c043bf8198cb19e420ecbf19dfb77f6"},"previous_names":[],"tags_count":44,"template":false,"template_full_name":null,"purl":"pkg:github/tochka-developers/jsonrpc-client","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tochka-developers%2Fjsonrpc-client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tochka-developers%2Fjsonrpc-client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tochka-developers%2Fjsonrpc-client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tochka-developers%2Fjsonrpc-client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tochka-developers","download_url":"https://codeload.github.com/tochka-developers/jsonrpc-client/tar.gz/refs/heads/v3","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tochka-developers%2Fjsonrpc-client/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28405120,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-13T21:51:37.118Z","status":"ssl_error","status_checked_at":"2026-01-13T21:45:14.585Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["jsonrpc","jsonrpc-client","laravel","php"],"created_at":"2026-01-13T23:25:44.339Z","updated_at":"2026-01-13T23:25:44.834Z","avatar_url":"https://github.com/tochka-developers.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# JSON-RPC Client (Laravel \u003e9.0)\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=tochka-developers_jsonrpc-client\u0026metric=alert_status)](https://sonarcloud.io/dashboard?id=tochka-developers_jsonrpc)\n[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=tochka-developers_jsonrpc-client\u0026metric=bugs)](https://sonarcloud.io/dashboard?id=tochka-developers_jsonrpc)\n[![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=tochka-developers_jsonrpc-client\u0026metric=code_smells)](https://sonarcloud.io/dashboard?id=tochka-developers_jsonrpc)\n[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=tochka-developers_jsonrpc-client\u0026metric=coverage)](https://sonarcloud.io/dashboard?id=tochka-developers_jsonrpc)\n\n## Описание\nJsonRpc клиент - реализация клиента для JsonRpc-сервера.\nРаботает по спецификации JsonRpc 2.0. Протестирован и работает с оригинальным сервером JsonRpc от Tochka.\n## Установка\n### Laravel\n1. ``composer require tochka-developers/jsonrpc-client``\n2. Опубликуйте конфигурацию:  \n```\nphp artisan vendor:publish --provider=\"Tochka\\JsonRpcClient\\JsonRpcClientServiceProvider\"\n```\n\n### Lumen\n1. ``composer require tochka-developers/jsonrpc-client``\n2. Скопируйте конфигурацию из пакета (`vendor/tochka-developers/jsonrpc/config/jsonrpc-client.php`) в проект \n(`config/jsonrpc-client.php`)\n3. Подключите конфигурацию в `bootstrap/app.php`:\n```php\n$app-\u003econfigure('jsonrpc-client');\n```\n4. Включите поддержку фасадов в `bootstrap/app.php`:\n```php\n$app-\u003ewithFacades();\n```\n5. Если планируете использовать автоматическую генерацию прокси-клиента - зарегистрируйте сервис-провайдер \n`Tochka\\JsonRpcClient\\JsonRpcClientServiceProvider` в `bootstrap/app.php`:\n```php\n$app-\u003eregister(Tochka\\JsonRpcClient\\JsonRpcClientServiceProvider::class);\n```\n## Использование\n### Настройка\nКонфигурация находится в файле `app/jsonrpc-client.php`. \nВ данном файле прописываются настройки для всех JsonRpc-подключений.\n* `clientName` - Имя клиента. Данное имя будет подставляться в ID-всех запросов в виде префикса.\nПозволяет идентифицировать сервис.\n* `default` - подключение по умолчанию. Должно содержать имя подключения.\n* `connections` - массив подключений. Каждое подключение должно иметь уникальный ключ (название подключения).\n\nНастройки подключений:\n* `url` - URL-адрес (или IP) для подключения к JsonRpc-серверу. Должен содержать полный путь к точке входа\n(например: https://api.jsonrpc.com/v1/jsonrpc).\n* `clientClass` - класс, который используется в качестве прокси-класса. Необходимо указывать полное наименование \n(с пространством имен). Используется при автоматической генерации прокси-класса.\n* `extendedStubs` - генерация расширенного описания АПИ в виде классов-хелперов для входных и выходных параметров методов\n* `options` - массив опций подключения (см. https://docs.guzzlephp.org/en/stable/request-options.html)\n* `middleware` - список классов-middleware, которые подготавливают запрос перед отправкой. Возможно перечисление \nклассов-middleware в виде элементов массива, либо, если необходимо передать в класс дополнительные параметры - в качестве\nключей массива указываются классы-middleware, в качестве значения - массив с параметрами.\n\nВ пакете доступно две middleware:\n* `AuthTokenMiddleware` - класс авторизации по токену в заголовке. Параметры: `name` - имя заголовка, `value` - значение \nтокена\n* `AuthBasicMiddleware` - класс Basic-авторизации. Параметры: `scheme` - тип авторизации (`basic`, `digest`, `ntlm`), \n`username` и `password` - данные для авторизации\n* `AdditionalHeadersMiddleware` - класс для добавления кастомных заголовков. Параметры: `headers` - ассоциативный массив \nс заголовками, где ключ - имя заголовка, а значение - значение заголовка.\n\n### Генерация прокси-класса\nПрокси-класс - это фасад JsonRpcClient, который содержит информацию обо всех доступных методах\nJsonRpc-сервера, а также сам делает маппинг параметров, переданных в метод, в виде ассоциативного массива.\nЕсли сервер умеет возвращать SMD-схему, то такой класс может быть сгенерирован автоматически.\n\nДля генерации класса воспользуйтесь командой:\n```\nphp artisan jsonrpc:generateClient connection\n```\nДля успешной генерации должно выполняться несколько условий:\n1. JsonRpc-сервер должен поддерживать возврат SMD-схемы (при передаче GET-параметра ?smd)\n2. Желательно, чтобы в качестве сервера использовался `tochka-developers/jsonrpc`. Данный пакет умеет возвращать\nрасширенную информацию для более точной генерации прокси-класса\n3. Должен быть прописан URL-адрес JsonRpc-сервера\n4. Должно быть указано полное имя прокси-класса. Путь к файлу класса будет сгенерирован автоматически исходя из \nпространства имен и настроек `composer`.\n5. Папка, в которой будет находиться прокси-класс, должна иметь иметь права на запись.\n\nЕсли все указанные условия выполняются - то будет создан прокси-класс на указанное соединение.\nДля обновления прокси-класса (в случае обновления методов сервера) - повторно вызовите указанную команду.\nЕсли необходимо сгенерировать классы для всех указанных соединений - вызовите указанную команду без указания соединения:\n```\nphp artisan jsonrpc:generateClient\n```\n### Вызовы методов\nВызов метода JsonRpc:\n```php\n//....\n$result = Api::fooBar('Some text');\n```\nКлиент поддерживает вызов нескольких удаленных методов через один запрос:\n```php\n$api = Api::batch();\n$api-\u003efoo('params');\n$api-\u003ebar(123);\n$api-\u003esomeMethod(1, true);\n[$resultFoo, $resultBar, $resultSome] = $api-\u003eexecute();\n```\nКлиент поддерживает кеширование результатов с помощью метода `cache`:\n```php\n$result = Api::cache(10)-\u003efooBar('Some text');\n```\nПри таком вызове результаты будут закешированы на 10 минут, и последующих вызовах этого метода с такими же параметрами - \nзапрос на сервер не будет посылаться, результат будет сразу получаться из кеша. Естественно, результаты кешируются \nтолько для успешных вызовов. \n\nТакже кеширование поддерживается и для нескольких вызовов:\n```php\n$api = Api::batch();\n$resultFoo = $api-\u003ecache(10)-\u003efoo('params');\n$resultBar = $api-\u003ebar(123);\n$resultSome = $api-\u003ecache(60)-\u003esomeMethod(1, true);\n[$resultFoo, $resultBar, $resultSome] = $api-\u003eexecute();\n```\nУчтите, что кешироваться будет только тот метод, перед которым был вызван `cache`. \n\n### Middleware\nКлассы-middleware позволяет внести изменения в исходящие запросы, например добавить дополнительные заголовки, включить \nавторизацию, либо внести изменения в само тело запроса. \n\nВы можете использовать свои классы, указав их имена в конфигурации необходимого подключения.\nЕсть два типа middleware. Первый рассчитан на взаимодействие с каждым конкретным JsonRpc-запросом, даже если они \nзапущены в batch-режиме. Второй тип запускается один раз на весь транспортный запрос.\n\nПервый тип middleware запускается для каждого вызова метода в рамках одного запроса на сервер. То есть, если был сделан \nbatch-запрос с вызовами 3х методов - каждая такая middleware будет запущена по одному разу для каждого вызванного метода.\n\nВторой тип middleware будет запущен только один раз для всего запроса, и в него будет передан весь стек вызовов.\nВторой тип подходит для middleware, занимающихся добавлением кас томных заголовков, авторизации и прочих модификаций\nтранспортного запроса.\n\nВ классе middleware должне быть реализован один метод - `handle`. \nПервые два параметра обязательные.\nПример middleware для обработки каждого вызова в запросе (первый тип):\n```php\nclass SomeMiddleware\n{\n    public function handle(\\Tochka\\JsonRpcClient\\Request $request, \\Closure $next): void\n    {\n        // ...\n        return $next($request);\n    }\n}\n```\nПример middleware для обработки всего запроса целиком:\n```php\nclass SomeMiddleware implements \\Tochka\\JsonRpcClient\\Contracts\\OnceExecutedMiddleware\n{\n    /**\n     * @param \\Tochka\\JsonRpcClient\\Standard\\JsonRpcRequest[] $requests\n     * @param \\Closure         $next\n     */\n    public function handle(array $requests, \\Closure $next): void\n    {\n        // ...\n        return $next($requests);\n    }\n}\n```\nЧтобы продолжить выполнение цепочки middleware, в методе необходимо обязательно вызвать метод $next, передав туда \nактуальную версию $request.\nКроме того, вы можете в параметрах метода `handle` использовать:\n* дополнительные параметры, передаваемые в конфигурации:\n```php\n// config\n'middleware'  =\u003e [\n    \\Tochka\\JsonRpcClient\\Middleware\\AuthTokenMiddleware::class =\u003e [\n        'name'  =\u003e 'X-Access-Key',\n        'value' =\u003e 'TokenValue',\n    ],\n]\n\n// middleware\nuse Tochka\\JsonRpcClient\\Request;\n\nclass AuthTokenMiddleware implements \\Tochka\\JsonRpcClient\\Contracts\\OnceExecutedMiddleware\n{\n    public function handle(array $request, \\Closure $next, $value, $name = 'X-Access-Key') \n    {\n        // ...\n\n        return $next($request);\n    }\n}\n```\nПорядок указание параметров не важен, указанные в конфигурации значения будут переданы в middleware по имени параметра.\n* контекстные классы `Tochka\\JsonRpcClient\\Contracts\\TransportClient` и `Tochka\\JsonRpcClient\\ClientConfig`. \nЕсли у параметра указать один из указанных типов, то в метод при вызове будут переданы текущие экземпляры классов,\nотвечающих за формирование транспортного запроса (например, сконфигурированный экземпляр класса \n`Tochka\\JsonRpcClient\\Client\\HttpClient`) либо класс с конфигурацией текущего соединения.\n* любой другой класс/контракт/фасад, зарегистрированный в DI Laravel\n\n[]: https://docs.guzzlephp.org/en/stable/request-options.html(описание\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftochka-developers%2Fjsonrpc-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftochka-developers%2Fjsonrpc-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftochka-developers%2Fjsonrpc-client/lists"}