/var/log/life.log
Блог программиста из солнечной Бурятии

Передача произвольных данных в metadata модуля vampirus.yandexkassa

  1. переименовать папку bitrix/php_interface/include/sale_payment/yandexcheckoutvs например на yandexcheckoutex
  2. Изменить содержимое bitrix/php_interface/include/sale_payment/yandexcheckoutex/handler.php на
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?
    namespace Sale\Handlers\PaySystem;
    use Bitrix\Main\Request;
    use Bitrix\Sale\Payment;

    require($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/vampirus.yandexkassa/payment/yandexcheckoutvs/handler.php");

    class YandexCheckoutExHandler extends YandexCheckoutVSHandler
    {
        protected function getMetadata(Payment $payment, Request $request, $query)
        {
            return ['key' =>'value'];
        }
    }

    Метод getMetadata должен вернуть массив, который будет добавлен в metadata и передан в яндекс

  3. Добавить платежную систему выбрав новый обработчик  Платежная система яндекс касса

Удаление image.php в opencart

Если на сайте присутствуют файлы image.php и admin/image.php, и они заново создаются при их удалении, то нужно проверить список модификаторов на предмет подозрительных, удалить если есть. А затем очистить кеш. После этого можно удалять эти файлы и менять пароли на сайте.

Поиск по файлам в windows

Когда заменил HDD на SSD это была сказка при поиске по файлам, результат практически моментальный. Но со временем заметил, что всё уже не так быстро, как раньше. Как оказалось – виноват “Защитник Windows”. Да и в остальных случаях тормозов виноват в основном тоже он. Достаточно было добавить расширения файлов в исключения и поиск стал опять быстрым.

Минусы модуль кассы

  • Виснет
  • Что-бы передавать чеки с разной СНО, нужно велосипед придумывать
  • Нельзя напечатать чек коррекции
  • Достучатся до технического специалиста, тот ещё квест
  • Не отдаётся информация по СНО в чеке

Опять ПДФ

У DPD есть накладная и там есть штрихкод с её номером, но использовать его не получится, т.к. он только там и больше нигде по API не отдаётся. Пришлось выдергивать номер накладной из самой пдф, чтобы связать с заказом.

1
pdftotext -x 400 -y 50 -W 50 -H 6 -l 1 -nopgbrk dpd.pdf out.txt &amp;&amp; cat out.txt

Загрузка модели каталога из админского контроллера в opencart

На самом деле такое сделать без грязных хаков нельзя. Но можно пойти другим путём. Эта необходимость возникает, если нет желания дублировать и поддерживать код, который должен и с админской стороны и с фронтэнда отрабатывать. В opencart же загрузка моделей зависит от контекста, в котором происходит исполнение и $this->load->model(‘checkout/order’); в одном случае загрузит модель, в другом выдаст ошибку. Чтобы не дублировать код его нужно вынести в библиотеку, которая при необходимости будет проксировать запросы к ядерным моделям, в зависимости от контекста.
Читать полностью »

DHTMLX/scheduler и проблема 7 января hot fix

Описание проблемы http://habrahabr.ru/post/239423/
Толи фикс уже вышел, то ли нет, но сейчас поведение такое.

1
2
3
4
5
Tue Jan 06 2015 00:00:00 GMT+0800 (RTZ 7 (зима))
new Date(2015, 0, 7);
Wed Jan 07 2015 01:00:00 GMT+0900 (RTZ 7 (лето))
new Date(2015, 0, 8);
Thu Jan 08 2015 00:00:00 GMT+0900 (RTZ 7 (лето))

Что вызывает проблемы в методе увеличения даты в календаре.
У нас же календарь отказался уже 15 декабря работать, из-за особенностей реализации.
hot fix – перезаписать метод добавления времени в init методе
К оригиналу добавлено сравнение таймзон

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
scheduler.date.add=function(date, inc, mode){
            var ndate=new Date(date.valueOf());
            switch(mode){
                case "week":inc*=7;
                case "day":
                    ndate.setDate(ndate.getDate()+inc);
                    !date.getHours() && ndate.getHours()
                    && date.getTimezoneOffset()==ndate.getTimezoneOffset()
                    && ndate.setTime(ndate.getTime()+60 * 60 * 1000 *(24-ndate.getHours()));break;
                case "month":ndate.setMonth(ndate.getMonth()+inc);break;
                case "year":ndate.setYear(ndate.getFullYear()+inc);break;
                case "hour":ndate.setHours(ndate.getHours()+inc);break;
                case "minute":ndate.setMinutes(ndate.getMinutes()+inc);break;
                default:return scheduler.date["add_"+mode](date, inc, mode)}
                return ndate;
        }