PHPackages                             freshcube1/moysklad1 - 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. freshcube1/moysklad1

ActiveLibrary[API Development](/categories/api)

freshcube1/moysklad1
====================

Origin: https://github.com/Tooyz/moysklad. Modified: https://github.com/EugeneGpil/moysklad

00PHP

Since Dec 1Pushed 2y ago1 watchersCompare

[ Source](https://github.com/freshcube1/moysklad1)[ Packagist](https://packagist.org/packages/freshcube1/moysklad1)[ RSS](/packages/freshcube1-moysklad1/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

Moysklad PHP
------------

[](#moysklad-php)

[![SensioLabsInsight](https://camo.githubusercontent.com/964effbc746a112aad22acbe7f0e4ce79d3899abbeea571ee51094b58cddb7fd/68747470733a2f2f696e73696768742e73656e73696f6c6162732e636f6d2f70726f6a656374732f35356563383666392d643532372d346262372d386534652d6364633330323639373238622f736d616c6c2e706e67)](https://insight.sensiolabs.com/projects/55ec86f9-d527-4bb7-8e4e-cdc30269728b)

Библиотека для сервиса "Мой склад" JSON API 1.1. Некоторые примеры можно найти в "tests". Все ещё далека от завершения.

Установка

----------

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

```
composer require tooyz/moysklad

```

**Запуск тестов:**
1\) composer global require phpunit/phpunit
2\) cd tests
3\) composer update
4\) Отредактировать Config.php
5\) phpunit --configuration="./phpunit.xml" &lt;ИЛИ&gt; npm run test

Класс MoySklad
--------------

