Всего 123 809 комментариев

Димыч
10 января 2023, 11:28
1
0
Продолжается отъем денег у неграмотного населения?

<img loading=lazy>
https://web.dev/browser-level-image-lazy-loading/

https://caniuse.com/loading-lazy-attr
Vladimir
10 января 2023, 11:07
0
Проблема регистрации была в том что я использовал
$modx
а тут нужно было
$this->modx
Алексей Смирнов
10 января 2023, 11:02
0
Вообще странно.
должны отображаться.
Проверьте версию php, чтобы была 7.4
И через информацию о системе (управление — отчеты — инф. о сист — phpinfo) посмотрите какая версия imagick
должна быть выше 3.5.1
Наумов Алексей
10 января 2023, 10:09
0
Да, что-то я совсем не то написал в своем сниппете)))
Vladimir
10 января 2023, 09:17
0
Вот сделал новый метод.
<?php

if (!class_exists('msPaymentInterface')) {
    require_once dirname(__FILE__, 3) . '/handlers/mspaymenthandler.class.php';
}

class EpayHalykBank extends msPaymentHandler implements msPaymentInterface
{

    /**
    * EpayHalykBank constructor.
    *
    * @param xPDOObject $object
    * @param array $config
    */
    function __construct(xPDOObject $object, $config = array())
    {
        parent::__construct($object, $config);

        $siteUrl = $this->modx->getOption('site_url');
        $assetsUrl = $this->modx->getOption('assets_url') . 'components/minishop2/';
        $paymentUrl = $siteUrl . substr($assetsUrl, 1) . 'payment/mspepayhalykbank.php';

        $this->config = array_merge(array(
            'grant_type' => 'client_credentials',
            'debug' => $modx->getOption('epay_debug'),
            'epayTokenAuthUrl' => $this->config['debug'] == 1 ? $modx->getOption('epay_test_auth_url') : $modx->getOption('epay_prod_auth_url'),
            'payPageUrl' => $this->config['debug'] == 1 ? $modx->getOption('epay_test_pay_page_url') : $modx->getOption('epay_pay_page_url'),
            'scope' => 'webapi usermanagement email_send verification statement statistics payment',
            'client_id' => $modx->getOption('epay_client_id'),
            'client_secret' => $modx->getOption('epay_client_secret'),
            'currency' => $modx->getOption('epay_payment_currency'),
            'terminal_id' => $modx->getOption('epay_terminal_id'),
            'postLink' => $modx->makeUrl($modx->getOption('epay_post_success_page_id')),
            'failurePostLink' => $modx->makeUrl($modx->getOption('epay_post_error_page_id'))
        ), $config);
    }



    /**
    * Create Auth Token
    *
    * @param 
    *
    * @return string
    */
    public function paymentAuth(msOrder $order)
    {
        $authUrl = $this->config['epayTokenAuthUrl'];

        $params = array(
            'grant_type' => $this->config['grant_type'],
            'scope' => $this->config['scope'],
            'client_id' => $this->config['client_id'],
            'client_secret' => $this->config['client_secret'],
            'invoiceID' => $this->getOrderHash($order),
            'amount' => $order->get('cost'),
            'currency' => $this->config['currency'],
            'terminal' => $this->config['terminal_id'],
            'postLink' => $this->config['postLink'],
            'failurePostLink' => $this->config['failurePostLink']
        );

        $myCurl = curl_init();
        curl_setopt_array($myCurl, array(
            CURLOPT_URL => $authUrl,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_POST => true,
            CURLOPT_POSTFIELDS => http_build_query($params)
        ));

        $response = curl_exec($myCurl);
        curl_close($myCurl);

        return json_decode($response, true);

    }


