#JSON API

JSON API позволяет работать напрямую с базой данных PHPShop через внешние JSON запросы. Поддерживаются команды выборки, редактирования, удаления и создания данных.

#Авторизация

Для авторизации запроса используются Token, его можно получить в разделе управления пользователем в закладке Права секция Доступ по API. Можно задать ограничение на принятие запросов только на Обзор, Редактирование и Создание.

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

#Запросы

Все запросы отправляются на адрес https://shopname.ru/base-xml-manager/json/. В заголовке запроса должен быть обязателен указан Токен авторизации {TOKEN} и передан массив данных $properties определенного содержания с указанием откуда производится выборка и по каким критериям на основе языка запросов SQL.

#Примеры

Выборка всех полей последнего заказа базы.

// Массив передаваемых данных
$properties = [
    'from' => 'orders',
    'method' => 'select',
    'vars' => '*',
    'where' => '',
    'order' => 'id desc',
    'limit' => '1'
];

$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://shopname.ru/base-xml-manager/json/'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($properties)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'TOKEN: {TOKEN}', 'Content-Type: application/json', ));

header("Content-Type: application/json"); echo curl_exec($ch);

// Отладка //print_r(json_decode(curl_exec($ch),true));

// Массив передаваемых данных
var data = {};
data['from']='orders';
data['method']='select';
data['vars']='*';
data['where']='';
data['order']='id desc';
data['limit']= '1';

