Vladimir

Vladimir

С нами с 25 июня 2021; Место в рейтинге пользователей: #285

Как добавить выполнение моего снипета в очередь чтобы не мешать основной работе?

Есть скрипт что отправляет уведомление в ватсап, оно занимает время, хочу поставить его в очередь но не могу понять как, подскажите пожалуйста как это сделать?
Vladimir
10 февраля 2023, 18:20
modx.pro
2
755
0

Обновился до modx 3.0.3, но не могу грузить файлы, как исправить?

Поставил тип тв, изображение гружу через редактор, пишет ошибку, обновлю файл стоит.
Пытаюсь вывести на сайт, оно не появляется.
Пробовал через FastUploadTv тоже не работает, так же есть ошибки.

Could not load class: modPhpThumb from modphpthumb
Problem getting service modphpthumb, instance of class modPhpThumb, from path /var/www/vhosts/www.ww/www.ww/core/model/phpthumb/
Vladimir
31 января 2023, 15:23
modx.pro
552
0

Как получить отрендеренный output от ресурса по айди?

Нужно получить полностью отрендеренный ресурс, но допустим через консоль.
Я знаю что можно получить при событии, но как получить просто из-за запроса, допустим через консоль или плагин
Vladimir
27 января 2023, 20:09
modx.pro
581
0

modx DebugParser показывает {1 | resource}, но на странице нет, как его исправить?

При заходе и проверке страницы через дэбаг, вижу такую конструкцию
{1 | resource}
Найти не могу, просто не вижу, даже нет такой конструкции.
№2	{1 | resource}	52	0,0272337	0,364833
каких-то 52 запроса делает
Vladimir
20 января 2023, 06:57
modx.pro
497
0

Как создавать опции msync из списка?

Есть простой список с опциями синхронизациями, нужно их все заполнить из него быстро.

Что пытался:
1) Через newObject но он вообще не находит объект опции, схему смотрел класс копировал. Пытался через $xpdo-> а так же $modx
$newMsPr = $xpdo->newObject('mSyncProductProperty');
$newMsPr->set('source', 'ТЕСТПРИКОЛ');
$newMsPr->set('type', 1);
$newMsPr->set('target', 'testprikol');
$newMsPr->set('active', 1);
$newMsPr->set('default', 0);
$newMsPr->set('is_multiple', 0);
$newMsPr->set('is_primary', 0);
$newMsPr->save();
2) Пытался с эмулировать запрос. Но получал лишь 401 ошибку. Выполнял в косноли
<?php
    
function transliteCyrilic($value){
    $converter = array(
        'а' => 'a',    'б' => 'b',    'в' => 'v',    'г' => 'g',    'д' => 'd',
        'е' => 'e',    'ё' => 'e',    'ж' => 'zh',   'з' => 'z',    'и' => 'i',
        'й' => 'y',    'к' => 'k',    'л' => 'l',    'м' => 'm',    'н' => 'n',
        'о' => 'o',    'п' => 'p',    'р' => 'r',    'с' => 's',    'т' => 't',
        'у' => 'u',    'ф' => 'f',    'х' => 'h',    'ц' => 'c',    'ч' => 'ch',
        'ш' => 'sh',   'щ' => 'sch',  'ь' => '',     'ы' => 'y',    'ъ' => '',
        'э' => 'e',    'ю' => 'yu',   'я' => 'ya',
    );
 
    $value = mb_strtolower($value);
    $value = strtr($value, $converter);
    $value = mb_ereg_replace('[^-0-9a-z]', '_', $value);
    $value = mb_ereg_replace('[-]+', '_', $value);
    $value = trim($value, '_'); 
 
    return $value;
}


$chars = array("Объем, л", "Номенклатура");

$translated_arr = array();

$createUrl = 'https://example.com/assets/components/msync/connector.php/';
foreach ($chars as $char) {
        
        $params = array(
            'action' => 'mgr/property/create',
            'id' => '',
            'default' => '',
            'source' => $char,
            'type' => 1,
            'target' => transliteCyrilic($char),
            'is_multiple' => 0,
            'is_primary' => 0,
            'active' => 1
        );
   
        $myCurl = curl_init();
        curl_setopt_array($myCurl, array(
            CURLOPT_URL => $createUrl,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_POST => true,
            CURLOPT_POSTFIELDS => http_build_query($params)
        ));
        $response = curl_exec($myCurl);
        echo var_dump($response);
        die();
        curl_close($myCurl);    
    
}

die();
3) Сделал это всё на питоне, там авторизовывался в адмнке, но так же 401 ошибка.
import re
from requests import Session

LOGIN_CONTEXT = "mgr"
RETURN_URL = "/manager/"
USERNAME = "ashdjkashldkfjhasldf"
PASSWORD = "sadkfas;lkdjfh;lasd"
LOGIN_URL = "https://example/manager/"


msync_coonector = 'https://example/assets/components/msync/connector.php/'


def main():
	chars = {"Объем, л":"obem__l","Номенклатура":"nomenklatura"}

	with Session() as session:
		req = session.post(LOGIN_URL, data={"login_context": LOGIN_CONTEXT , 'returnUrl': RETURN_URL, 'username': USERNAME, 'password': PASSWORD, 'login': "1"})

		for char_key, char_value in chars.items():
			send_params = {
				'action': 'mgr/property/create',
				'id': '',
				'default': '',
				'source': char_key,
				'type': 1,
				'target': char_value,
				'is_multiple': 0,
				'is_primary': 0,
				'active': 1			
			}
			
			create_property = session.post(msync_coonector, data=send_params, timeout=60)

			print(create_property.text)


if __name__ == '__main__':
	main()
4) Пытался прям на месте через повторить запрос создания опции через chrome tools, но даже там получил ошибку 401, уверен что это из-за mod http auth
Vladimir
17 января 2023, 14:07
modx.pro
647
0

Почему я не могу сохранить данные в 2 новых поля при создании заказа?

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

$msOrder->set('myfield', $fielddata);
            $msOrder->set('myfield2', $fielddata2);
            $msOrder->save();
Пытался и так
$msOrder->set('myfield', $fielddata);
             $msOrder->save();
            $msOrder->set('myfield2', $fielddata2);
            $msOrder->save();
И разделял даже плагины на отдельные куски, то есть в каждом плагине было по 1 сохранению, но всё так же заполняется только последний, хотя данные для обоих.
Vladimir
13 января 2023, 08:57
modx.pro
450
0

Как вывести в лог списки, json объекты, в место всего получаю либо пустоту либо 1, как исправить?

При попытки вывести в лог получаю просто пустоту, хотя объект есть, ошибок нет.
$modx->log(modX::LOG_LEVEL_ERROR, 'ORG');
$modx->log(modX::LOG_LEVEL_ERROR, $dt['invoiceId']);
$modx->log(modX::LOG_LEVEL_ERROR, $_POST);
$modx->log(modX::LOG_LEVEL_ERROR, print_r($dt));
Пытался через
var_dump
через
print_r
Никак не получается, что я делаю не так?
Vladimir
13 января 2023, 07:41
modx.pro
527
0

Как сменить статус заказа при успешной оплате для minishop2?

После оплаты, идёт перенаправление на страницу, в параметрах странице уже есть такие параметры как
action,msorder,mscode
все они имеют значение что и должны, 1 это после успешной оплаты получит «success» 2й, это номер заказа, 3й это хеш заказа.

Так вот как после завершение удачной оплаты, как дать знать минишопу что заказ оплачен и можно менять статус на «Оплачено» допустим?

Модуль оплаты сделан вручную, существующих для нужной мне системы нет.
В моём модуле есть 2 метода что были переопределены, это метод «Send» и метод «getPaymentLink», мне нужно добавить ещё что-то? или что нужно сделать?

Так же самой системой оплаты на мою ссылку успешной оплаты, приходит ответ, и в ответе есть ключ с типом code
Vladimir
12 января 2023, 08:25
modx.pro
872
0

Как создать новый метод оплаты для minishop2?

Можете поделиться статьями как добавить свой метод оплаты, суть в оплате такая, получаем объект авторизации передав нужные поля, а так же номер заказа и сумму, и потом передать весь ответ от запроса на фронт, где с помощью js, будет создан объект оплаты, а так же уникальная ссылка, и перенаправит тоже через js. Сам метод оплаты вот epayment.kz/ru/docs/platezhnaya-stranica

Как можно это интегрировать с минишопом?

Сам код вроде есть, но можно ли его отправлять на сам сайт, не будут ли уязвимости.
Пока что код идёт через core, хотя это нигде прикреплено к минишопу, да и получается 403 ошибка, так как пытается подключить к core.

<?php
define('MODX_API_MODE', true);
require $_SERVER['DOCUMENT_ROOT'].'/index.php';

$params = [
    'grant_type' => 'client_credentials',
    'scope' => 'webapi usermanagement email_send verification statement statistics payment',
    'client_id' => $modx->getOption('epay_client_id'),
    'client_secret' => $modx->getOption('epay_client_secret'),
    'invoiceID' => $_POST['invoiceId'],
    'amount' => $_POST['amount'],
    'currency' => 'KZT',
    'terminal' => $modx->getOption('epay_terminal_id'),
    'postLink' => 'https://'.$_SERVER['HTTP_HOST'].'/core/components/epay/succsess.php',
    'failurePostLink' => 'https://'.$_SERVER['HTTP_HOST'].'/core/components/epay/error.php'
];


$debug = $modx->getOption('epay_debug');

$myCurl = curl_init();
curl_setopt_array($myCurl, array(
    CURLOPT_URL => $debug == 1 ? 'https://testoauth.homebank.kz/epay2/oauth2/token' : 'https://epay-oauth.homebank.kz/oauth2/token',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => http_build_query($params)
));
$response = curl_exec($myCurl);
curl_close($myCurl);

header('Content-type: application/json');
echo $response;
Как вариант этот код запихнуть в плагин и поставить обработчик и проверку, но это ведь тоже не правильно. Что лучше сделать в данной ситуации?
Vladimir
09 января 2023, 15:14
modx.pro
1
746
0

Как получить id заказа, при событии msOnCreateOrder?

Пытался так
$order->get('id');
и
$order->get('order_id');
но никак.
Суть задачи, при создании заказа, поставить галочку для заказа, галочка создана для msOrder но для этого нужно получить сам msOrder
Vladimir
09 января 2023, 06:38
modx.pro
450
0