1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом (не Битрикс) ч.3

09.01.18

Интеграция - Сайты и интернет-магазины

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

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

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

<?php // Полная загрузка сервисных книжек, создан 2018-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='\\';          // Ставится перед специальными символами
$lineend='\\r\\n';  // Чем заканчивается строка в файле CSV
$hasheader=FALSE;      // Пропускать ли заголовок CSV, 1 строку с именами столбцов

////с начала пытался загружать через конструкцию LOAD DATA INFILE,
////но по (пока) не выясненной причине не пошло, пришлось через перебор строк файла

$fields_table=array('список полей таблицы сервисных книжек');
/////   echo '<H2><b>Загрузка в таблицу сервисных книжек</b></H2><br>';
$row = 1;
$handle = fopen($file_hist, "r");
while (($data = fgetcsv($handle, 1000, $delim)) !== FALSE) 
{   ////вставка строки из файла CSV в таблицу
    $insert_fail_zapros=$wpdb2->insert($table, array($fields_table[0]=>$data[0],$fields_table[1]=>$data[1],$fields_table[2]=>$data[2],$fields_table[3]=>$data[3],$fields_table[4]=>$data[4],
                                                     $fields_table[5]=>$data[5],$fields_table[6]=>$data[6],$fields_table[7]=>$data[7],$fields_table[8]=>$data[8],$fields_table[9]=>$data[9])); 
    $row++;
}
fclose($handle);
$q_result=TRUE;
if($q_result) {
    ////успешно обновили
    $insert_fail_zapros=$wpdb2->insert('_wp_vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file, 'last_size_upload'=>$m_size_file, 'comment'=>'Успешная загрузка данных. Загружено строк:'.$row)); 
    $failure=FALSE;
  }
else {
    $insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Неудачная загрузка данных в таблицу сервисных книжек.')); 
   $failure=TRUE;
   }

wp_die();
return $failure;
?>

 

Скриншот (лог) работы прилагается.

Здравая критика приветствуется.

С удовольствием выслушаю предложения и пожелания.

Скрипт тестировался:
Версия WordPress : 4.9.1
MySQL Версия : 5.6.25
PHP Версия : 7.0.24

Что касается предыдущей статьи про интернет магазин
Потихоньку пошли заходы из поиска Яндекса, не ожидал что так быстро будет, см. скриншот.
Если есть сервисы, желающие по-экспериментировать, готов взять 1-2. Условия обсуждаемы, пишите в личку.

обмена данными Альфа-Авто обмен с сайтом скрипт обмена

См. также

API-интеграция 1С с маркетплейсами ОЗОН, WildBerries, Я.Маркет, СберМегаМаркет, Стройландия, Леруа Мерлен, Hoff, AliExpress для УТ11, КА2, ERP2, УНФ, БП3, Розница, УТ10, УПП1.3

Сайты и интернет-магазины Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Беларусь Россия Управленческий учет Платные (руб)

Модуль для интеграции с маркетплейсами ОЗОН, WildBerries, Я.Маркет, СберМегаМаркет, Стройландия, Леруа Мерлен, Hoff, AliExpress. При помощи расширения поддерживаются следующие методы: обмен остатками товаров, обмен ценами, обработка заказов, печать стикеров, загрузка отчетов комиссионеров по API (в том числе Я.Маркет). Подходит для конфигураций Беларуси. Поддержка искусственного интелекта GigaChat

59990 руб.

05.09.2023    7101    87    74    

68

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме. Без существенных изменений типовой конфигурации. Проверено с брендами: Интеграция 1С и GEELY Интеграция 1С и HAVAL Интеграция 1С и KIA Интеграция 1С и FORD Интеграция 1С и LADA ГАРАНТИЯ 100% ВНЕДРЕНИЯ!

36000 руб.

03.08.2020    15729    10    17    

11

Оплата покупок "Долями" в 1С:Розница 2.3 (для работы с сервисом dolyame.ru)

Сайты и интернет-магазины Платформа 1С v8.3 1С:Розница 2 Розничная и сетевая торговля (FMCG) Россия Платные (руб)

Готовое интеграционное решение для оплаты покупок Долями в 1C:Розница 2.3. Реализовано в виде расширения. Интеграция сервиса dolyame.ru для приема платежей в рассрочку.

18000 руб.

19.12.2023    1170    6    1    

6

SALE! 15%

Обмен данными с сайтом. БП 3.0

Оптовая торговля Розничная торговля Сайты и интернет-магазины Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Обмен данными с сайтом на платформе 1С:Битрикс (и подобными) для 1С: Бухгалтерия предприятия 3.0.

12000 10200 руб.

18.03.2019    31269    109    100    

62

Интеграция 1С — Битрикс24. Обмен задачами

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (8.3.18.1289). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    17545    6    15    

13

SALE! 33%

«Мониторинг цен» – сервис для отслеживания цен конкурентов на ведущих маркетплейсах России

Маркетплейсы Сайты и интернет-магазины 8.3.14 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Сервис помогает отслеживать цены на ведущих маркетплейсах России только для одного региона – Москва и Московская область. Выполняйте анализ и контролируйте цены Ваших конкурентов сразу в системе 1С.

2400 1608 руб.

29.05.2023    6646    25    37    

15

Выгрузка для АВИТО

Сайты и интернет-магазины Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 Россия Платные (руб)

Выгрузка товаров услуг из 1С для сайта "Авито" раздел "Автозагрузка" выполнена в виде обработки. Обработка подходит для конфигураций УТ, УНФ и Розница. Данная обработка позволяет создавать шаблон с объявлениями для "Авито" - "Автозагрузка".

4200 руб.

07.06.2022    15336    42    56    

37
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. user1303763 05.11.19 13:14 Сейчас в теме
(5)Хорошо бы посмотреть загрузку заказов
2. osivv 265 07.11.19 09:25 Сейчас в теме
(1)
Хорошо бы посмотреть загрузку заказов


Это давно морально и физически устарела.
Смотрите мои новые разработки по обмену с сайтом.
Оставьте свое сообщение