Павел Голубев

Павел Голубев

С нами с 21 февраля 2014; Место в рейтинге пользователей: #257
Василий Наумкин
02 октября 2023, 04:28
1
+3
Недавно решал подобную задачу, только сделал немного иначе.

Вместо передачи токена корзины в заголовке, у меня указывается uuid корзины как часть адреса для запроса, типа /api/web/cart/fc30e4d7-ed56-40ec-9f6e-69f1fcd70582.

Оформление заказа так же происходит с указанием uuid корзины /api/web/orders/fc30e4d7-ed56-40ec-9f6e-69f1fcd70582, после чего заказ получает уже собственный uuid, а старая корзина удаляется.

Таким образом, авторизация вообще не нужна, заказ можно создавать и просматривать гостям — главное знать нужные uuid, которые не поддаются перебору.

Теперь становится возможно менять опции товара прямо в корзине, и если выбранный комплект опций совпадает с другим пунктом корзины, то комплекты просто суммируются.
А как эти товары потом разделить обратно, если соединил по ошибке? Разрешать делать что-то, без возможности отмены, мне кажется несовсем правильным.
Баха Волков
09 апреля 2023, 19:28
1
+10
За внедрение линтеров получу много проклятий, наверное, но так действительно лучше
Іван Клімчук
14 декабря 2020, 11:18
1
+1
Да, вот здесь реализация github.com/modxcms/xpdo/tree/3.x/src/xPDO/Om/pgsql
Дмитрий
14 апреля 2020, 00:44
2
+3
REST API в 1С УНФ 1.6 пример получения остатков
<?php
$url = "https://XXX.XXX.XXX.XXX/SmallBusiness/odata/standard.odata/AccumulationRegister_ЗапасыНаСкладах/Balance?&%24select=Номенклатура_Key,СтруктурнаяЕдиница_Key,КоличествоBalance&%24format=json;odata=nometadata";

$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "odata.user:xxxxxxxxxxxxxxxxxxxxxxxx");
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Accept: application/json'));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");

$json = curl_exec($ch);
$err_status = curl_error($ch);
echo ("<pre>");
echo $err_status;
echo ("</pre>");
curl_close($ch);

$json = json_decode($json, true);

?>
Описание товара:
$url="https://192.168.1.52/SmallBusiness/odata/standard.odata/";
$url .= "Catalog_Номенклатура?%24filter=like(Description,'ИСКОМОЕ НАЗВАНИЕ')&%24select=*&%24top=10&%24format=json;odata=nometadata";
Ну и так далее. Работает быстро.
mSync теперь только заказы с сайта выгружает.
Павел Голубев
07 октября 2019, 17:56
3
+2
У TinyMCE Rich Text Editor есть баг. Если link_tag_scheme = abs, то некорректно вставляет ссылки на ресурсы и картинки.

Лечится так:
1. В системных настройках, в пространство имен tinymcerte добавляем tinymcerte.convert_urls = false
2. В файле core/components/tinymcerte/model/tinymcerte/events/tinymcerteonrichtexteditorinit.class.php:70 добавляем
'convert_urls' => $this->tinymcerte->getOption('convert_urls', array(), true) == 1,
3. Готово
Василий Наумкин
19 сентября 2019, 12:48
1
+1
Это более общее правило. try_files проверяет, есть ли $uri на диске, как физический файл, и если нет — то шлёт запрос дальше, на общий роутер.

У меня же конкретное правило — отправлять все запросы к /api сразу на api.php. Выходит, разница только в одной операции чтения диска, зато на каждый запрос.
Василий Наумкин
19 сентября 2019, 08:10
3
+4
Другой вариант, который уже больше подходит для концепции REST — отсылаем все запросы как и договаривались на адрес по маске /api/**/*
MODX предсказуемо выдаст событие onPageNotFound — ну а дальше как завещал @Василий Наумкин выстраиваем плагин маршрутизации — и делаем что захотим.
Это если решать все вопросы одним MODX. Да и тогда лучше использовать OnHandleRequest.

А так, лично я давно всё отправляю через Nginx:
location ~ ^/api/ {
    rewrite ^/api/(.*)$ /api.php?q=$1;
}
И там уже любые маршруты с контроллерами.
Павел Голубев
30 ноября 2018, 17:06
1
0
Тогда можно скачать advanced-дистрибутив, затем:
1. Распаковываем его. В нем 2 папки setup и core
2. Папку setup засовываем в document_root, а core выше document_root
3. Распаковывем <path_to_core>/core/packages/core.transport.zip что процесс установки прошел быстрее и не отвалился по таймауту.
4. Запускаем /setup/
5. Скрипт установки скажет, что не может найти core. Нужно указать путь до core
6. Готово. Та же самая инфа есть тут docs.modx.com/revolution/2.x/getting-started/installation/advanced-installation
Fi1osof
07 января 2016, 11:57
20
+12
Если ключ не хотите светить, то однозначно запрос надо слать с вашего сервера на донора. В MODX есть готовый CURL-клиент. Вот код для примера:
$client = $modx->getService('rest.modRestCurlClient');
$result = $client->request('https://ya.ru', '/', 'POST', $params = array('foo'  => 'foo'));
print $result;
Можете с этим кодом к консоли поиграться.