Обработка обслуживания терминалов пин-пад Ingenico IPP320/350 для УТ 10.х




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2025-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

56 Comments

  1. elka302

    Здравствуйте! Хотелось бы поподробнее узнать про данную обработку. С какой платёжной системой протестирована её работа? В частности, интересует, будет ли она работать, если на терминале установлен модуль Эвотор PAY?

    Reply
  2. Torin

    Доброго времени суток! Обработка проверена на «Уральский банк реконструкции и развития» , РНКБ Банк , Альфа-банк.

    С терминалами серии Ingenico IPP320/350. Обработка требует наличия установленной системы ARCUS 2 CAP версии не ниже 2.0.0.27 , использует в своей работе ArcCom.dll . Обработка включает в себя методы и функции работы с библиотекой ArcCom.dll.

    Reply
  3. karakavr

    (2)Добрый день! Есть пара вопросов по поводу обработки. Как можно с вами связаться? Почта, телеграм, vk?

    Reply
  4. Torin

    (3) ответил в ЛС

    Reply
  5. Sergjik

    Добрый день, после подключения нажимаю Функции-тест связи, мне выдает: «Ошибка: Ошибка системы: 0 код: 21 071». Все делал по инструкции, куда копать?

    Reply
  6. Torin

    (5) Какой банк?

    Reply
  7. Sergjik

    (6) ВТБ24

    Reply
  8. Torin

    (9)Написал в ЛС

    Reply
  9. Torin

    (9)файл ops из папки ini из каталога Arcus2 или вышли или выложите

    P|S в ЛС не отвечаете 🙁

    Reply
  10. mrkop

    Доброго времени суток,

    Заработает ли эта обработка с 2мя Эваринг терминалами, подключенных к ПК?

    Если да интересует приобретении и внедрение, напишите в ЛС.

    Reply
  11. Torin

    (12) Два терминала разных банков?

    Reply
  12. mrkop

    Банк вроде бы один

    Reply
  13. Torin

    (14) Будет работать каталоги Arcus2 разные указываются

    P|S а смысл двух терминалов на 1 ПК ? если 1 банк ? или 1 ПК подразумевается сервер-терминалов?

    Reply
  14. mrkop

    Сейчас как раз общаемся с банком по поводу замены терминалов чтобы можно было подключить к 1с. Планируется сделать автоматизированное РКМ, на 2 организации 2 разных Р/С

    Reply
  15. mrkop

    Хм есть возможность МультиТреминал сделать. 1 терминал на 2 организации. Обработка ваша справиться? с таким

    Reply
  16. Torin

    (17) контакты в ЛС

    Reply
  17. mrkop

    Планируется вот такое купить https://infostart.ru/public/665935/ внедрить, а затем к этому привязать терминалы, чтобы в ручную не набирать суммы.

    Reply
  18. sanymust

    (19)

    (15)

    Если у dll arcusa есть в методе оплаты параметр отдела (который отвечает за ту или иную организацию), то можно будет адаптировать под мою доработку в (19)

    Reply
  19. sergei198821

    Добрый день, как можно с Вами связаться?

    Reply
  20. Kamilj

    Добрый день! А на Рознице 1.0 интересно будет работать?

    Reply
  21. Torin

    (22) Не проверялось на Рознице 1.0 … …

    Reply
  22. Torin

    (22) Проверил на Розница 1.0 .. работает

    Reply
  23. Kamilj

    (24) тест проходит… А интересно с РМК корректно будет работать?

    Reply
  24. Torin

    (25) РМК Розница 1.0

    Reply
  25. sergei198821

    спасибо, работает прекрасно

    Reply
  26. beyond_time

    При попытке провести оплату выдает ошибку: Ошибкасистемы:0код:2 520 Операция по карте не выполнена

    Reply
  27. Torin

    (28)Какой банк? и какая версия arccom.dll

    Reply
  28. ifal

    Спасибо за труд, все работает на УТ 10.3, драйвер ..28.

    Reply
  29. Torin

    (30)Велкам!

    Reply
  30. knlmail

    А со Сбербанком работает? Спрашиваю, потому что типовая обработка обслуживания не заработала в УТ 10,3 с их sbrfcom.dll

    Reply
  31. Torin

    (32)Доброго времени суток! А какое ПО вам предоставил СБЕРБАНК? явно не ARCUS2 🙂 в (2) указано что необходимо для работы.

    P|S Странно что у Вас не получилось «взлететь» с типовой обработкой Сбербанка! с с их sbrfcom.dll

    Reply
  32. okscsss

    Здравствуйте. Поставили вашу обработку на 1с 8.3, продажи работают, а вот возврат 1с не хочет передавать на пин-рад. К кому я могу обратиться за решением данной проблемы?

    Reply
  33. Torin

    (34)Доброго времени суток! Как оформляете возврат по эквайрингу?

    Reply
  34. swi76

    где взять 29 версию , на 27 не работает …

    Reply
  35. swi76

    И где Прописывается ID Устройства ????

    Конфигурация УТ 10.3

    Reply
  36. Torin

    (36) ArcCom.dll ? — последнюю версию можно получить в службе технической поддержки банка! Я вам уже сообщал об этом!

    Reply
  37. Torin

    (37) Вы используете мультимерчант? Если да! . То типовая УТ 10.3. х не передаёт id терминала в ОплатитьПлатежнойКартой. Без доработки УТ 10.3 не обойти Ответ = Объект.Драйвер.ОплатитьПлатежнойКартой(мСумма, КодRRN, КодАвторизации);

    Reply
  38. Torin

    Актуальную версию програмного обеспечения Инженико ARCUS2 CAP , необходимо

    получить в Банке с которым выполняется эквайринг. Банки с договорами сопровождения имеют необходимые лицензии на ПО Инженико ARCUS2 CAP

    Reply
  39. swi76

    К сожалению в банке «послали» , сказали что договора на сопровождения нету , экономят , установили лишь версию 2.0.0.27

    Reply
  40. Torin

    (41)Вы не ответили на вопрос!!

    http://forum.infostart.ru/forum28/topic217372/message2325378/#message2325378

    Reply
  41. swi76

    (42) мы используем IPP 350

    Reply
  42. Torin

    (43) мультимерчант — это когда один терминал используется при приеме оплат на разные организации! В этом случае при приеме оплаты необходимо передавать ID , чтобы терминал понимал, что это оплата на определенную организацию. Модель терминала не имеет значения. Так как вы спрашивали где указывать id терминала, я предположил , что возможно у вас один терминал на несколько организаций!

    + я предлагал Вам связаться с вашим банком от Вашего имени и решить возникшую у вас проблему..

    Reply
  43. swi76

    (44)Спасибо за помощь, завтра я с ним встречаюсь, посмотрю что скажет и сделает, про ID это он говорил, «что без него не будет работать» если ничего не получится обращусь к вам.

    Организация одна …

    Reply
  44. Torin

    (45)У вас все получилось ?

    Reply
  45. swi76

    Приходил, устанавливал разные версии , ARCUS2, в последней версии не регистрировалась библиотека Arccom.dll, поставил 0.23, платежи не проходили , в итоге оказалось в аппарат не загружены были какие то ключи, в итоге забрал аппарат с собой, сегодня сказал что принесёт с ключами, и все про ID(номер терминала) говорил , потому что в инструкции написано что нужно вводить , и показал её а там версия УТ 11.3 , а у меня УТ 10.3 . и в настройках нет такого поля . (см. файл)… работоспособность терминала проверял не через 1с а через функционал Arcusa//

    Reply
  46. Torin

    (47) «и все про ID(номер терминала) говорил , потому что в инструкции написано что нужно вводить» .

    повторюсь! в УТ 10.3 нет ID терминала!!!

    Объект.Драйвер.ОплатитьПлатежнойКартой(мСумма, КодRRN, КодАвторизации);

    https://its.1c.ru/db/metod8dev#content:1600:hdoc

    «Оплата картой

    При необходимости оплатить покупку платежной картой «Система» вызывает функцию «Оплатить платежной картой» у «ВКЭС», передавая ему во входном параметре сумму к оплате для списания с карты и номер считанной карты (1234 5678 9012 3456). «ВКЭС» в ответ возвращает результат выполнения функции, а в выходные параметры записывает код RRN, код авторизации.

    Если считывание карты будет производиться на терминале (PIN-Pad’e) банка, то в параметре номера считанной карты передается пустая строка. После выполнения функции в параметре номера считанной карты возвращается номер прочитанной на терминале (PIN-Pad’e) банка карты.»

    Требования к разработке драйверов для интеграции с системами эквайринга для платформы «1С:Предприятие 8.1»

    в УТ 11.х метод ОплатитьПлатежнойКартой другой!!! Требования к разработке драйверов подключаемого оборудования (версия 3.1)

    ОбъектДрайвера.ОплатитьПлатежнойКартой(ИДУстройства, НомерКарты, Сумма,

    НомерЧека, КодRRN, КодАвторизации, СлипЧек);

    Там можно передать ID терминала!!!

    как я уже писал ранее без доработки УТ 10.3 , ID терминала передать нельзя!!!

    Reply
  47. swi76

    Запустилась система , Чеки печатаются, Спасибо за помощь. Дело было в паде (терминал), изначально сотрудники банка что там не прописали , Но всячески не хотели признавать свою вину, перекладывая все на 1с , В итоге после того как в очередной раз они принесли пад с сервиса всё стало работать на тех же настройках в 1С на который изначально настраивал… Еще раз спасибо ,

    P.S. работает все на ArcCom.dll 0.27 версии

    Reply
  48. Torin

    (49) отлично! Рад что у вас все получилось. + Поставить не забудьте 😉

    P/S техподдержка банка всегда переносит проблему на клиента ;). Именно поэтому всегда готов связаться с ЛЮБЫМ банком и решить проблему по подключению терминала.

    Reply
  49. vava22082009

    Добрый день. подскажите пожалуйста с Альфа Банком системой UCS будет работать? библиотека драйверов ucs_ms.dll

    Reply
  50. Torin

    (51) Доброго времени суток! АльфаБанк использует процессинг UCS ( ucscards.ru ) , для подключения к процессингу требуется другая обработка обслуживания UCS: Эквайринговая система

    Reply
  51. vava22082009

    (52) так вроде это стандартная обработка драйверов ут 10.3, но она не работает — не видит драйвера, хотя путь прописали с папкой UCS, где драйвера и зарегистрировали.

    Reply
  52. Torin

    (53)Смотреть нужно.. может библиотеки не все зарегистрированы UCS эквайринга . может коды доступа в терминале неправильно указаны… вариаций множество . лог скиньте и каталога UCS

    P|S к обсуждаемой обработке это никак не относится 🙂

    Reply
  53. Lonelcor

    Добрый день, подскажите, пожалуйста, какой драйвер использует Дальневосточный банк и где его скачать?

    Reply
  54. Torin

    (55) Доброго времени суток! Если у Вас договор эквайринга с Дальневосточным банком. То Вы можете обратиться в службу технической поддержки банка, они обязаны предоставить вам все необходимое ПО для подключения эквайринговых терминалов.

    Reply
  55. okscsss

    (34) Большое спасибо за доработку данной обработки. Теперь все работает отлично!

    Reply
  56. Lonelcor

    (56) Да, так и сделал. Спасибо за ответ 🙂

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *