Мой склад api php

Мой склад api php

Moysklad PHP JSON API library

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Мой склад api php. Смотреть фото Мой склад api php. Смотреть картинку Мой склад api php. Картинка про Мой склад api php. Фото Мой склад api php

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

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

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

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

Или так

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Получение

Создание

Удаление

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

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

Создание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

МойСклад LoyaltyAPI

API для интеграции МоегоСклада с системами лояльности.

Сценарий работы

Запросы осуществляются на определенный эндпоинт относительно базового адреса. Каждый из запросов содержит в своем составе ключ доступа.

Обработка ошибок

Если вознникла ошибка при обработке запроса, то она должна приходить с HTTP кодом, отличным от 200 и 201

Структура ошибок

Ошибки представляют собой массив errors, содержащий объекты error, каждый из которых описывает отдельную ошибку.

Структура объекта error

Сущности

Покупатель

Создание покупателя

Запрос на создание нового покупателя.

Атрибуты сущности

Request

Поиск покупателя

Запрос на поиск существующего покупателя.

Параметры

ПараметрОписание
searchstring Example: 9039993344 Строка с поисковым запросом

Атрибуты сущности

GET /counterparty?search=9039993344

Request

Response
200 (application/json)

Получение баланса баллов покупателя

Запрос на получение баланса покупателя. Поиск и идентификация покупателя идет по идентификатору покупателя id из метаданных. Прочие реквизиты несут информационный характер и могут не предаваться. Передача нескольких покупателей в ответе не допускается.

Атрибуты сущности

Атрибуты ответа

POST /counterparty/detail

Request

Response
200 (application/json)

Продажа

Расчет скидок для продажи

Запрос на пересчет скидок для операции продажи. В запросе передается продажа без применения скидок. В ответе ожидается продажа со всеми примененными скидками. В случае округления суммы чека, допускается разбиение одной позии на две.

После расчета скидок, приложение уже никак не меняет состав чека и не применяет другие скидки.

Атрибуты сущности

POST /retaildemand/recalc

Request

Атрибуты ответа

Response
200 (application/json)

Создание продажи

Запрос на создание новой продажи. Если при продаже начислялись или списывались баллы, информация об этом указывается в секции bonusProgram

Атрибуты сущности

Request

Возврат

Создание возврата

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

Атрибуты сущности

POST /retailsalesreturn

Источник

JSON API Мой Склад, самообучение

START UPDATE 2019-11-18
Заметил, что статья до сих пор для кого то служит источником информации.
Я сделал рефакторинг что бы сделать код более прямолинейным. По пути поправил пару досадных багов.
FINISH UPDATE 2019-11-18

Есть такой способ самообучения — как выполнение тестовых заданий. Его преимущество в том что объём задания конечен, сроки ограничены. Это не позволяет тянуть резину до бесконечности или самозабвенно вырисовывать завихрения и завитушки архитектурных изысков.

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

На этот раз надо было сделать страничку для формирования заказа покупателя в сервисе «Мой склад». Для меня это как полёт на Луну: в веб разработке я чуть меньше чем новичок, с фронтэндом знаком только по наслышке, а тут целую страницу надо разработать, ох ты Йожик!
Любая критика и советы приветствуются.

В коментах очень много ругательств, моё решение настолько ужасно, что для него сделали рефакторинг во что то приличное:
michael_vostrikov

От нечего делать сделал небольшой рефакторинг этого задания (хотя там много чего еще можно поменять), не столько для вас, сколько для тех, кто потом найдет в поиске эту статью:
коммиты, разметка, отправка формы.

Поехали!

Первым делом конечно гуглить, нагуглилась только ссылка на документацию, туториалов, примеров — ноль.

Ещё нагуглилось: «JSON API доступен для подписчиков на всех тарифах, кроме Бесплатного» уупс! Платного мне конечно ни кто не дал, покупать не камильфо, но я подумал что если дали такое задание, то наверное на Бесплатном что то там функционирует и продолжил работу.