[](#класс-moysklad)

Используется для авторизации, явно передается параметром в большинство компонентов т.к. возможно использование нескольких аккаунтов моегосклада одновременно.

`$sklad = MoySklad::getInstance($login, $password);`

Сущности
--------

[](#сущности)

**Основной объект библиотеки**

```
$product = new Product($sklad, [
    "name" => "Банан"
]);

```

**Можно, например, сделать так**

```
$product = new Product($sklad, [
    "id" => "12345-654321-123456-54321",
    "name" => "Банан"
]);
$product->fresh(Expand::create(['country']));

```

**Или так**

`$product->transformToClass(Counterparty::class);`

**Или не сделать. Большая часть логики делегирована другим классам.**

Получение сущностей
-------------------

[](#получение-сущностей)

**Получение всех сущностей:**

`$list = Product::query($sklad)->getList();`

**Можно добавить параметры запроса. Описание параметров в описании класса QuerySpecs.**

```
$list = Product::query($sklad, QuerySpecs::create([
    "offset" => 15,
    "maxResults" => 50,
]))->getList();

```

**Фильтрация. Описание методов FilterQuery в комментариях.**

```
$filteredList = Product::query($sklad)->filter(
    (new FilterQuery())
        ->eq("article", 12345)
);

```

**Поиск по строке. К Query-объекту можно прицепить expand для получения связей с указанными названиями**

`$searchedList = Product::query($sklad)->withExpand(Expand::create(['owner']))->search("трусы");`

**Функции выше возвращают объект EntityList.**

**Получение по id.**

`$product = Product::query($sklad)->byId("12345-654321-123456-54321");`

Создание, обновление
--------------------

[](#создание-обновление)

```
$counterparty = (new Counterparty($sklad, [
    "name" => "Васян"
]))->create();

```

**Некоторым сущностям нужно указать связи при создании. Например для customerorder нужно указание counterparty и organization, и опционально массив позиций**

```
$order = (new CustomerOrder($this->sklad))->buildCreation()
    ->addCounterparty($counterparty)
    ->addOrganization($organization)
    ->addPositionList($positions)
    ->execute();

```

**Для обновления то-же самое**

`$product->buildUpdate()->addCountry($country)->execute();`

Удаление
--------

[](#удаление)

`$product->delete()`;

Связи
-----

[](#связи)

**Чаще всего сущность полученная через api имеет какие-то связи**

`$product->relations;`

**Зная что, к примеру, у продукта есть связанный employee, но не зная название этого поля можно получить его так**

`$employee = $product->relations->find(Employee::class)`

**Так как связи обычно приходят в формате meta-объекта для получения полного объекта можно сделать так**

`$group = $product->relations->group->fresh()`

**А если связь - массив объектов типо такого, то на нем можно сделать операции описанные в разделе "Получение сущностей"**

`$products = $order->relationListQuery("positions")->getList()`

Список сущностей
----------------

[](#список-сущностей)

**EntityList - обертка для массива для работы с апи**

**Например получение assortment и превращение элементов в нужный тип**

`$differentProductsAndStuff = Assortment::query($sklad)->getList()->transformItemsToMetaClass();`

**Или массовое создание сущностей**

```
$neko = new Product($sklad, ["name" => "Кот"]);
$doge = new Product($sklad, ["name" => "Пёс"]);
$el = new EntityList($sklad, [$neko, $doge])->each(function($e) use($vasyan){
    $e->buildCreation()->addEmployee($vasyan);
})->massCreate();

```

**Можно превратить в массив**

`$el->toArray()`;

Работа с картинками
-------------------

[](#работа-с-картинками)

**Прицепление изображений к сущности**

```
$product->attachImage(ImageField::createFromUrl(
    "http://url.ru/img.jpg"
));

```

или

```
$product->attachImage(ImageField::createFromPath(
    "images/123.jpg",
    "renamed_image.jpg"
));

```

**Скачивание изображения**

```
$product->image->download('/usr/images/cat.jpg', 'normal');
/* normal, miniature, tiny - размеры изображений */

```

Specs
-----

[](#specs)

**Классы для конфигурации различных действий**

```
    ::create(["field"=>"value"]);

```

В метод create передаются поля конфигурации

**LinkingSpecs** используется для описания связывания сущности и других сущностей учавствующих в обновлении/создании первой

Имеет следующие поля:

**name** - имя, которое получит новая связь. Если не указано - будет использоваться имя сущности в моемскладе

**multiple** - связь будет массивом сущностей, то есть можно указать несколько связей с одинаковым именем

**fields** - взять только указанные поля для создания связи

**excludedFields** - взять все поля, кроме указанных

Пример добавления доп. поля к контрагенту

```
$specs = LinkingSpecs::create([
                 "name" => "attributes", //в апи доп поля хранятся в поле attributes
                 "multiple" => true //и являются массивом
             ]);
$counterparty = $counterparty->buildUpdate()
    ->addAttribute($attribute, $specs)
    ->addAttribute($attribute2, $specs)
    ->execute();

```

**QuerySpecs** конфигурация EntityQuery и RelationQuery объектов

Поля:

**limit** - количество результатов в одном отправляемом запросе (100 по умолчанию)

**offset** - сдвиг результатов

**maxResults** - максимальное возвращаемое количество результатов

**expand** - возможность получить результат с указанными связями (Expand объект)

**updatedFrom** - объекты, момент обновления которых меньше или равен значению, указанному в параметре (CommonDate объект)

**updatedTo** - объекты, момент обновления которых меньше или равен значению, указанному в параметре (CommonDate объект)

**updatedBy** - В выборку попадут все объекты, автором последних изменений которых является пользователь с uid, указанным в значении параметра.

```
Product::query($sklad, QuerySpecs::create([
            'maxResults' => 25,
            'expand' => Expand::create([Employee::$entityName]),
            'updatedFrom' => new CommonDate("2017-01-01"),
            'updatedBy' => "admin@admin"
        ]))->getList();

```

Публикации
----------

[](#публикации)

**Документные сущности поддерживают публикации**

**Получение**

```
$publications = $customerOrder->getPublications(QuerySpecs::create())

```

**Создание**

```
$publication = $customerOrder->createPublication($customTemplate)

```

**Удаление**

```
$customerOrder->deletePublication($publication)

```

**Получение публикации по id**

```
$publication = $customerOrder->getPublicationById("123-456")

```

Печать документов
-----------------

[](#печать-документов)

**Документные сущности поддерживают печать**

**Создание**

При создании запроса на печать можно передать либо AbstractTemplate либо EntityList&lt;AbstractTemplate&gt;

```
$export = $demand->createExport($templateEntity, 'xls');
$exports = $demand->createExport($templateList);

```

**Получение стандартных шаблонов**

```
$templates = $demand->getExportEmbeddedTemplates();

```

**Получение пользовательских шаблонов**

```
$templates = $demand->getExportCustomTemplates();

```

**Получение стандартного шаблона по id**

```
$templates = $demand->getExportEmbeddedTemplateById(123);

```

**Получение пользовательского шаблона по id**

```
$templates = $demand->getExportCustomTemplateById(123);

```

Отчеты
------

[](#отчеты)

**Содержат статические методы для получения отчетов.**

```
$report = DashboardReport::day($sklad);

```

**Некоторым можно указать особые поисковые запросы типо CounterpartyReportQuerySpecs**

```
$report = SalesReport::byEmployee($sklad, SalesReportQuerySpecs::create([
    "counterparty.id" => $cpId
]));

```

Аудит
-----

[](#аудит)

**История событий системы**

**Получить последние 5 контекстов по заказам покупателей**

```
$audits = Audit::query($this->sklad, QuerySpecs::create([
                  'maxResults' => 5
              ]))->filter((new FilterQuery())
                             ->eq("entityType", "customerorder")
                          );

```

**Получить события по контексту**

```
$events = $audit->getAuditEvents();

```

**Получить события по сущности**

```
$events = $customerOrder->getAuditEvents();

```

**Получить список фильтров**

```
$filters = Audit::getFilters($this->sklad);

```

Отладка
-------

[](#отладка)

Статический класс **RequestLog** содержит ограниченную историю запросов/ответов в апи.

Можно получить последний запрос/ответ

```
RequestLog::getLast()

```

Или все

```
RequestLog::getList()

```

По умолчанию для ограничения потребления памяти хранится 50 последних запросов, по достижению лимита старые запросы удаляются. Изменить лимит можно так:

```
RequestLog::setStorageSize(500); // 500 запросов
RequestLog::setStorageSize(0); //Без лимита

```

Другие библиотеки
-----------------

[](#другие-библиотеки)

- Ruby
- JavaScript/nodejs

###  Health Score

12

—

LowBetter than 0% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity0

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity20

Early-stage or recently created project

 Bus Factor1

Top contributor holds 50% of commits — single point of failure

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.

### Community

Maintainers

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

---

Top Contributors

[![freshcube1](https://avatars.githubusercontent.com/u/129696262?v=4)](https://github.com/freshcube1 "freshcube1 (1 commits)")[![rinatr1](https://avatars.githubusercontent.com/u/9809618?v=4)](https://github.com/rinatr1 "rinatr1 (1 commits)")

### Embed Badge

![Health badge](/badges/freshcube1-moysklad1/health.svg)

```
[![Health](https://phpackages.com/badges/freshcube1-moysklad1/health.svg)](https://phpackages.com/packages/freshcube1-moysklad1)
```

###  Alternatives

[stripe/stripe-php

Stripe PHP Library

4.0k143.3M478](/packages/stripe-stripe-php)[twilio/sdk

A PHP wrapper for Twilio's API

1.6k92.9M271](/packages/twilio-sdk)[knplabs/github-api

GitHub API v3 client

2.2k15.8M187](/packages/knplabs-github-api)[facebook/php-business-sdk

PHP SDK for Facebook Business

90121.9M34](/packages/facebook-php-business-sdk)[meilisearch/meilisearch-php

PHP wrapper for the Meilisearch API

73813.7M114](/packages/meilisearch-meilisearch-php)[google/gax

Google API Core for PHP

263103.1M454](/packages/google-gax)

PHPackages © 2026

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