    /**
    * Returns a direct link for continue payment process of existing order
    *
    * @param msOrder $order
    *
    * @return string
    */
    public function getPaymentLink(msOrder $order)
    {

        $authResponse = $this->paymentAuth($order);

        $msAddress = $order->getOne('Address');
        $orderPhone = $msAddress->get('phone');
        $orderEmail = $msAddress->get('email');
        $orderReceiver = $msAddress->get('receiver');
        $orderComment = $msAddress->get('comment');

        if(substr($orderPhone, 0, 1) == '7'){
            $orderPhone = '+' . $orderPhone;
        }
        // if($authResponse['access_token'])
        // 'data' => "{\"statement\":{\"name\":\"Arman      Ali\",\"invoiceID\":\"80000016\"}}",

        return $this->config['payPageUrl'] . '?' .
        http_build_query(array(
            'action' => 'continue',
            'msorder' => $order->get('id'),
            'mscode' => $this->getOrderHash($order),
            'invoiceId' => $this->getOrderHash($order),
            'backLink' => $this->config['postLink'].'?action=success',
            'failureBackLink' => $this->config['failurePostLink'].'?action=error',
            'postLink' => $this->$siteUrl,
            'failurePostLink' => $this->config['failurePostLink'].'?action=error',
            'language' => 'rus',
            'description' => 'Оплата в интернет магазине',
            'accountId' => $this->config['client_id'],
            'terminal' => $this->config['terminal_id'],
            'amount' => $order->get('cost'),
            'data' => array(
                'name' => $orderReceiver,
                'orderId' => $order->get('id'),
                'invoiceId' => $this->getOrderHash($order),
                'phone' => $orderPhone,
                'email' => $orderEmail,                
                'comment' => $orderComment
            ),
            'currency' => $this->config['currency'],
            'phone' => $orderPhone,
            'email' => $orderEmail,
            'cardSave' => true,
            'auth' => $authResponse

        ));
    }
}
Пытаюсь зарегестрировать, так как в доках, через консоль
if ($miniShop2 = $modx->getService('miniShop2')) {
    $miniShop2->addService('payment', 'EpayHalykBank',
        '{core_path}components/minishop2/custom/payment/epayhalykbank.class.php'
    );
}
Где EpayHalykBank это имя класса оплаты. Но когда хочу добавить этот обработчик, он просто не появляется. Пути проверял, имя файла тоже проверил, он содержит class

Можете пожалуйста подсказать, как исправить?
Роман
10 января 2023, 00:37
0
Спасибо за ссылку, но я не понял что нужно сделать?
Поменять в файле core/model/modx/processors/system/phpthumb.class.php кусок кода или добавить, посмотрел, но у там все так же как у них там в пример тут github.com/modxcms/revolution/pull/15865 не понимаю
Михаил
09 января 2023, 17:50
0
Спасибо!
Сделал так
[[!ecMessages?
&threads=`*`
&tpl=`tpl.ecMessages.Row.all`
&limit=``
&messages=`[[!get? &need=`id`]]`
]]
сниппет get
<?php
return $_GET[$need];
Николай
09 января 2023, 17:32
0
Ну, в текущих реалиях свой впн (окно в мир) приоритетнее к сожалению.
Принимает ли линод российские карты это интересно-)) Я лет на 5 вперед денег закинул ещё до «всего этого», так что узнаю не скоро.
Алексей Смирнов
09 января 2023, 16:11
0
Вы не все параметры прочли. посмотрите параметр optionFilters
Наумов Алексей
09 января 2023, 16:09
0
Самое простое:

[[!ecMessages?
&threads=`*`
&tpl=`tpl.ecMessages.Row.all`
&limit=``
&messages=`[[!getMessageIdFromRequest]]`
]]
и создаем сниппет getMessageIdFromRequest:
<?
$messageId = intval($modx->getOption('id', $scriptProperties, 0));

return $messageId;
но тут нет никакой «защиты» от неверно переданного id (несуществующего, например, или удаленного).
Артур Шевченко
09 января 2023, 15:31
0
В minishop2 оплата на сайте не происходит. Во всяком случае не знаю ни одного модуля, который бы позволял произвести оплату не покидая сайт. В методе оплаты же есть метод getPaymentLink и именно он должен возвращать ссылку на страницу оплаты вашего мерчанта, после чего в обработчике заказа будет выполнен редирект.
Vladimir
09 января 2023, 15:26
0
Нужно чтобы именно был редирект на страницу оплаты, а не чтобы заполнение данных происходило через сайт.
Владислав
09 января 2023, 15:23
0
Понял, спасибо за ответ, попробую
Артур Шевченко
09 января 2023, 15:23
0
В minishop2 предусмотрена возможность добавлять собственные сервисы. Вот пример. В документации к вашему платёжному сервису есть раздел Платёж по API думаю вам стоит использовать именно этот способ проведения платежа, а не JS.
Владислав
09 января 2023, 15:21
0
Там не указан синтаксис выборки по опциям, только &where=`{«Data....} и &where=`{«Vendor....} и ни то ни другое не выводят опции.
Vladimir
09 января 2023, 15:16
0
Сам обработчик пытался сделать, и пытался регистрировать как показано в доках минишопа, но он даже не появляется.
<?php

if (!class_exists('msPaymentInterface')) {
    require_once dirname(__FILE__, 3) . '/minishop2/mspaymenthandler.class.php';
}

class mspEpayHalykBank extends msPaymentHandler implements msPaymentInterface
{