$.ajax({ url: 'https://shopname.ru/base-xml-manager/json/', type: 'post', data: JSON.stringify(data), dataType: 'json', headers: { 'TOKEN': '{TOKEN}' }, success: function (json) { // Отладка console.log(json); } });

// Массив передаваемых данных
ЗаписьJSon = Новый ЗаписьJSon;
ЗаписьJSon.УстановитьСтроку();
ЗаписьJSon.УстановитьНачалоОбъекта();

ЗаписьJSon.ЗаписатьИмяСвойства("from"); ЗаписьJSon.ЗаписатьЗначение("orders");

ЗаписьJSon.ЗаписатьИмяСвойства("method"); ЗаписьJSon.ЗаписатьЗначение("select");

ЗаписьJSon.ЗаписатьИмяСвойства("vars"); ЗаписьJSon.ЗаписатьЗначение("*");

ЗаписьJSon.ЗаписатьИмяСвойства("where"); ЗаписьJSon.ЗаписатьЗначение("");

ЗаписьJSon.ЗаписатьИмяСвойства("order"); ЗаписьJSon.ЗаписатьЗначение("id desc");

ЗаписьJSon.ЗаписатьИмяСвойства("limit"); ЗаписьJSon.ЗаписатьЗначение("1");

ЗаписьJSon.ЗаписатьКонецОбъекта(); СрокаJSON = ЗаписьJSon.Закрыть();

Запрос = Новый HTTPЗапрос("http://shopname.ru/base-xml-manager/json/"); Запрос.Заголовки.Вставить("TOKEN","{TOKEN}"); Запрос.УстановитьТелоИзСтроки(СрокаJSON); Результат = Соединение.ОтправитьДляОбработки(Запрос);

СтрокаРезультат = Результат.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8); ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(СтрокаРезультат); Ответ = ПрочитатьJSON(ЧтениеJSON, Истина);

select * from phpshop_orders order by id desc limit 1

Array
(
    [status] => succes
    [data] => Array
        (
            [id] => 29
            [datas] => 1601458072
            [uid] => 27-1
            [orders] => Array
                (
                    [Cart] => Array
                        (
                            [cart] => Array
                                (
                                    [52] => Array
                                        (
                                            [id] => 52
                                            [name] => Test product
                                            [price] => 5000
                                            [uid] => 123456
                                            [num] => 1
                                            [pic_small] => /UserFiles/Image/Trial/img52_37358s.jpg
                                            [total] => 5000
                                        )
                            )

                        [dostavka] => 0
                        [sum] => 5000
                    )

                [Person] => Array
                    (
                        [mail] => den@phpshop.ru
                        [dostavka_metod] => 3
                        [discount] => 0
                        [order_metod] => 3
                    )

                [num] => 1
                [sum] => 5000
                [weight] => 1000
                [dostavka] => 0
            )

        [status] => Array
            (
                [maneger] => 
                [time] => 30-09-2020 12:35
            )

        [user] => 0
        [seller] => 0
        [statusi] => 0
        [country] => 
        [state] => 
        [city] => 
        [index] => 
        [fio] => User
        [tel] => (926) 969-6636
        [street] => 
        [house] => 
        [porch] => 
        [door_phone] => 
        [flat] => 
        [delivtime] => 
        [org_name] => 
        [org_inn] => 
        [org_kpp] => 
        [org_yur_adres] => 
        [org_fakt_adres] => 
        [org_ras] => 
        [org_bank] => 
        [org_kor] => 
        [org_bik] => 
        [org_city] => 
        [dop_info] => 
        [sum] => 5000
        [files] => 
        [tracking] => 
        [admin] => 0
        [servers] => 0
        [paid] => 
        [bonus_minus] => 0
        [bonus_plus] => 0
        [moysklad_deal_id] => 
    )

)

В полях vars и where можно указывать условия выборки обычным для SQL способом. Пример:

$properties = [
    'from' => 'products',
    'method' => 'select',
    'vars' => 'id,name,price',
    'where' => 'id=100',
    'order' => '',
    'limit' => '1'
];

select id,name,price from phpshop_products where id="100" limit 1

{
    "from":"products",
    "method":"select",
    "vars":"id,name,price",
    "where":"id=100",
    "order":"",
    "limit":"1"
}

В ответ на запрос будет получен массив данных в формате JSON. В массиве data будет хранится информация из БД, в значении status будет статус ответа success, false или error. При наличии ошибки будет показан SQL код ошибки в поле error. Положительный результат выборки всегда дополняется статусом success.

В качестве имени from используются короткие имена таблиц в PHPShop, основные из них:

  • products - таблица товаров
  • categories - таблица каталогов
  • orders - таблица заказов
  • shopusers - таблица покупателей

Полный список таблиц с описанием доступен в панели управления База - SQL запрос к базе - Описание таблиц.

Массив $properties может содержать как один, так и сразу несколько запросов. Все они будут выполнены друг за другом в очередности нахождения в массиве.

#Передача нескольких запросов

$properties[] = [
  'from' => 'products',
  'method' => 'update',
  'vars' => ['price'=>1000,'name'=>'New name 1')],
  'where' => 'id=147',
  'order' => '',
  'limit' => '1'
];

$properties[] = [ 'from' => 'products', 'method' => 'update', 'vars' => ['price'=>1000,'name'=>'New name 2'], 'where' => 'id=148', 'order' => '', 'limit' => '1' ];

update phpshop_products set name="New Name 1", price="1000" where id="147" limit 1
update phpshop_products set name="New Name 2", price="1000" where id="148" limit 1

{
  "from":"products",
  "method":"update",
  "vars":{"price":"1000","name":"New name"},
  "where":"id=147",
  "order":"",
  "limit":"1"
},
{
  "from":"products",
  "method":"update",
  "vars":{"price":"1000","name":"New name"},
  "where":"id=148",
  "order":"",
  "limit":"1"
}

Array
(
    [0] => Array
    (
      [status] => succes
    )
    [1] => Array
    (
      [status] => succes
    )
)

#Выборка данных метод select

$properties = [
    'from' => 'orders',
    'method' => 'select',
    'vars' => '*',
    'where' => '',
    'order' => 'id desc',
    'limit' => '1'
];

select * from phpshop_orders order by id desc limit 1

{
    "from":"orders",
    "method":"select",
    "vars":"*",
    "where":"",
    "order":"id desc",
    "limit":"1"
}

Array
(
    [status] => succes
    [data] => Array
        (
            [id] => 29
            [datas] => 1601458072
            [uid] => 27-1
            [orders] => Array
                (
                    [Cart] => Array
                        (
                            [cart] => Array
                                (
                                    [52] => Array
                                        (
                                            [id] => 52
                                            [name] => Test product
                                            [price] => 5000
                                            [uid] => 123456
                                            [num] => 1
                                            [pic_small] => /UserFiles/Image/Trial/img52_37358s.jpg
                                            [total] => 5000
                                        )
                            )

                        [dostavka] => 0
                        [sum] => 5000
                    )

                [Person] => Array
                    (
                        [mail] => den@phpshop.ru
                        [dostavka_metod] => 3
                        [discount] => 0
                        [order_metod] => 3
                    )

                [num] => 1
                [sum] => 5000
                [weight] => 1000
                [dostavka] => 0
            )

        [status] => Array
            (
                [maneger] => 
                [time] => 30-09-2020 12:35
            )

        [user] => 0
        [seller] => 0
        [statusi] => 0
        [country] => 
        [state] => 
        [city] => 
        [index] => 
        [fio] => User
        [tel] => (926) 969-6636
        [street] => 
        [house] => 
        [porch] => 
        [door_phone] => 
        [flat] => 
        [delivtime] => 
        [org_name] => 
        [org_inn] => 
        [org_kpp] => 
        [org_yur_adres] => 
        [org_fakt_adres] => 
        [org_ras] => 
        [org_bank] => 
        [org_kor] => 
        [org_bik] => 
        [org_city] => 
        [dop_info] => 
        [sum] => 5000
        [files] => 
        [tracking] => 
        [admin] => 0
        [servers] => 0
        [paid] => 
        [bonus_minus] => 0
        [bonus_plus] => 0
        [moysklad_deal_id] => 
    )

) 1

#Обновление данных метод update

$properties = [
  'from' => 'products',
  'method' => 'update',
  'vars' => ['price'=>1000,'name'=>'New name'],
  'where' => 'id=147',
  'order' => '',
  'limit' => '1'
];

update phpshop_products set name="New Name", price="1000" where id="147" limit 1

{
  "from":"products",
  "method":"update",
  "vars":{"price":"1000","name":"New name"},
  "where":"id=147",
  "order":"",
  "limit":"1"
}

Array
(
    [status] => succes
)

#Удаление данных метод delete

$properties = [
  'from' => 'products',
  'method' => 'delete',
  'vars' => '',
  'where' => 'id=142',
  'order' => '',
  'limit' => '1'
];

delete from phpshop_products where id="142" limit 1

{
  "from":"products",
  "method":"delete",
  "vars":"",
  "where":"id=142",
  "order":"",
  "limit":"1"
}

Array
(
    [status] => succes
)

#Вставка данных метод insert

$properties = [
  'from' => 'products',
  'method' => 'insert',
  'vars' => ['price'=>1000,'name'=>'New name'],
  'where' => '',
  'order' => '',
  'limit' => ''
];

insert into phpshop_products set name="New name", price="1000"

{
  "from":"products",
  "method":"insert",
  "vars":{"price":"1000","name":"New name"},
  "where":"",
  "order":"",
  "limit":""
}

Array
(
    [status] => succes
)

#Создание нового заказа

Для упрощения создания нового заказа создан готовый веб-хук (используется группа JSON запросов) по адресу https://shopname.ru/base-xml-manager/json/add-order.php

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

#Включение веб-хука

Для включения возможности принятия заказов следует 10 строкой в этом файле веб-хука заменить значение $enabled=false; на $enabled=true; и указать токен авторизации, под чьими правами будут создаваться заказы.

// Включение
$enabled= true;

// Токен
$TOKEN = '{TOKEN}';

// ID Способ оплаты Счет в банк
$payment = 3;

$properties = [
    'art100'=>1, // Товар с артикулом art100 1 шт.
    'art200'=>2, // Товар с артикулом art200 2 шт.
];

$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://shopname.ru/base-xml-manager/json/add-order.php'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($properties)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'LOGIN: {MAIL}', 'PASSWORD: {PASSWORD}', 'Content-Type: application/json', ));

header("Content-Type: application/json"); echo curl_exec($ch);

Array
(
    [status] => succes,
    [order] => 1245-10
)

#Коды ошибок

  • Status: 503 Service Temporarily Unavailable - веб-хук не включен
  • User login error - неверно указан логин и пароль покупателя
  • No items - товар не найден
  • Token not found - указан неверный API токен

#Отправка почтового сообщения

$properties = [
    'from' => '',
    'method' => 'mail',
    'vars' => ['mail'=>'user@mail.ru','title'=>'Status','content'=>'Test'],
    'where' => '',
    'order' => '',
    'limit' => ''
];

Array
(
    [status] => succes
)

JSON API доступно для версии PHPShop 6.0.9 и выше.