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

Ivan
22 июня 2023, 11:19
0
Можно через where и innerJoin вот так:
&innerJoin=`{ "Options":{ "class":"msProductOption"}}`
&where=`["Options.key = 'm2' AND Options.value > 600"]`
Dan
Dan
22 июня 2023, 09:27
0
Сам сайт не работает, лично у меня он не открывается. Видимо из-за этого и вылетает ошибка
Dan
Dan
22 июня 2023, 07:02
0
А если зайти в этот файл и посмотреть эту строчку кода, то что за авторизацию она проверяет?
Vladimir
21 июня 2023, 18:47
0
При успешной или нет оплаты, метод receive сам всё сделает, вам только нужно заменить айдишки статусов заказа на ваш, в текущем состаоянии как я ниже писал, что при оплате удачной или нет, сам епэй тригернёт файл который лежит в ассетах, со статусом оплаты, если пройдёт верификацю это запрос, то всё само сменится в методе receive
mekirile
21 июня 2023, 18:24
0
Подскажите, получилось перейти на новую версию?
Vladimir
21 июня 2023, 18:23
0
Насколько я помню при отправке запроса на оплату, тригерится метод send, в котором происходит запрос ключа, его верификация создания масива с данными, который летит на фронт, где его подхватывает их библиотека создаёт запрос, затем когда оплата произошла успешно или нет, автоматом от халык банка тригерится тот файл что находит в ассетах, именно он проверяет оплату если успешна то меняет статус.
Vladimir
21 июня 2023, 18:20
0
Да расширил, некий аля защитный механизм, можете убрать везде invoiceId, так как это сугубо моё решение. Ведь всё так же остается сам хэш. А как вы решили проблему?
Giant Dad
21 июня 2023, 18:12
0
Кстати, как я понимаю, Вы расширили класс msOrder, добавив к нему поле order_hash? Это для того, чтобы сохранять в базе подтверждение оплаты?
Giant Dad
21 июня 2023, 16:58
0
Получилось решить вопрос с оплатой благодаря Вам. Ещё раз спасибо огромное. Остался всего один момент, как сделать так, чтобы после успешного завершения оплаты, заказ получал статус «оплачен»? Ну, тоесть, я понимаю, что это делается через
$miniShop2->changeOrderStatus($orderId, $statusId);
но где это прописывать и как прокинуть номер заказа (invoiceId насколько я понимаю) из их ответа пока нет идей
Сергей Карпович
21 июня 2023, 16:57
0
ребята, при попытке закачать стоп-лист ботов получаю ошибку
....public_html/core/components/antibot/model/request/antibotcurl.class.php
«Unauthorized».

Никто не сталкивался?
Giant Dad
21 июня 2023, 12:16
0
да уж, с их ТП уже пришлось пообщаться, отвечают раз в день односложными фразами, половину приходится догадываться. ок, если что, напишу, ещё раз огромное спасибо
Vladimir
21 июня 2023, 12:12
0
1) prnt.sc/_-mnia_UC4Ie
2) prnt.sc/9UWwxd0Cg0DN

Те что закрашены вам нужно получить в вашем личном кабинете, а так же их js библиотека важна, вот как у меня работает отправка через их js

miniShop2.Callbacks.add('Order.submit.response.success', 'orders_submit_ok', function(responseMinishop) {
	
	if ($('#payment_4').is(':checked')) {
	    
        if(responseMinishop.data['payment_response']){
			halyk.pay(responseMinishop.data['payment_response']);
        }

	}
});
Если у вас всё же ошибка происходит, то значит эти обезьяны уже что-то изменили кардинально и не сообщили об этом своих клиентов, скорей всего это в методе авторизации, нужно смотреть и разбираться, а эти глупые вблдки из тех поддержки хр вам помогут, и будут отвечать 1-2 раза в день по почте, и такое чувство что там сидят люди ни разу не работавшие с их оплатой.

Если у вас получится самим решить напишите сюда, если до вечера не получится, напишите мне в тг я гляну
Giant Dad
21 июня 2023, 12:02
0
спасибо, действительно мне не хватало файла /assets/components/minishop2/payment/epayhalykbank.php
Сейчас метод оплаты появился, но при непосредственно попытке оформить заказ с этим способом оплаты, возникает ошибка «epayhalykbank.class.php: 215) [miniShop2] Payment error while request. Request:, authResponse: » Насколько я понимаю, это как раз из-за отсутствия настроек подключения. Попробую заполнить вручную. Если не сложно, скиньте скрин, пожалуйста
Vladimir
21 июня 2023, 11:57
0
Если вы ничего не меняли в моём файле, то должно работать, я ниже добавил так же файл assets его тоже создайте, и замените model на Handlers так как было у меня, а так же такие методы
$modx->getOption('epay_debug')
замените для начало просто строкой, если всё заработает то верните эти конструкции и создайте в системных настройках эти параметры и заполните, могу скинуть скрин как их нужно заполнить
Vladimir
21 июня 2023, 11:51
0
Почему у вас «model» в пути? какая у вас версия modx

Всё зависит от работы сервиса оплаты, в случае с epayment, то там запутанои уже не помню точно, но суть такая, на сервер отправляется запрос на получение ключа, формируется заказ в виде словаря, отправляется на фронт и с помощью библиотеки epayment которая указана в доках отправляется заказ, без этой библиотеки(именно js создаёт конечный урл с параметрами, который валиден и позволит оплатить, в тех поддержки сказали что без их js никак) не будет рабоать оплата.
Giant Dad
21 июня 2023, 11:38
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

        ));
    }
}
Заменяю в
require_once dirname(__FILE__, 3) . '/handlers/mspaymenthandler.class.php';
путь на свой:
require_once dirname(__FILE__, 3) . '/model/minishop2/mspaymenthandler.class.php';
название класса оставляю прежним,
регистрирую через
if ($miniShop2 = $this->modx->getService('miniShop2')) {
    $miniShop2->addService('payment', 'EpayHalykBank',
        '{core_path}components/minishop2/custom/payment/epayhalykbank.class.php'
    );
}
Может быть я что-то ещё упускаю?
И ещё, а вот как это должно вообще работать (хотя бы в общих чертах)? После нажатия кнопки «Оплатить заказ» что должно происходить? в каких файлах какие функции должны отрабатывать? Для меня просто оплата в minishop2 пока новый опыт и я не совсем представляю как это вообще работает