Наши телефоны:  

API обработки заказов

 

URL для запросов – https://toysi.ua/api.php

Кодировка всех запросов и ответов – UTF-8

Форма для тестирования https://toysi.ua/api-test.html

 

Коды товаров . 1

Создание заказа . 1

JSON-ответ на запрос создания заказа . 2

Коды ответа на запрос создания заказа . 3

Запрос статуса заказа . 4

JSON-ответ на запрос статуса заказа . 4

Коды ответов на запрос статуса заказа . 6

Коды статусов заказа . 7

 

Коды товаров

Коды товаров и текущие остатки товаров можно получить из XML-экспорта. (Ссылку на руководство по XML-экспорту выдаёт персональный менеджер). Код товара в XML – это атрибут id тега <offer> (учитывайте сдвиг id, если вы в ссылке экспорта используете параметр shift)

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

Параметры POST-запроса:

api_version (integer)

1

api_method (string)

"order_create"

auth_user (string)

Идентификатор пользователя API, который можно найти в личном кабинете

auth_key (string)

Секретный ключ пользователя API, который можно найти в личном кабинете

internal_order_id (string)

До 25 символов. Уникальный номер заказа в вашей БД. (Концевые пробелы удаляйте - они будут восприниматься как часть номера заказа)

positions_count (integer)

Количество позиций (не товаров) заказа. Максимальное количество – 1000.

positions_quantity (array)

Массив количества товара в позициях заказа. Ключами массива являются коды товаров нашего магазина. Пример : array(11623=>1, 11638 =>10)

При обработке входных данных, количество приводится к integer.

comment (string)

Необязательный. Комментарий к заказу. Максимальная длина комментария – 500 символов.

shipping_warehouse_id (integer)

Числовой номер склада перевозчика. Должен быть равен 0, если доставка на адрес, а не на склад/отделение

shipping_carrier_name (string)

Название перевозчика – произвольная строка. Для "самовывоза" нужно указывать строку " toysi" в сочетании с shipping_warehouse_id=1

shipping_city (string)

Город доставки. Желательно с областью и районом, чтобы исключить ситуации, когда город клиента может оказаться не тем, что у перевозчика (при создании ТТН), хотя название городов одинаковое.

shipping_city_id (string)

Идентификатор города по справочнику городов перевозчика. Необязательный в случае адресной доставки. В случае доставки на отделение перевозчика - обязательно указывать ( для того, чтобы корректно найти город и отделение ).

shipping_address (string)

Обязательный параметр. Но может быть пустой строкой, если shipping_warehouse_id>0

shipping_firstname (string)

Имя получателя

shipping_lastname (string)

Фамилия получателя

shipping_middlename (string)

Необязательный. Отчество получателя

shipping_phone (string)

Телефон получателя – 12 цифр, первые три из которых "380".

Пример: 380501234567

shipping_dt (string)

Желаемые дата и время доставки по киевскому времени

Пример: "2018-12-31 15 :30:00"

shipping_moneyback (float)

Сумма наложенного платежа в гривнах. Десятичный разделитель – точка.

Пример:  100.99

shipping_declared_value (integer)

Необязательный. Объявленная ценность посылки, в гривнах. Влияет на стоимость доставки транспортной компанией. Если параметр не указан или не является числом или число меньше минимально допустимого, то при создании ТТН будет использовано минимально допустимое (на данный момент это число 200).

redirect_url (string)

Необязательный. Если запрос выполняет браузер, то после создания заказа можно перенаправить пользователя на любой URL. В конец redirect_url будут добавлены GET-параметры (все параметры из json-ответа, кроме массивов), поэтому обязательно завершайте redirect_urlзнаком ? или &

Пример: https://example.com/?

api_mode (string)

Необязательный. Если равно " test", то заказ не будет обрабатываться менеджером. Существующий тестовый заказ удаляется при создании обычного заказа с тем же internal_order_id. Тестовые заказы старше 41 дней удаляются автоматически.

ttn (string)

Необязательный. Номер ТТН (для Новой Почты - 14 цифр)

 

Все параметры обязательны, кроме тех, которые объявлены необязательными.

JSON-ответ на запрос создания заказа

Все вещественные числа отдаются в виде строк. Разделитель – точка.

Описание элементов массива:

response_code (integer)

Код ответа. Таблица возможных кодов представлена ниже

response_msg (string)

Текст ответа

internal_order_id (string)

Уникальный номер заказа в вашей БД.

order_id (integer)

Номер заказа Toysi

sum (string)

Суммарная стоимость заказа без учета скидки, в гривнах

sum_with_discount (string)

Суммарная стоимость заказа с учетом скидки

personal_discount (string)

Персональная скидка. "0.15" означает 15%. (К некоторым товарам магазина скидка не применяется или применяется частично)

shipping_moneyback (string)

Сумма наложенного платежа в гривнах

positions_price (array)

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

positions_discount_price (array)

Массив цен заказанных товаров, с учетом скидки. Ключами массива являются коды товаров.

positions_name (array)