И конечно нагуглилось «moysklad-client — npm — JavaScript клиент для комфортной работы с API сервиса МойСклад», но я с JS исключительно на «Вы», и по условиям задания, написать надо на PHP. Так что даже разбираться не стал, что там на JS можно делать.

Первое

Первое что надо сделать, это познакомиться с документацией. Познакомился.
Второе — составить план. Составил.
План, начало.
Действие первое — авторизация.
Действие второе — показать список Номенклатур.
Действие третье — добавить Заказ покупателя.
Действие четвёртое — добавить Позиции в Заказ покупателя.
Цель достигнута, конец плана.

Авторизация

Я видел код в котором для общения с API использовался cUrl. Я не знаю что такое cUrl, я не знаю как принято общаться с API, но если есть код который можно скопипастить, то проверить его пригодность не сложно. Скопировал вставил, обработал напильником — получилось.

Не буду утомлять вас интимными подробностями о дружбе напильника с копипастой, вот работающий код:

Итак, это была инициализация объекта curl для обмена сообщениями с сервером API.

Чистая копипаста, не спрашивайте меня почему так.

Показать список Номенклатур

Одних номенклатур оказалось мало, для Заказа покупателя, надо указать юридическое лицо Поставщика и контрагента Покупателя. У владельца учётки «Мой склад» может быть несколько юридических лиц, контрагентов — ясно понятно 100500, но конкретный Заказ покупателя, это заказ конкретного Контрагента в адрес конкретного Юридического лица.

Поэтому с номенклатурами обождём, займёмся сторонами «договора» — сделки.

Извиняюсь за ужасные названия констант, но мне с такими спокойней, точно ни с чем не перепутаю. Да я знаю что у case (switch) есть ветка default, но мне спокойней вбетонировать в код значение по умолчанию и не надеяться на превратности судьбы с case.

У каждой команды API свой адрес и свой метод, setCurl — устанавливает адрес и метод.

После этого методом getJuridicalPerson исполняем curl, получаем ответ в JSON, из ответа забираем только массив ‘rows’. Получили, сохранили, отложили.

С Контрагентами поступаем аналогично: setCurl => getCounterparty, Номенклатуры по тому же алгоритму: setCurl => getNomenclature.

Если бы это было не тестовое на два вечера после работы, а на два дня безработного специалиста, то можно было бы это автоматизировать, но это было тестовое в стиле — «лишь бы работало», поэтому я не стал изгаляться.

Для меня цель тестового была в том что бы пригубить и попробовать на вкус JSON API, рисовать красоту — цели не было.

Данные получили — это вообще не вопрос, дело дурацкое — дело не хитрое, интересней было как то это вывести на страничку, а потом со странички забрать, вот это была задачка.

Фронтэнд

Не знаю как правильно, я сделал так:

По клику на кнопку «Сформировать заказ покупателя», форма не отправляется — «return false;», но вызывается функция — «sendOrder();».

Источник

Примеры работы с API через PHP

Мой склад api php. Смотреть фото Мой склад api php. Смотреть картинку Мой склад api php. Картинка про Мой склад api php. Фото Мой склад api php

Можно ли где то увидеть простейшие примеры работы с API через PHP? Только начинаю разбираться со складом и пока мало что понятно.

Комментарии

Мой склад api php. Смотреть фото Мой склад api php. Смотреть картинку Мой склад api php. Картинка про Мой склад api php. Фото Мой склад api php

Мой склад api php. Смотреть фото Мой склад api php. Смотреть картинку Мой склад api php. Картинка про Мой склад api php. Фото Мой склад api php

Видел я тот SDK. Дело в том что я PHP знаю постольку поскольку, скажем на троечку, и мне он показался сложноватым для понимая.

Опять же там речь идет о работе с API используя этот SDK, а я прошу простой пример работы на чистом PHP.

