Метода API shop.order.add - Required parameter is missing: contact Есть решение

Вобщем, передаю в метод такой массив данных (в json), пробовал разные варианты
{"contact_id":"3227","items":[{"sku_id":2322}]}
{"contact":"3227","items":[{"sku_id":2322}]}
{"contact":{"id":"3227"},"items":[{"sku_id":2322}]}

Пробовал передвать как в целочисленном формате, так и в текстовом, получаю в любом случае ответ (код ответа 400)

[error] => invalid_param
[error_description] => Required parameter is missing: contact

В описании метода (https://developers.webasyst.ru/api/explorer/shop/s...) подобная ошибка не рассматривается, как и в описании апи в целом я ее не нашел. Если кто-то сталкивался, или хотя бы подскажет в какой стороне искать ответ - буду крайне благодарен, всю голову уже поломал.

Еще такой момент - по началу забыл закодировать данные в json, и передавал просто массив данных php - заказ создавался, но без товаров (при этом код ответа 500 и тело пустое).


2 ответа

  • 1
    Богдан Кручинкин 29 января 2017 21:28 # Решение

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

    • +1
      Иван К Иван К 10 ноября 2019 17:12 #

      Здравствуйте Богдан!

      Выложите пож-та пример массива items для пост запроса (shop.order.add)

      , а то все вроде все поняли только примера за 2 года так никто не выложил и все наступают на одни и те-же грабли. Заранее спасибо.

  • 1
    Богдан Кручинкин 29 января 2017 04:30 #

    Видимо, запрос все же не надо кодировать в JSON. При отправке простого массива через cURL заказ создается, но товары не добавляются.

    • +1
      Джейсон Вюрхис Джейсон Вюрхис 26 октября 2017 17:00 #

      Скажите, а в итоге получилось создать заказ? Что-то не получается создать запрос правильно, пишет что обязательный параметр contact is missing. То что передаю:

      {"contact_id":54,"items":[{"sku_id":565,"quantity":3}]}

      • +1
        Иван К Иван К 10 ноября 2019 17:13 #

        Здравствуйте Джейсон!

        Решили вопрос? как в итоге правильно составить массив items для пост запроса (shop.order.add)?

        Заранее спасибо.

      • +1

        Пол дня тестов методом "тыка", гора матов в сторону тех, кто писал документацию по API (ну не ужели 1 пример нельзя было написать??)

        И вот результат, который, наконец-то заработал и создал заказ с ТОВАРАМИ!!! :)

        Оказалось, что contact_id, comments и items нужно передавать в теле запроса (body), а не в URL Params.

        Больше всего намучался с items, пока нашел, как их передавать, чтобы они воспринимались в shopOrderAddMethod как массив ассоциативных массивов.

        Для того, чтобы можно было задавать свою цену в запросе, пришлось немного подкорректировать shopOrderAddMethod (без этого она подставляется из данных товара):

        вместо

        $item['price'] = $sku['price'];

        ставим

        if (!isset($item['price'])) {
              $item['price'] = $sku['price'];
        }

        Рабочий запрос:

         $.ajax({
            url: "https://hobbi.kiev.ua/api.php?" + jQuery.param({
                "app": "shop",
                "method": "order.add",
                "access_token": "YOUR_TOKEN",
            }),
            type: "POST",
            headers: {
                "Content-Type": "application/x-www-form-urlencoded; charset=utf-8",
            },
            contentType: "application/x-www-form-urlencoded",
            data: {
                contact_id: '1',
                comment: 'тестовый заказ',
                items: [
                    {
                        sku_id: '491',
                        quantity: '2',
                        price: '15',
                    },
                      {
                        sku_id: '172',
                        quantity: '2',
                        price: '22',
                    }
                ],
            },
        })
        .done(function(data, textStatus, jqXHR) {
            console.log("HTTP Request Succeeded: " + jqXHR.status);
            console.log(data);
        })
        .fail(function(jqXHR, textStatus, errorThrown) {
            console.log("HTTP Request Failed");
        })
        .always(function() {
            /* ... */
        });

Добавить ответ

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