shop.product.add - оно работает? Принято

3

https://developers.webasyst.ru/api/explorer/shop/shop.product.add/
http://blog.megazubr.ru/2015/07/shop-script-apiv1.html
https://developers.webasyst.ru/forum/1620/api-funktsiya-shopproductadd/

Вот 3 ссылки, первая из которых это официальная документация, на которую, вроде как, мы должны ориентироваться. Надо ли говорить, что как в документации ничего не заработало, ибо {"error":"invalid_param","error_description":"Invalid param skus"}. Окей, пробуем как написано в 2 других статьях и результат абсолютно тот же. А теперь внимание вопрос: а сами разработчики вообще знают как работает их собственная система? И если да, то не могли бы они поделиться этими темными знаниями?

3 комментария

  • +1
    Михаил Ушенин Михаил Ушенин Webasyst 11 декабря 2017 15:26 #

    Заполните параметр 'skus' по вот такому образцу:

    [{sku: 'some-sku-code', name: 'some-sku-name', price: 100, available: 1}]

    Список полей, которые можно добавлять в этот массив для создания основного артикула при добавлении товара, можно посмотреть в описании метода product.skus.add.

    Спасибо, что сообщили о недочёте в документации! Скоро исправим.

    • +1
      Степан Родионов Степан Родионов 27 декабря 2017 12:11 #
      Внимательному читателю, конечно же, сразу очевидно, что то, что вы предложили, по сути аналогично конструкции из второй ссылки из 3, что я указал, только вы используете JSON представление того же массива.
       'skus' => array(
           '0' => array(
                'sku' => $product['articul'],
                'name' => $product['name'],
                'price' => $product['price'],
            ),
      ),

      Оба варианта: ваш и указанный порождают все то же {"error":"invalid_param","error_description":"Invalid param skus"}. И вот тут мне уже стало интересно, пришлось лезть в код самостоятельно. Опытным путем удалось установить, что скрипт падает в файле shop.product.add.method.php на вызове $this->checkSku($data). Но почему?

      Метод этот находится в классе shopProductUpdateMethod, от которого наследуется shopProductAddMethod - мы работаем с ним при добавлении продукта. И в этом методе ошибка происходит в фрагменте, который я привожу ниже

      if (!is_array($data['skus'])) {
      	throw new waAPIException('invalid_param', 'Invalid param skus');
      }

      Таким образом, параметр skus должен быть массивом, иначе ничего не получится. Логично, что строка

      [{sku: 'some-sku-code', name: 'some-sku-name', price: 100, available: 1}]

      порождает ошибку, она не массив. НО почему же тогда передача массива в $_POST тоже приводит к ошибке?

      Ответ прост - где-то на пути от файла api.php и до shop.product.add.method.php наш $_POST['skus'] превращается в Array. ShopScript приводит поля поста к строке!

      Что это значит для нас, как пользователей? А то, что в SS7 добавить товар с помощью API невозможно В ПРИНЦИПЕ!!! Ибо в checkSku() должен оказаться массив, а он туда никак и никогда не попадет. Мне правда очень интересно узнать - вы никогда не тестировали такую очевидно минорную для интернет-магазина функциональность, как добавление товаров через API или это какой-то хитрый план по продаже услуг сторонних интеграторов? Ведь чинится все в итоге элементарно. Мы передаем skus как в вашем примере, а непосредственно перед использованием прогоняем ее через json_decode. И чудо - все работает! Но обновление скорее всего убьет наше изменение. Возможно это досадное недоразумение пофиксили в каком-то из обновлений (у меня не самая актуальная версия шопскрипта), но это не избавляет разработчиков от ответственности за то, что они выпустили нерабочий продукт - эта фича должна работать "из коробки"!

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

      И последнее - на случай, если кто-то из разработчиков будет это читать. Самый лучший способ понять, что от нас хочет получить API шопскрипта это не ныть тут и не читать туториал, который либо безнадежно устарел, либо никогда не задумывался как рабочий, а открыть вкладку network в консоли и сделать из админки то, что хочется сделать через API. Вот вам и список полей в правильном формате.

      • +1
        Михаил Ушенин Михаил Ушенин Webasyst 27 декабря 2017 18:06 #
        НО почему же тогда передача массива в $_POST тоже приводит к ошибке?

        В тестовом магазине этого не происходит. Нужно диагностировать проблему в вашем частном случае. Или покажите, как она проявляется в магазине, созданном с помощью последней версии Shop-Script и Webasyst, потому что у вас

        не самая актуальная версия шопскрипта

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

        Чтобы добавить комментарий, зарегистрируйтесь или войдите