Короче, помогите какими-то примитивами, а то вообще не знаю как к этому подступиться.

Мой склад api php. Смотреть фото Мой склад api php. Смотреть картинку Мой склад api php. Картинка про Мой склад api php. Фото Мой склад api php

По вопросам php не консультируем.

Для авторизации в АПИ используется такой же логин как и на сайте, то есть из вашего примера, логин в АПИ будет admin@emshop.

Мой склад api php. Смотреть фото Мой склад api php. Смотреть картинку Мой склад api php. Картинка про Мой склад api php. Фото Мой склад api php

Мой склад api php. Смотреть фото Мой склад api php. Смотреть картинку Мой склад api php. Картинка про Мой склад api php. Фото Мой склад api php

Наши интеграторы пишут на разных языках программирования, поэтому в привязке к конкретному языку консультаций мы не даем. Но в качестве рекомендации даем ссылки на СДК наших интеграторов.

Мой склад api php. Смотреть фото Мой склад api php. Смотреть картинку Мой склад api php. Картинка про Мой склад api php. Фото Мой склад api php

С авторизацией я разобрался, а так же научился создавать новый заказ и доп. поля к нему.

«Но в качестве рекомендации даем ссылки на СДК наших интеграторов.»

У вас к сожалению лишь одна ссылка на какой-то мутный SDK, автор которого написал, что там еще пилить его и пилить. Лучше бы вы давали так же ссылки на конкретные примеры работы со Складом по данному языку.

А на вопрос общего плана вы можете ответить? Не касаемо конкретной реализации.

При добавлении товара если не указать его цену, то она автоматически не подставляется из самого товара. Хотя она в нем указана. И в результате цена заказа 0. Можно ли сформировать такой запрос API чтобы цена бралась та, что задана у товара по умолчанию?

Мой склад api php. Смотреть фото Мой склад api php. Смотреть картинку Мой склад api php. Картинка про Мой склад api php. Фото Мой склад api php

Можете предоставить более подробную информацию о том куда и как вы добавляете товар?

Мой склад api php. Смотреть фото Мой склад api php. Смотреть картинку Мой склад api php. Картинка про Мой склад api php. Фото Мой склад api php

Вот кусок PHP кода:

$product_id = ‘56474ec4-a355-11e8-9ff4-31500042cb83’;
$post[‘positions’][0][‘quantity’] = 5;
$post[‘positions’][0][‘assortment’][‘meta’][‘href’] = «https://online.moysklad.ru/api/remap/1.1/entity/product/$product_id»;
$post[‘positions’][0][‘assortment’][‘meta’][‘type’] = «product»;
$post[‘positions’][0][‘assortment’][‘meta’][‘mediaType’] = «application/json»;

То есть, как видите я указываю количество, но не указываю стоимость товара. Потому что стоимость у товара задана уже вот здесь https://yadi.sk/i/52mdXB75EjI6EA

Но после выполнения запроса получаю новый заказ с пустым значением цены в товаре: https://yadi.sk/i/h_Rn-pZLXL9q-g

Мой склад api php. Смотреть фото Мой склад api php. Смотреть картинку Мой склад api php. Картинка про Мой склад api php. Фото Мой склад api php

Да, все верно, при создание заказа покупателя в нем нужно явно указывать стоимость продажи.

Если вы хотите создать заказ покупателя в котором в стоимости продажи будет проставлена цена товара, то вы можете предварительно запросить сам товар, и полученую в нем цену передать как стомоисть продажи.

Мой склад api php. Смотреть фото Мой склад api php. Смотреть картинку Мой склад api php. Картинка про Мой склад api php. Фото Мой склад api php

Выглядит немного странным что у товара есть цена, но чтобы ее проставить в заказе надо сделать дополнительный отдельный запрос на ее получение. Казало бы куда уж логичнее дать возможность подставить ее из товара. Ну ок. Если никак иначе, значит так.