Массив названий заказанных товаров, в формате "[артикул] Название товара". Ключами массива являются коды товаров.

positions_quantity (array)

Массив количества  заказанных товаров. Ключами массива являются коды товаров.

 

Пример JSON-ответа

{

   "response_code":2,

   "response_msg":"Вы уже создали ранее заказ с таким номером internal_order_id.",

   "internal_order_id":" тест 1",

   "order_id":100022030,

   "sum":"3187.59",

   "personal_discount":"0.15",

   "sum_with_discount":"2709.43",

   "shipping_moneyback":"0",

   "positions_price":{

        "50485":"74.13",

        "50489":"74.13"

    },

   "positions_discount_price":{

        "50485":"63.01",

        "50489":"63.01"

    },

   "positions_name":{

        "50485":"[SM1585] Игрушка - Антистресс с ароматом "Squishy Панда"",

        "50489":"[SM1588] Игрушка - Антистресс с ароматом "Squishy Смайл""

    },

   "positions_quantity":{

        "50485":33,

        "50489":10

    }

}

 

При фатальных response_code, массив содержит только response_code и response_msg

{

   "response_code":3,

   "response_msg":"Не удалось создать заказ, повторите попытку."

}

Коды ответа назапрос создания заказа

Все, кроме кодов 1 и 2 – фатальные ошибки. Код 3 предполагает повторную попытку.

Если response_code=2 (а это возможно из-за задвоения http-запроса), то JSON-ответ такой же, как при response_code=1 – содержит информацию о заказе на момент его создания (см. пример JSON-ответа). Однако, изначальная информация о заказе – то, что было в момент его создания – хранится 40 дней. Если позже 40 дней попытаться повторно создать заказ с таким же internal_order_id, то ответ будет содержать только response_code=2, response_msg, internal_order_id, order_id.

response_code

response_msg

0

Неправильная версия API или метод API.

1

Заказ принят.

2

Вы уже создали ранее заказ с таким номером internal_order_id.

3

Не удалось создать заказ, повторите попытку

4

В запросе отсутсвует один или несколько обязательных параметров POST.

5

Неправильный пользователь или ключ API

6

Слишком длинный internal_order_id.

7

Неправильное или слишком большое число позиций заказа (максимум 1000)

8

positions_quantity не массив или пуст.

9

Длина массива positions_quantity не соответсвует числу позиций positions_count.

11

Один или несколько кодов товаров отсутствуют в нашей БД или неправильные.

12

Один или несколько ключей массива positions_quantity не являются integer.

13

Неправильное количество товара в одной из позиций.

14

Пустое имя получателя.

15

Пустая фамилия получателя.

16

Неправильный телефон получателя.

17

Неправильное время доставки.

18

Неправильная сумма наложенного платежа.

19

Пустое название перевозчика.

20

Пустой адрес доставки.

21

Пустой город доставки.

 

Запрос статуса заказа

Пожалуйста, обратите внимание на возможность получать статус сразу 500 заказов методом "order_status". Если вы не будете использовать эту возможность и будете слать запрос по каждому заказу отдельно, то, при некоторой активности продаж, вы столкнетесь с тем, что ваша программа будет только и делать, что посылать запросы. Наш сервер настроен принимать не более 5 запросов в секунду (с допустимыми всплесками 10 запросов в сек), а на запросы, не вписывающиеся в эти пределы, отдается ответ 503 Service Unavailable. (Функция PHP array_chunk() поможет очень просто разбить на части массив номеров заказов.)

Параметры POST-запроса:

api_version (integer)

1

api_method (string)

"order_status" – статусы и основная информация;

"order_positions" – в ответе этого метода будут массивы информации о текущих позициях заказа, плюс вся информация из ответа метода " order_status"

auth_user (string)

Идентификатор пользователя API, который можно найти в личном кабинете

auth_key (string)

Секретный ключ пользователя API, который можно найти в личном кабинете

order_id (string)

Номера заказов Toysi, разделенные запятыми. Дляметода "order_positions" можно указать только один номер заказа. Для метода " order_status" – до 500 номеров.

search_in (string)

Необязательный. Если равно "all_orders", то поиск будет осуществляться по всем заказам, иначе - только по заказам, созданным методами этого API.

 

JSON-ответ на запрос статуса заказа

Все вещественные числа отдаются в виде строк.

Описание элементов массива:

order_id (integer)

Номер заказа Toysi

status (integer)

Код статуса заказа. Таблица кодов приведена ниже

last_sum_update_dt (string)

Дата и время последнего изменения количества товаров или количества позиций или персональной скидки, влияющей на цены товаров и общую стоимость заказа. Если эти параметры заказа не редактировались менеджером, то last_sum_update_dt="0000-00-00 00:00:00"

Пример: "2018-12-31 23:01:59"

order_is_paid (integer)

0 – заказ пока не отмечен как оплаченный

1 – заказ отмечен как оплаченный

Процесс обработки заказа построен так, что order_is_paid может стать равным 1 не ранее, чем заказ получит статус Упакован. Поэтому значение 0 не означает, что оплата не поступила.

place_count (integer)

