JSON API позволяет работать напрямую с базой данных PHPShop через внешние JSON запросы. Поддерживаются команды выборки, редактирования, удаления и создания данных.
Авторизация
Для авторизации запроса используются Token
, его можно получить в разделе управления пользователем в закладке Права
секция Доступ по API
. Можно задать ограничение на принятие запросов только на Обзор, Редактирование и Создание.
Для смена или получения нового токена следует сменить пароль пользователя.
Запросы
Все запросы отправляются на адрес https://shopname.ru/base-xml-manager/json/
. В заголовке запроса должен быть обязателен указан Токен авторизации {TOKEN}
и передан массив данных $properties
определенного содержания с указанием откуда производится выборка и по каким критериям на основе языка запросов SQL
.
Примеры
Выборка всех полей последнего заказа базы.
PHP JavaScript 1C SQL Ответ
Copy // Массив передаваемых данных
$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));
Copy // Массив передаваемых данных
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);
}
});
Copy // Массив передаваемых данных
Запись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, Истина);
Copy select * from phpshop_orders order by id desc limit 1
Copy 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
способом. Пример:
Запрос SQL синоним JSON
Copy $properties = [
'from' => 'products',
'method' => 'select',
'vars' => 'id,name,price',
'where' => 'id=100',
'order' => '',
'limit' => '1'
];
Copy select id,name,price from phpshop_products where id="100" limit 1
Copy {
"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 - таблица каталогов
shopusers - таблица покупателей
Полный список таблиц с описанием доступен в панели управления База
- SQL запрос к базе
- Описание таблиц
.
Массив $properties
может содержать как один, так и сразу несколько запросов. Все они будут выполнены друг за другом в очередности нахождения в массиве.
Передача нескольких запросов
Запрос SQL синоним JSON Ответ
Copy $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'
];
Copy 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
Copy {
"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"
}
Copy Array
(
[0] => Array
(
[status] => succes
)
[1] => Array
(
[status] => succes
)
)
Выборка данных метод select
Запрос SQL синоним JSON Ответ
Copy $properties = [
'from' => 'orders',
'method' => 'select',
'vars' => '*',
'where' => '',
'order' => 'id desc',
'limit' => '1'
];
Copy select * from phpshop_orders order by id desc limit 1
Copy {
"from":"orders",
"method":"select",
"vars":"*",
"where":"",
"order":"id desc",
"limit":"1"
}
Copy 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
Запрос SQL синоним JSON Ответ
Copy $properties = [
'from' => 'products',
'method' => 'update',
'vars' => ['price'=>1000,'name'=>'New name'],
'where' => 'id=147',
'order' => '',
'limit' => '1'
];
Copy update phpshop_products set name="New Name", price="1000" where id="147" limit 1
Copy {
"from":"products",
"method":"update",
"vars":{"price":"1000","name":"New name"},
"where":"id=147",
"order":"",
"limit":"1"
}
Copy Array
(
[status] => succes
)
Удаление данных метод delete
Запрос SQL синоним JSON Ответ
Copy $properties = [
'from' => 'products',
'method' => 'delete',
'vars' => '',
'where' => 'id=142',
'order' => '',
'limit' => '1'
];
Copy delete from phpshop_products where id="142" limit 1
Copy {
"from":"products",
"method":"delete",
"vars":"",
"where":"id=142",
"order":"",
"limit":"1"
}
Copy Array
(
[status] => succes
)
Вставка данных метод insert
Запрос SQL синоним JSON Ответ
Copy $properties = [
'from' => 'products',
'method' => 'insert',
'vars' => ['price'=>1000,'name'=>'New name'],
'where' => '',
'order' => '',
'limit' => ''
];
Copy insert into phpshop_products set name="New name", price="1000"
Copy {
"from":"products",
"method":"insert",
"vars":{"price":"1000","name":"New name"},
"where":"",
"order":"",
"limit":""
}
Copy Array
(
[status] => succes
)
Создание нового заказа
Для упрощения создания нового заказа создан готовый веб-хук (используется группа JSON запросов) по адресу https://shopname.ru/base-xml-manager/json/add-order.php
Для создания заказа передается массив, состоящих из артикулов и количества товара в заказе. Для авторизации используется почта и пароль покупателя магазина. После запроса в базе магазина будет создан новый заказа со всеми персональными данными покупателя и отправлены оповещения на почту покупателя и администратору как при ручном заказе через сайт.
Включение веб-хука
Для включения возможности принятия заказов следует 10 строкой в этом файле веб-хука заменить значение $enabled=false;
на $enabled=true;
и указать токен авторизации , под чьими правами будут создаваться заказы.
Copy // Включение
$enabled= true;
// Токен
$TOKEN = '{TOKEN}';
// ID Способ оплаты Счет в банк
$payment = 3;
Запрос Ответ
Copy $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);
Copy Array
(
[status] => succes,
[order] => 1245-10
)
Коды ошибок
Status: 503 Service Temporarily Unavailable - веб-хук не включен
User login error - неверно указан логин и пароль покупателя
No items - товар не найден
Token not found - указан неверный API токен
Отправка почтового сообщения
Запрос Ответ
Copy $properties = [
'from' => '',
'method' => 'mail',
'vars' => ['mail'=>'user@mail.ru','title'=>'Status','content'=>'Test'],
'where' => '',
'order' => '',
'limit' => ''
];
Copy Array
(
[status] => succes
)
Использование
Описанный метод обмена информацией используется:
Интерактивный прайс-лист - автоматически заполняющийся, на основе каталога магазина, файл Excel, со встроенной виртуальной корзиной.
Монитор - приложение управления заказами для Windows.
JSON API доступно для версии PHPShop 6.0.9 и выше.