Но оказалось, что это не так. С таким ID товар не выбирается при создании заказа. А выбирается только вот с таким ID: 56474ec4-a355-11e8-9ff4-31500042cb83

Этот ID товара я смог получить только путем запроса к API. Как видите эти 2 ID очень похожи, но все же разные. Почему так? Почему нельзя использовать для товара тот же ID что и в URL при его редактировании? И откуда нам брать «правильный» ID, чтобы по нему добавлять товар в заказ?

Мой склад api php. Смотреть фото Мой склад api php. Смотреть картинку Мой склад api php. Картинка про Мой склад api php. Фото Мой склад api php

Мой склад api php. Смотреть фото Мой склад api php. Смотреть картинку Мой склад api php. Картинка про Мой склад api php. Фото Мой склад api php

Откуда мы можем взять тот ID, по которому можно получить цену товара и потом по нему же добавить товар в заказ? Он где то доступен в интерфейсе?

Мой склад api php. Смотреть фото Мой склад api php. Смотреть картинку Мой склад api php. Картинка про Мой склад api php. Фото Мой склад api php

Нет, данный ID доступен только через АПИ

Предполагается, что если вы строите интеграцию через АПИ, вам нет смысла завязываать на UUID с UI. В таком кейсе uuidHref носит чисто справочную информацию

Мой склад api php. Смотреть фото Мой склад api php. Смотреть картинку Мой склад api php. Картинка про Мой склад api php. Фото Мой склад api php

Смотрите, я создаю добавляю товар в заказ как написано в документации. Там есть вот такая строка

Может товар можно добавить в заказ по другому? Чтобы вместо этого ID использовать что-то, что видно при редактировании товара через интерфейс пользователя?

Мой склад api php. Смотреть фото Мой склад api php. Смотреть картинку Мой склад api php. Картинка про Мой склад api php. Фото Мой склад api php

Запросить ID товаров в АПИ вы можете только через запрос списка товаров. И далее выбирать например по имени, какой подставлять в заказ

Мой склад api php. Смотреть фото Мой склад api php. Смотреть картинку Мой склад api php. Картинка про Мой склад api php. Фото Мой склад api php

Тут приходится строить более сложную интеграцию.
Мы выгружаем на сайт id всех товаров из МС и цены, чтобы сайт при отправке заказа мог использовать эти id.

Сопоставление товаров при выгрузке у нас делается по полю «код товара» (в МС нужно включить флажок, чтобы проверялась уникальность этого поля).

Мой склад api php. Смотреть фото Мой склад api php. Смотреть картинку Мой склад api php. Картинка про Мой склад api php. Фото Мой склад api php

Создаю счет на основе заказа покупателю:

В ответ получаю ошибку

Что делать? Путь-то вроде верный, скопирован из доков.

Мой склад api php. Смотреть фото Мой склад api php. Смотреть картинку Мой склад api php. Картинка про Мой склад api php. Фото Мой склад api php

Приведенной вами части кода недостаточно, что бы определить в чем заключается проблема.
Можете предоставить выполняемый вами запрос в виде curl-запроса?

Мой склад api php. Смотреть фото Мой склад api php. Смотреть картинку Мой склад api php. Картинка про Мой склад api php. Фото Мой склад api php

Проблема была в том, что запрос на создание шаблона счета должен идти методом PUT, а я посылал его методом POST.

Поменял POST на PUT и в результате получил некий новый шаблон созданный на основании заказа покупателя. Что мне с ним дальше делать? Как создать счет на основании этого шаблона?

Мой склад api php. Смотреть фото Мой склад api php. Смотреть картинку Мой склад api php. Картинка про Мой склад api php. Фото Мой склад api php

Для создания счета на основе шаблона, вам необходимо отправить полученый объект в запросе к ендпоинту

Не забудьте задать в полученном объекте значение поля name, так как в шаблоне оно отсутвует, но является обязательным для создания.