Количество мест посылки. Становится известно после упаковки

sum (string)

Суммарная стоимость заказа без учета скидки, в гривнах

sum_with_discount (string)

Суммарная стоимость заказа с учетом скидки

personal_discount (string)

Персональная скидка. "0.15" означает 15%. (К некоторым товарам магазина скидка не применяется или применяется частично)

shipping_moneyback (string)

Сумма наложенного платежа в гривнах

positions_price (array)

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

positions_discount_price (array)

Массив цен заказанных товаров, с учетом скидки. Ключами массива являются коды товаров.

positions_name (array)

Массив названий заказанных товаров, в формате "[артикул] Название товара". Ключами массива являются коды товаров.

positions_quantity (array)

Массив количества   заказанных товаров. Ключами массива являются коды товаров.

shipping_carrier_name (string)

(в разработке) Название перевозчика. Реализовано только для Новой Почты и Justin. Когда номер ТТН уже определён, отдаётся строка "Новая Почта" или строка "Justin", иначе отдаётся пустая строка.

TTN (string)

(в разработке) Номер ТТН. Реализовано только для Новой Почты и Justin. Когда номер ТТН уже определён, отдаётся номер ТТН, иначе отдаётся пустая строка.

 

Пример JSON-ответа (метод order_status)

{

   "100022020":{

        "order_id":100022020,

        "status":503

    },

   "100022030":{

        "order_id":100022030,

        "status":0,

        "last_sum_update_dt":"2018-12-31 23:01:05",

        "order_is_paid":0,

        "place_count":0,

        "shipping_carrier_name":"",

        "TTN":"",

        "sum":"3187.59",

        "personal_discount":"0.15",

        "sum_with_discount":"2709.43",

        "shipping_moneyback":"0"

    },

   "100022032":{

        "order_id":100022032,

        "status":0,

        "last_sum_update_dt":"0000-00-00 00:00:00",

        "order_is_paid":0,

        "place_count":0,

        "shipping_carrier_name":"",

        "TTN":"",

        "sum":"1482.6",

        "personal_discount":"0.15",

        "sum_with_discount":"1260.2",

        "shipping_moneyback":"101"

    }

}

 

Пример JSON-ответа (метод order_positions)

{

    "100022030":{

        "order_id":100022030,

        "status":0,

        "last_sum_update_dt":"2018-12-31 23:01:05",

        "order_is_paid":0,

        "place_count":0,

        "shipping_carrier_name":"",

        "TTN":"",

        "sum":"3187.59",

        "personal_discount":"0.15",

        "sum_with_discount":"2709.43",

        "shipping_moneyback":"0",

        "positions_price":{

            "50485":"74.13",

            "50489":"74.13"

        },

        "positions_discount_price":{

            "50485":"63.01",

            "50489":"63.01"

        },

        "positions_name":{

            "50485":"[SM1585] Игрушка - Антистресс с ароматом "Squishy Панда"",

            "50489":"[SM1588] Игрушка - Антистресс с ароматом "Squishy Смайл""

        },

        "positions_quantity":{

            "50485":33,

            "50489":10

        }

    }

}

 

При фатальных response_code, массив содержит только response_code и response_msg

{

    "response_code":404,

    "response_msg":" Заказ(ы) не найден (ы)."

}

Коды ответов на запрос статуса заказа

Если поиск по всем номерам заказов не дал ни одного результата, то будет выдан фатальный response_code =404. Если в запросе несколько номеров и хоть один заказ найден, то ответ не содержит response_code и response_msg. В этом случае в ответе будет информация только о найденных заказах. Если в массиве нет одного из номеров заказов из запроса, значит этот заказ не найден.

response_code

response_msg

0

Неправильная версия API или метод API

4

В запросе отсутсвует один или несколько обязательных параметров POST.

400

Неправильный номер заказа или слишком много номеров (максимум 500 для запроса статуса, максимум 1 для запроса позиций).

404

Заказ(ы) не найден(ы).

 

Коды статусов заказа

На любом из этапов заказ может откатиться в любой из предыдущих этапов или перейти в любой из следующих.

status

Название

Комментарий

0

Неопределённый

Заказ только что принят или находится между какими-то из двух этапов

10

Отменен

 

20

Частично зарезервирован

Некоторых товаров не оказалось на складе в нужном количестве, но их еще могут найти. Если не найдут, менеджер будет звонить и согласовывать уменьшение их количества

30

Полностью зарезервирован

По всем позициям заказа товар зарезервирован на складе

40

На сборке

 

50

Упакован

 

60

Отгружен

 

70

Доставлен

(в разработке) На данный момент этот статус не отдается никогда

80

Возвращен

(в разработке) Заказ отменен после того, как был отгружен. На данный момент этот статус не отдается никогда

503

Заказ очень старый

Заказ создан более 40 дней назад, поэтому он больше не обслуживается по API. Если у заказа этот статус, то опрос статуса этого заказа следует прекратить. В массиве JSON-ответа, для заказов с такими статусами нет никакой информации, кроме номера (см. пример JSON-ответа для метода order_status)