• Как передать данные чека на ККТ?

    @d-stream
    Готовые решения - не подаю, но...
    Добро пожаловать в АД(с) =)

    Более-менее лёгкий путь для атолов и поддерживаемых их дровами:
    1. изучаем предварительно ФФД 1.0, 1.05, 1.1
    2. качаем ДТО (драйвер торгового оборудования) и документацию с сайта атола
    3. изучаем немного форум техподдержки атола

    Ну а дальше - офигеваем от несогласованности возможностей ккм и версий ффд (помня что аналогичная косячность существует еще на связке ККМ-ОФД)

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

    Примерчики лежат в очень "феншуйном" месте Program Files (x86)\Atol\Driver8\Samples -)))))))))))
    Ответ написан
    Комментировать
  • Как передать данные чека на ККТ?

    allard
    @allard
    Серийный программист
    Не советую брать кассы ВикиПринт, есть проблемы с зависанием при работе с драйвером (хотя это возможно был баг конкретной кассы).
    Есть опыт эксплуатации кассы Атол 55ф. Api можно запросить у Атол. По быстрому гуглингу нашел апи для драйвера partner.atol.ru/files/dc/697/Rukovodstvo_programmi... , сокорее всего оно и нужно.
    Дальше подключаете кассу к ПК, поднимаете на нем приложение-сервер (службу), на который будут приходить запросы от сервера с сайтом. И уже работаете с кассой через ком-порт (драйвер) в рамках одного ПК.
    Единственное, что нужно помнить, кассу при работе через драйвер нужно постоянно опрашивать для получения данных.
    Ответ написан
    Комментировать
  • Возможно ли запретить адрес через htaccess?

    BOOMER_74
    @BOOMER_74
    Full-Stack разработчик
    Конечно можно.

    Главное чтобы было:
    AllowOverride AuthConfig
    или совсем:
    AllowOverride All
    Ответ написан
    3 комментария
  • Какой сервис использовать для подтверждения номера телефона?

    EnterSandman
    @EnterSandman
    Эникей
    Вы смотрите ценник на прямое подключение к оператору и желаемое имя отправителя
    При непрямом подключении ценник идёт от 25 до 6 копееек

    Сервис подтверждения по телефону - лучше искать оператора(ов) и поднимать свой астериск. - тут уж ценник разный. у официалов сейчас не скажу, у гоипщиков где-то 2 цента за минуту на мобильную россию
    Ответ написан
    2 комментария
  • Как подобрать сервер для сайта?

    opium
    @opium
    Просто люблю качественно работать
    сервис аля букинг срать на пинг 50
    рекомендую брать всем вот такой ru.hetzner.com/hosting/produkte_rootserver/ex51ssd
    дешево и сердито
    у вас видимо гавно интернет , у хетзнера очень толстые каналы в россию, либо вы сидите в глубинке, у меня даже в новосибирске оттуда тянет на хорошем инете мегабайт пять в секунду .
    нинасколько не критично, так как обычно говносайты отвечают так медленно что на этом фоне +50мс не то что не заметно, просто пылинка.

    если у вас будет 200к в месяц и много логики и прочего вам понадобится несколько серверов.
    Ответ написан
  • Могут ли повторяться последние 3 символа md5?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Какая разница, md5 это или что-то ещё? Вы берёте всего 3 символа. Это всего 16 ([a-f0-9]) различных значений каждого символа.
    16^3 = 4096.
    Ответ написан
    Комментировать
  • Могут ли повторяться последние 3 символа md5?

    alsopub
    @alsopub
    $start = time();
    $count = 100000;
    $sol = 'MMMddFF';
    
    
    $last = $start;
    $s = substr(md5($start.$sol), 32-3);
    echo('Last: '.$s.' at '.$start);
    for ($i=$start+1; $i<$start+$count; $i++) {
      $cs = substr(md5($i.$sol), 32-3);
    	if ($s == $cs) {
    		echo(', '.$i.' ('.($i-$last).')');
    		$last = $i;
    	}
    }

    Вывод (при каждом запуске будет разный):
    Last: 28e at 1465555315, 1465556570 (1255), 1465560504 (3934), 1465564842 (4338), 1465566966 (2124), 1465573478 (6512), 1465578452 (4974), 1465583075 (4623), 1465584411 (1336), 1465584970 (559), 1465584979 (9), 1465587163 (2184), 1465588138 (975), 1465588785 (647), 1465590518 (1733), 1465591232 (714), 1465593084 (1852), 1465594658 (1574), 1465595547 (889), 1465598000 (2453), 1465598371 (371), 1465604641 (6270), 1465604940 (299), 1465606505 (1565), 1465614302 (7797), 1465614573 (271), 1465615261 (688), 1465617863 (2602), 1465621976 (4113), 1465625562 (3586), 1465634715 (9153), 1465637881 (3166), 1465638949 (1068), 1465644427 (5478), 1465646584 (2157), 1465652096 (5512), 1465653125 (1029)


    Частоту повторений можно прикинуть.
    Число комбинаций из 3х символов md5 - 16^3 = 4096, что есть в среднем каждые 4096 единиц будет повторение.
    Повторю - в среднем, без гарантии.

    Каждый символ md5 - это 0...9 + a...f итого 16 вариантов.
    Комбинаций из трех таких символов - 16 в степени 3 - это азы комбинаторики.
    То есть у нас всего 4096 возможных концовок md5.
    md5() в среднем дает статистически непредсказуемое (читайте - случайное) значение.
    Значит шанс получить заданную последовательно - 1/4096, что дает повторение через (в среднем) 4096.

    PS. В данном случае совершенно не имеет значения откуда брать эти 3 символп - с конца, с начала, с середины, даже с произвольного места каждый раз и даже если эти три символа брать из разных случайных позиций - результат один - 4096 вариантов, псевдослучайное распределение, повторение в среднем через 4096.
    Ответ написан
  • Возможна ли реализация такой схемы на виртуальной АТС и у кого?

    eapeap
    @eapeap
    Сисадмин, Беларусь
    Да.
    Покупаете у своих операторов номера, настраиваете виртуальные АТС, прописываете на каждом из 2-х телефонов подключение к 2-м АТС.
    5-6 номеров в других городах России и далее в иных странах

    Не мало ли телефонов операторов? Но АТС может говорить "Все операторы заняты, ждите..."
    Ответ написан
  • Как задать свойства следующего элемента?

    soprun
    @soprun
    Software Architecture
    .panel {
    	border: 1px solid black;
    }
    .panel + .panel {
    	border-top-color: red;
    }

    Ну или же через nth-child
    Ответ написан
    Комментировать
  • Как организовать выход с личного кабинета на сайте на всех устройствах?

    Machez
    @Machez
    Бу!
    Обычно на сервере хранят токены авторизации для каждого пользователя. А при выходе со всех устройств удаляют эти ключи по маске.

    Пример алгоритма с использованием Redis.

    1) При авторизации создается ключ вида auth:[user_id]:[token] = true. Токен - штука уникальная. Например md5(строка + соль).
    2) Этот самый token кладется в куку клиенту.
    3) Если у клиента есть есть кука с токеном и соответствующий ключ зарегистрирован в Redis - значит на данном устройстве клиент авторизован.
    4) При необходимости разлогинить человека на всех устройствах из Redis удаляются все ключи соответствующие маске auth:[user_id]:* и всё.
    Ответ написан
    8 комментариев
  • Каков правильный синтаксис для preg_replace и fetch_assoc() mysql?

    Defman21
    @Defman21
    $i = $result->fetch_assoc();
    preg_replace_callback("/\{(.*?)\}/", function ($m) use ($i) { return $i[$m[1]]; }, $text);
    Ответ написан
    Комментировать
  • Почта для домена: gmail vs. яндекс

    @psthv2
    У меня есть действующая доменная почта для гугла и яндекса. Если кратко:
    Google Apps Яндекс
    Платно — бесплатно
    Фильтры плохи — хорошие
    Скорость загрузки низкая — высокая
    Возможность пересылать несколько писем отсутсвует — присутсвует
    Удобство гугл аккаунта как единственного аккаунта — нет такой опции
    Интерграция с гугл диском и гугл докуементами есть — жалкое подобие в виде яндекс диска
    Синхоронизация контактов с телефоном отличная — через жопу
    Интерфейс ногу сломаешь — отличный
    Встроенный календарь отличный — говно
    Возможность встраивать приложение для почты (например плагины для систем управления проектами) прямо в веб-морду gmail — нет таких опций (насколько мне известно).
    Возможность отправлять письма с задержкой с помощью сторонних платных приложений — бесплатная встроенная возможность.
    Возможность создавать любое количество псевдонимов для почты — можно использовать в качестве псевдонима формат типа <номертелефона>yandex.ru
    Приятный интерфейс написания нескольких писем без закрытия основного веб-интерфейса — нет такого интерфейса.
    Нет уведомления получателя по СМС — есть такое уведомление.

    Функциональность Gmail огромна, но во многих местах реализована не шибко юзерфрендли.
    Ответ написан
    2 комментария
  • Как быть с безопасностью при приеме платежей на внутреннем счете сайта?

    nmk2002
    @nmk2002
    работаю в ИБ
    Отследить попытку взлома можно следующим образом. Во-первых, настройте двухфакторную аутентификацию. Во-вторых, контролируйте неудачные попытки входа. Сервера аутентификации поддерживают функционал блокировки аккаунта при нескольких неудачных попытках входа.
    В качестве двухфакторки в вашем случае рекомендую OTP (OATH HOTP, TOTP) в выдачей аппаратных токенов, либо приложение на смартфоне, либо по СМС.

    Можете требовать подтверждения покупки по телефону пользователя или про email. Говоря проще, используйте второй канал для подтверждения заказа. Тогда компрометация аккаунта не позволит потратить средства клиента.

    Можно еще снимать fingerprint печати на клавиатуре пользователей при регистрации, а потом проверять соответствие. Это тоже по сути аутентификация.

    Ну и проверять по IP место откуда зашел пользователь не лишнее. Если пользователь живет в г. Саратов, и вдруг покупает софт на все деньги находясь в Зимбабве, то смело приостанавливаете заказ и производите дополнительную проверку.
    Ответ написан
    6 комментариев
  • Как быть с безопасностью при приеме платежей на внутреннем счете сайта?

    Как быть с безопасностью? Например как вовремя отследить попытку взлома личного счета, чтобы хакер не успел купить товары на сайте(в случае успешного взлома)?


    1. Есть ли возможность вывода денег из системы? Если да, то на какие платежные системы? Если нет, то какой смысл куллхацкеру ломать чей-то аккаунт? Тем не менее, у steam аналогичный сервис, деньги выводить нельзя, изучайте.

    2. Товары цифровые или материальные?

    3. С помощью личного счета можно совершать покупки только в вашем магазине? Если нет, то учитывайте, что вы становитесь платежной системой.

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

    Не сочтите за грубость, но, честно говоря, идея бредовая, себе же усложняете жизнь совершенно ненужным клиентам функционалом.

    p.s.
    Если уж очень хочется, то используйте SMS OTP для авторизации заказов с личного счета.
    1. Клиент оформил заказ в ИМ с внутреннего кошелька.
    2. На телефон клиента приходит СМС "Вы оформили заказ на сумму, чтобы подтвердить введите код, присланный в СМС"

    Не забудьте, что вам необходимо также контролировать изменение тел. номера. Н.п., чтобы подтвердить изменения тел. номера в аккаунте, необходимо подтвердить это действие через почту (приходит mail "подтвердите изменение тел. номера").
    А так да, дурацкая у вас идея :)
    Ответ написан
    3 комментария
  • Wysihtml5 bootstrap - как запретить обрезку пустых строк(обрезает пустую строку если нажать 2 раза на Enter после последней строки)?

    @WebEditor
    Шаг 1. в файле wysihtml5-0.3.0.js закомментируйте код в строках 5869 - 5870:

    composer.commands.exec("insertLineBreak");
    event.preventDefault();


    У Вас должно быть так:
    if (keyCode === wysihtml5.ENTER_KEY && !wysihtml5.browser.insertsLineBreaksOnReturn()) {
    //composer.commands.exec("insertLineBreak");
    //event.preventDefault();
    }


    Шаг 2. в файле wysihtml5-0.3.0.js закомментируйте код в строке 8847.
    Т.е. должно быть так:
    if (keyCode === wysihtml5.ENTER_KEY) {
              //callbackWrapper(event);
            }


    И все будет работать как нужно.
    Ответ написан
    Комментировать
  • В чем ошибка при создании триггера?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    ; забыли после инсерта
    Ответ написан
    Комментировать
  • Как правильно создать Rewirite?

    @WebEditor Автор вопроса
    Сорри, сглупил спросонок))

    RewriteEngine On
    RewriteRule ^test/([^/]*)/rule/([^/]*)$    /index.php?test=$1&rule=$2 [L]
    RewriteRule ^Error/([^/]*)/([^/]*)$       /index.php?Error=$1&text=$2 [L]


    P.S.: поправьте если не прав)
    Ответ написан
    Комментировать