    /**
    * mspEpayHalykBank constructor.
    *
    * @param xPDOObject $object
    * @param array $config
    */
    function __construct(xPDOObject $object, $config = array())
    {
        parent::__construct($object, $config);

        $siteUrl = $this->modx->getOption('site_url');
        $assetsUrl = $this->modx->getOption('assets_url') . 'components/minishop2/';
        $paymentUrl = $siteUrl . substr($assetsUrl, 1) . 'custom/payment/mspepayhalykbank.php';

        $this->config = array_merge(array(
            'grant_type' => 'client_credentials',
            'debug' => $modx->getOption('epay_debug'),
            'paymentEpayUrl' => $this->config['debug'] == 1 ? 'https://testoauth.homebank.kz/epay2/oauth2/token' : 'https://epay-oauth.homebank.kz/oauth2/token',
            'scope' => 'webapi usermanagement email_send verification statement statistics payment',
            'client_id' => $modx->getOption('epay_client_id'),
            'client_secret' => $modx->getOption('epay_client_secret'),
            'currency' => 'KZT',
            'terminal' => $modx->getOption('epay_terminal_id'),
            'postLink' => $siteUrl.'/core/components/epay/succsess.php',
            'failurePostLink' => $siteUrl.'/core/components/epay/error.php'
        ), $config);
    }


    /**
    * @param msOrder $order
    *
    * @return array|string
    */
    public function send(msOrder $order)
    {
        if ($order->get('status') > 1) {
            return $this->error('ms2_err_status_wrong');
        }
        $params = array_merge(
            $this->config,
            array(
                'invoiceID' => $_POST['invoiceId'],
                'amount' => $_POST['amount'],                
            )
        );


        $response = $this->request($params, $this->getPaymentLink($order));
        if (is_array($response) && !empty($response['access_token'])) {

            return $this->success('', array('redirect' => $this->config['checkoutUrl'] . urlencode($token)));
        } else {
            $this->modx->log(
                modX::LOG_LEVEL_ERROR,
                '[miniShop2] Payment error while request. Request: ' . print_r(
                    $params,
                    1
                ) . ', response: ' . print_r(
                    $response,
                    1
                )
            );

            return $this->success('', array('msorder' => $order->get('id')));
        }
    }



    /**
    * Building query
    *
    * @param array $params Query params
    *
    * @return array/boolean
    */
    public function request($params = array(), $paymentEpayUrlFull)
    {
        $myCurl = curl_init();
        curl_setopt_array($myCurl, array(
            CURLOPT_URL => $paymentEpayUrlFull,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_POST => true,
            CURLOPT_POSTFIELDS => http_build_query($params)
        ));


        $response = curl_exec($myCurl);
        if (curl_errno($myCurl)) {
            $result = curl_error($myCurl);
        }


        header('Content-type: application/json');

        curl_close($myCurl);

        return $response;
    }


    /**
    * Returns a direct link for continue payment process of existing order
    *
    * @param msOrder $order
    *
    * @return string
    */
    public function getPaymentLink(msOrder $order)
    {
        return $this->config['paymentEpayUrl'] . '?' .
        http_build_query(array(
            'action' => 'continue',
            'msorder' => $order->get('id'),
            'mscode' => $this->getOrderHash($order),
        ));
    }
}
Роман
09 января 2023, 15:12
0
В итоге сделал так, вроде работает :), может кому зайдет еще.
Для проверки ID на конце alias воспользовfлся explode и end

<?php
if ($modx->event->name == 'OnDocFormSave') {
    
if ($mode == 'new') {
    // resource created
         if ($resource->get('template') == 2) {
    if (!empty($resource->get('alias'))) {
              $resource->set('alias',$resource->get('alias').'-'.$resource->get('id'));
              $resource->save();
        }else{
            $resource->set('alias',$resource->get('pagetitle').'-'.$resource->get('id'));
            $resource->save();
        }
}
}
else {
   // existing resource was updated
    if ($resource->get('template') == 2) {
  
         if (!empty($resource->get('alias'))) {
            
                 $array = explode('-', $resource->get('alias'));
                 $altid = end($array);

           if ($altid != $resource->get('id')) {
               $resource->set('alias',$resource->get('alias').'-'.$resource->get('id'));
               $resource->save();
             }
            
        }else{
            //$resource->set('alias',$resource->get('pagetitle').'-'.$resource->get('id'));
            //$resource->save();
        }  
    }
}
}
Михаил
09 января 2023, 14:21
0
Создал отдельную страницу — вывожу там отзыв
[[!ecMessages?
&threads=`*`
&tpl=`tpl.ecMessages.Row.all`
&limit=``
&messages=`5`
]]
Делаю ссылку отзыву «Читать весь отзыв» site.ru/reviews?id=5
Вопрос как автоматизировать этот процесс?
Артур Шевченко
09 января 2023, 13:44
0
Ну это больше похоже на целую статью, которую явно писал авторизованный пользователь. Мне кажется в этом случае использовать easyComm не очень удобно, я бы использовал Tickets или написал бы своё решение.