PHPackages                             tochka-developers/jsonrpc-client - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. tochka-developers/jsonrpc-client

ActiveLibrary[API Development](/categories/api)

tochka-developers/jsonrpc-client
================================

JsonRpc Client for Laravel

v3.11.0(1w ago)814.7k13MITPHPPHP 8.1.\*|8.2.\*|8.3.\*|8.4.\*CI failing

Since Jul 24Pushed 1w ago4 watchersCompare

[ Source](https://github.com/tochka-developers/jsonrpc-client)[ Packagist](https://packagist.org/packages/tochka-developers/jsonrpc-client)[ RSS](/packages/tochka-developers-jsonrpc-client/feed)WikiDiscussions v3 Synced 2d ago

READMEChangelog (10)Dependencies (44)Versions (47)Used By (0)

JSON-RPC Client (Laravel &gt;9.0)
=================================

[](#json-rpc-client-laravel-90)

[![Quality Gate Status](https://camo.githubusercontent.com/e26dfd4fc04e52bf247e3abb98142fafcbfb18ade9dfa7d905dd6b25f112ef42/68747470733a2f2f736f6e6172636c6f75642e696f2f6170692f70726f6a6563745f6261646765732f6d6561737572653f70726f6a6563743d746f63686b612d646576656c6f706572735f6a736f6e7270632d636c69656e74266d65747269633d616c6572745f737461747573)](https://sonarcloud.io/dashboard?id=tochka-developers_jsonrpc)[![Bugs](https://camo.githubusercontent.com/551193162230204abbb77326352b13da9cdd59321dbb4619a4d1e0b3fd240051/68747470733a2f2f736f6e6172636c6f75642e696f2f6170692f70726f6a6563745f6261646765732f6d6561737572653f70726f6a6563743d746f63686b612d646576656c6f706572735f6a736f6e7270632d636c69656e74266d65747269633d62756773)](https://sonarcloud.io/dashboard?id=tochka-developers_jsonrpc)[![Code Smells](https://camo.githubusercontent.com/db50873f8f7bc295fbfbd489f168ca90c245e6b0953df29bb3149c9f31949891/68747470733a2f2f736f6e6172636c6f75642e696f2f6170692f70726f6a6563745f6261646765732f6d6561737572653f70726f6a6563743d746f63686b612d646576656c6f706572735f6a736f6e7270632d636c69656e74266d65747269633d636f64655f736d656c6c73)](https://sonarcloud.io/dashboard?id=tochka-developers_jsonrpc)[![Coverage](https://camo.githubusercontent.com/c1095f94fc40cf679eaafae27688ffb36220582d44956568a18bfcc7035d55ea/68747470733a2f2f736f6e6172636c6f75642e696f2f6170692f70726f6a6563745f6261646765732f6d6561737572653f70726f6a6563743d746f63686b612d646576656c6f706572735f6a736f6e7270632d636c69656e74266d65747269633d636f766572616765)](https://sonarcloud.io/dashboard?id=tochka-developers_jsonrpc)

Описание
--------

[](#описание)

JsonRpc клиент - реализация клиента для JsonRpc-сервера. Работает по спецификации JsonRpc 2.0. Протестирован и работает с оригинальным сервером JsonRpc от Tochka.

Установка
---------

[](#установка)

### Laravel

[](#laravel)

1. `composer require tochka-developers/jsonrpc-client`
2. Опубликуйте конфигурацию:

```
php artisan vendor:publish --provider="Tochka\JsonRpcClient\JsonRpcClientServiceProvider"

```

### Lumen

[](#lumen)

1. `composer require tochka-developers/jsonrpc-client`
2. Скопируйте конфигурацию из пакета (`vendor/tochka-developers/jsonrpc/config/jsonrpc-client.php`) в проект (`config/jsonrpc-client.php`)
3. Подключите конфигурацию в `bootstrap/app.php`:

```
$app->configure('jsonrpc-client');
```

4. Включите поддержку фасадов в `bootstrap/app.php`:

```
$app->withFacades();
```

5. Если планируете использовать автоматическую генерацию прокси-клиента - зарегистрируйте сервис-провайдер `Tochka\JsonRpcClient\JsonRpcClientServiceProvider` в `bootstrap/app.php`:

```
$app->register(Tochka\JsonRpcClient\JsonRpcClientServiceProvider::class);
```

Использование
-------------

[](#использование)

### Настройка

[](#настройка)

Конфигурация находится в файле `app/jsonrpc-client.php`. В данном файле прописываются настройки для всех JsonRpc-подключений.

- `clientName` - Имя клиента. Данное имя будет подставляться в ID-всех запросов в виде префикса. Позволяет идентифицировать сервис.
- `default` - подключение по умолчанию. Должно содержать имя подключения.
- `connections` - массив подключений. Каждое подключение должно иметь уникальный ключ (название подключения).

Настройки подключений:

- `url` - URL-адрес (или IP) для подключения к JsonRpc-серверу. Должен содержать полный путь к точке входа (например: ).
- `clientClass` - класс, который используется в качестве прокси-класса. Необходимо указывать полное наименование (с пространством имен). Используется при автоматической генерации прокси-класса.
- `extendedStubs` - генерация расширенного описания АПИ в виде классов-хелперов для входных и выходных параметров методов
- `options` - массив опций подключения (см. )
- `middleware` - список классов-middleware, которые подготавливают запрос перед отправкой. Возможно перечисление классов-middleware в виде элементов массива, либо, если необходимо передать в класс дополнительные параметры - в качестве ключей массива указываются классы-middleware, в качестве значения - массив с параметрами.

В пакете доступно две middleware:

- `AuthTokenMiddleware` - класс авторизации по токену в заголовке. Параметры: `name` - имя заголовка, `value` - значение токена
- `AuthBasicMiddleware` - класс Basic-авторизации. Параметры: `scheme` - тип авторизации (`basic`, `digest`, `ntlm`), `username` и `password` - данные для авторизации
- `AdditionalHeadersMiddleware` - класс для добавления кастомных заголовков. Параметры: `headers` - ассоциативный массив с заголовками, где ключ - имя заголовка, а значение - значение заголовка.

### Генерация прокси-класса

[](#генерация-прокси-класса)

Прокси-класс - это фасад JsonRpcClient, который содержит информацию обо всех доступных методах JsonRpc-сервера, а также сам делает маппинг параметров, переданных в метод, в виде ассоциативного массива. Если сервер умеет возвращать SMD-схему, то такой класс может быть сгенерирован автоматически.

Для генерации класса воспользуйтесь командой:

```
php artisan jsonrpc:generateClient connection

```

Для успешной генерации должно выполняться несколько условий:

1. JsonRpc-сервер должен поддерживать возврат SMD-схемы (при передаче GET-параметра ?smd)
2. Желательно, чтобы в качестве сервера использовался `tochka-developers/jsonrpc`. Данный пакет умеет возвращать расширенную информацию для более точной генерации прокси-класса
3. Должен быть прописан URL-адрес JsonRpc-сервера
4. Должно быть указано полное имя прокси-класса. Путь к файлу класса будет сгенерирован автоматически исходя из пространства имен и настроек `composer`.
5. Папка, в которой будет находиться прокси-класс, должна иметь иметь права на запись.

Если все указанные условия выполняются - то будет создан прокси-класс на указанное соединение. Для обновления прокси-класса (в случае обновления методов сервера) - повторно вызовите указанную команду. Если необходимо сгенерировать классы для всех указанных соединений - вызовите указанную команду без указания соединения:

```
php artisan jsonrpc:generateClient

```

### Вызовы методов

[](#вызовы-методов)

Вызов метода JsonRpc:

```
//....
$result = Api::fooBar('Some text');
```

Клиент поддерживает вызов нескольких удаленных методов через один запрос:

```
$api = Api::batch();
$api->foo('params');
$api->bar(123);
$api->someMethod(1, true);
[$resultFoo, $resultBar, $resultSome] = $api->execute();
```

Клиент поддерживает кеширование результатов с помощью метода `cache`:

```
$result = Api::cache(10)->fooBar('Some text');
```

При таком вызове результаты будут закешированы на 10 минут, и последующих вызовах этого метода с такими же параметрами - запрос на сервер не будет посылаться, результат будет сразу получаться из кеша. Естественно, результаты кешируются только для успешных вызовов.

Также кеширование поддерживается и для нескольких вызовов:

```
$api = Api::batch();
$resultFoo = $api->cache(10)->foo('params');
$resultBar = $api->bar(123);
$resultSome = $api->cache(60)->someMethod(1, true);
[$resultFoo, $resultBar, $resultSome] = $api->execute();
```

Учтите, что кешироваться будет только тот метод, перед которым был вызван `cache`.

### Middleware

[](#middleware)

Классы-middleware позволяет внести изменения в исходящие запросы, например добавить дополнительные заголовки, включить авторизацию, либо внести изменения в само тело запроса.

Вы можете использовать свои классы, указав их имена в конфигурации необходимого подключения. Есть два типа middleware. Первый рассчитан на взаимодействие с каждым конкретным JsonRpc-запросом, даже если они запущены в batch-режиме. Второй тип запускается один раз на весь транспортный запрос.

Первый тип middleware запускается для каждого вызова метода в рамках одного запроса на сервер. То есть, если был сделан batch-запрос с вызовами 3х методов - каждая такая middleware будет запущена по одному разу для каждого вызванного метода.

Второй тип middleware будет запущен только один раз для всего запроса, и в него будет передан весь стек вызовов. Второй тип подходит для middleware, занимающихся добавлением кас томных заголовков, авторизации и прочих модификаций транспортного запроса.

В классе middleware должне быть реализован один метод - `handle`. Первые два параметра обязательные. Пример middleware для обработки каждого вызова в запросе (первый тип):

```
class SomeMiddleware
{
    public function handle(\Tochka\JsonRpcClient\Request $request, \Closure $next): void
    {
        // ...
        return $next($request);
    }
}
```

Пример middleware для обработки всего запроса целиком:

```
class SomeMiddleware implements \Tochka\JsonRpcClient\Contracts\OnceExecutedMiddleware
{
    /**
     * @param \Tochka\JsonRpcClient\Standard\JsonRpcRequest[] $requests
     * @param \Closure         $next
     */
    public function handle(array $requests, \Closure $next): void
    {
        // ...
        return $next($requests);
    }
}
```

Чтобы продолжить выполнение цепочки middleware, в методе необходимо обязательно вызвать метод $next, передав туда актуальную версию $request. Кроме того, вы можете в параметрах метода `handle` использовать:

- дополнительные параметры, передаваемые в конфигурации:

```
// config
'middleware'  => [
    \Tochka\JsonRpcClient\Middleware\AuthTokenMiddleware::class => [
        'name'  => 'X-Access-Key',
        'value' => 'TokenValue',
    ],
]

// middleware
use Tochka\JsonRpcClient\Request;

class AuthTokenMiddleware implements \Tochka\JsonRpcClient\Contracts\OnceExecutedMiddleware
{
    public function handle(array $request, \Closure $next, $value, $name = 'X-Access-Key')
    {
        // ...

        return $next($request);
    }
}
```

Порядок указание параметров не важен, указанные в конфигурации значения будут переданы в middleware по имени параметра.

- контекстные классы `Tochka\JsonRpcClient\Contracts\TransportClient` и `Tochka\JsonRpcClient\ClientConfig`. Если у параметра указать один из указанных типов, то в метод при вызове будут переданы текущие экземпляры классов, отвечающих за формирование транспортного запроса (например, сконфигурированный экземпляр класса `Tochka\JsonRpcClient\Client\HttpClient`) либо класс с конфигурацией текущего соединения.
- любой другой класс/контракт/фасад, зарегистрированный в DI Laravel

\[\]: [https://docs.guzzlephp.org/en/stable/request-options.html(описание](https://docs.guzzlephp.org/en/stable/request-options.html(%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5)

###  Health Score

65

↑

FairBetter than 99% of packages

Maintenance98

Actively maintained with recent releases

Popularity30

Limited adoption so far

Community21

Small or concentrated contributor base

Maturity93

Battle-tested with a long release history

 Bus Factor2

2 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~73 days

Recently: every ~131 days

Total

45

Last Release

7d ago

Major Versions

v1.1.3 → v2.0.0-beta12019-01-29

v1.1.4 → v2.0.0-beta22019-01-30

v2.2.0 → v3.0.0-beta12019-09-12

v3.4.1 → v5.0.x-dev2022-03-11

PHP version history (8 changes)v1.0.0PHP &gt;=5.6.4

v2.0.0-beta1PHP &gt;=7.1

v3.2.2PHP &gt;=7.2

v5.0.x-devPHP &gt;=7.4

v3.6.0PHP 7.4.\*|8.0.\*|8.1.\*|8.2.\*

v3.7.0PHP 8.0.\*|8.1.\*|8.2.\*

v3.8.2PHP 8.1.\*|8.2.\*|8.3.\*

v3.9.0PHP 8.1.\*|8.2.\*|8.3.\*|8.4.\*

### Community

Maintainers

![](https://www.gravatar.com/avatar/d5ec14fdcb7d670c749bdfe547cdcae4dd77a1eb173f01c6787217c8ef90b1d5?d=identicon)[tochka-developers](/maintainers/tochka-developers)

![](https://www.gravatar.com/avatar/dc33cf2a905842e2b7b452bb04d75ba24943d1c22fcffa8aa393d04c0ba20f3c?d=identicon)[darkdarin](/maintainers/darkdarin)

---

Top Contributors

[![lexxksb](https://avatars.githubusercontent.com/u/622791?v=4)](https://github.com/lexxksb "lexxksb (5 commits)")[![yekhlakov](https://avatars.githubusercontent.com/u/15815146?v=4)](https://github.com/yekhlakov "yekhlakov (5 commits)")[![orlovtech](https://avatars.githubusercontent.com/u/5249166?v=4)](https://github.com/orlovtech "orlovtech (3 commits)")[![Hatsunyan](https://avatars.githubusercontent.com/u/7223705?v=4)](https://github.com/Hatsunyan "Hatsunyan (1 commits)")[![parshikov](https://avatars.githubusercontent.com/u/983028?v=4)](https://github.com/parshikov "parshikov (1 commits)")[![TeslaFeo](https://avatars.githubusercontent.com/u/34583236?v=4)](https://github.com/TeslaFeo "TeslaFeo (1 commits)")[![kor2win](https://avatars.githubusercontent.com/u/14157021?v=4)](https://github.com/kor2win "kor2win (1 commits)")

---

Tags

jsonrpcjsonrpc-clientlaravelphplaraveljsonrpcjsonrpc-client

###  Code Quality

TestsPHPUnit

Static AnalysisPsalm

Code StyleLaravel Pint

Type Coverage Yes

### Embed Badge

![Health badge](/badges/tochka-developers-jsonrpc-client/health.svg)

```
[![Health](https://phpackages.com/badges/tochka-developers-jsonrpc-client/health.svg)](https://phpackages.com/packages/tochka-developers-jsonrpc-client)
```

###  Alternatives

[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

245.2k](/packages/aedart-athenaeum)[laravel/passport

Laravel Passport provides OAuth2 server support to Laravel.

3.4k85.0M532](/packages/laravel-passport)[roots/acorn

Framework for Roots WordPress projects built with Laravel components.

9682.1M97](/packages/roots-acorn)[getbrevo/brevo-php

Official Brevo provided RESTFul API V3 php library

963.1M35](/packages/getbrevo-brevo-php)[laravel-zero/framework

The Laravel Zero Framework.

3371.4M369](/packages/laravel-zero-framework)[swisnl/json-api-client

A PHP package for mapping remote JSON:API resources to Eloquent like models and collections.

211473.2k12](/packages/swisnl-json-api-client)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
