retailcrm / api-client-php

PHP client for RetailCRM API
http://www.retailcrm.ru
MIT License
60 stars 58 forks source link

Пример из документации #84

Closed squid46 closed 4 years ago

squid46 commented 4 years ago

Это вообще рабочая библиотека? Первый же пример из документации вызывает ошибку "Parameter 'site' is missing".

Neur0toxine commented 4 years ago

Здравствуйте!

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

Также рекомендуем ознакомиться с документацией к API retailCRM. В случае возникновения проблем или затруднений вы всегда можете обратиться в техподдержку.

squid46 commented 4 years ago

Здравствуйте. В том и дело, что в /api/v5/orders site не нужен. Поэтому и смутило. Да уж... А из "Грастин" я получаю только номер заказа и никаких сайтов. Можно пример на редактирование ордера? /api/v5/orders/{externalId}/edit Одни ошибки $response = $client->request->ordersEdit(array('number' => '55555', 'status' => 'dostavaka'), 'id', 'example-com'); Спасибо.

gwinn commented 4 years ago

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

$response = $client->request->ordersEdit(array('number' => '55555', 'status' => 'dostavaka'), 'id', 'example-com');

это корректный формат, но в данном примере у Вас нет указания идентификатора заказа, если исходить из того, что второй параметр Вы указали 'id', то надо использовать идентификатор заказа из retailcrm, т.е. примерно так:

$response = $client->request->ordersEdit(array('id' => 123, 'number' => '55555', 'status' => 'dostavaka'), 'id', 'example-com');

squid46 commented 4 years ago

Вот снова столкнулся - ну нельзя знать какой сайт из стороннего источника. И приходиться везде использовать эту библиотеку, а заказ запрашивать через file_get_contents

Neur0toxine commented 4 years ago

Параметр site при запросе конкретного заказа нужен если вы запрашиваете заказ по externalId т.к. уникальность externalId соблюдается в рамках магазина. Иными словами, в системе могут существовать два разных заказа с одинаковыми externalId, но только если они находятся в разных магазинах. А в пределах магазина externalId повторяться не должен. Поэтому без указания кода магазина (site) система просто не будет знать где искать запрашиваемый вами заказ.

Если вы хотите получать заказ по ID, то укажите в параметре $by метода ordersGet значение id. Если же вам вообще не нужна работа с несколькими магазинами, и вы хотите работать с одним конкретным, то выберите только его в настройках API-ключа.

squid46 commented 4 years ago

Всё, что вы говорите, понятно. Только по API при вызова метода orders этот параметр не обязателен. Написали бы и в библиотеке: есть сайт - фильтруем, а нету - ищем всё. А так он обязателен и без него ошибка.

Neur0toxine commented 4 years ago

Метод ordersList не требует передачу site. За получение заказа отвечает метод ordersGet, сигнатура метода не требует обязательной передачи site. Необходимость передачи site зависит от данных на стороне retailCRM, что я описал в предыдущем комментарии. https://github.com/retailcrm/api-client-php/issues/84#issuecomment-666450609