В ответ на запрос создания счета покупателю, вам прийдет json объект созданного счета, вам необходимо скопировать объект meta созданного счета, он потребуется далее.

Я так полагаю, что вы хотите привязать полученный счет покупателю к заказу покупателя, а после его оплаты, установить статус заказа как оплаченный.

Для привязки полученного счета покупателя к заказу, через ендпоинт

Передаем в поле invoicesOut, в массиве, полученный ранее объект метаданных счета покупателю. Таким образом счет покупателя будет привязан к заказу покупателя.

Для того что бы изменить статус заказа покупателя, необходимо, через тот же ендпоинт изменить заказ, передав в поле «state» объект метаданных требуемого статуса заказа.
Получить список доступных состояний заказов покупателя и их метаданные можно через ендпоинт

Источник

МойСклад API

Принцип работы

Наши разработчики уже разобрались как работает API для системы МойСклад и создали готовый коннектор. По такому же принципу мы сделали коннекторы с другими онлайн сервисами, всего их у нас уже более 200!

Теперь Вам не нужно тратить время на написание программного кода самостоятельно, связать 2 и более сервиса можно через наш онлайн интерфейс в несколько кликов!

Вот как выглядит работа нашей системы с другими системам

Мой склад api php. Смотреть фото Мой склад api php. Смотреть картинку Мой склад api php. Картинка про Мой склад api php. Фото Мой склад api php

Готовые интеграции

Как интегрировать МойСклад и другие системы
c помощью ApiX Drive по API

Возможности автоматизации МойСклад
с другими системами по API

Мой склад api php. Смотреть фото Мой склад api php. Смотреть картинку Мой склад api php. Картинка про Мой склад api php. Фото Мой склад api php

Популярные вопросы про интеграцию с МойСклад

Как происходит интеграция МойСклад?

Сколько времени нужно на интеграцию?

Сколько стоит интеграция МойСклад с другими системами?

Сколько готовых интеграций доступно для МойСклад?

«МойСклад» — это функциональная CRM-система для автоматизации склада на вашем предприятии и управления запасами. Система позволяет увеличить эффективность работы ваших складских комплексов в разы, снизить количество просроченной продукции, если речь идет о продуктовом бизнесе и сократить издержки на персонал, штрафные санкции со стороны контролирующих органов, и др.

«МойСклад»: интеграция по API

Чтобы использовать систему еще более удобно, можно интегрировать ее возможности с необходимыми сторонними сервисами и приложениями. Задачи могут быть самые разные. Например, нужно связать «Мой склад» с сайтом интернет-магазина, чтобы автоматически загружались данные об остатках на складе, эта информация синхронизировалась, в зависимости от продаж и заказов в режиме реального времени, и всегда была актуальной, в том числе изображения товаров.

Плюс еще нужно вести базу клиентов, и чтобы каждый заказанный товар бронировался для оплаты, и все это отображалось в «МоемСкладе». Еще может понадобиться настроить автоматическое поступление в систему данных от торгового и складского оборудования. Интеграция по API — это возможность объединить работу всех систем, которые вы используете в своей деятельности в одном интерфейсе. И разработчики «МоегоСклада» предусмотрели для этого широкие возможности: https://dev.moysklad.ru/ Осталось решить, кто их реализует.

Как интегрировать «МойСклад» по API

Чтобы выполнить апи-интеграцию «МоегоСклада» с другими сервисами и приложениями, можно воспользоваться услугами разработчиков. Но для этого потребуется время и средства. Более эффективное решение — онлайн-коннектор ApiXDrive. Он позволяет за считанные минут объединить работу любых сервисов с «МоимCкладом». Настраивается всё без специальных знаний и навыков, за 5 минут. С задачей справится любой сотрудник, благодаря простому и понятному интерфейсу. Попробовать работу сервиса можно совершенно бесплатно.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *