[dotPRICE.ru] Свой интернет-магазин — каждому!




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2024-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='\

38 Comments

  1. KreditNIK

    скачал Вашу обработку, но почему-то она не открывается (сделал вроде все по Инструкции) у меня платформа 8.3 конфигурация УТ 11.2.3.66

    что я делаю не так )))

    Звините. все гуд пошло )))

    Reply
  2. dotPRICE.ru

    (1) KreditNIK,

    Ok. Наверное, мне имеет смысл выделить:

    управляемые приложения (УТ11, БП3…) должны запускаться с ключом /RunModeOrdinaryApplication:

    http://www.dotprice.ru/content/main/images/faq1.png

    Reply
  3. vasiliy_b

    С каких соображений закрыли код обработки?

    Reply
  4. dotPRICE.ru

    (3) vasiliy_b,

    Их несколько, но основная – безопасность.

    Система не требует предварительной регистрации пользователя-владельца интернет-магазина. В первых версиях обработки код был открыт и это привело к попыткам DoS-атак загрузки данных от некоторых «продвинутых» пользователей.

    Если Вас интересуют какие-то аспекты кода – я ими с удовольствием поделюсь.

    Reply
  5. shakmaev

    Большой плюс за объем работы и отличную идею — однозначно! Если еще поделитесь скриптом зума на вашем сайте — будет круто, деобфусцировать получилось, но вот рефакторинг переменных не удался. Если не жалко — буду признателен.

    Reply
  6. dotPRICE.ru

    (5) shakmaev,

    Не жалко 🙂

    Отпишу в личную почту…

    Reply
  7. cool.vlad4

    (4) а разве «продвинутые пользователи» не могут просто засниффить траффик, запросы? зачем им код

    Reply
  8. prog77

    Я помню у 1С ещё для 77 подобное решение было… но видимо не пошло. Но всё равно удачи!

    Reply
  9. alex_4x

    Я правильно понимаю, что эта обработка сразу лезет в интернет и делает прям на сайте новый интернет магазин ?

    На каком-то определенном домене, который внутри обработки прописан ?

    Мне без кода как-то не интересно этим пользоваться. Даже не понимаю, зачем оно нужно без кода. Как отдельный поддерживаемый разработчиком продукт — то это фактически сервис, да многим будет удобно, если будет поддержка и всё такое, но мне такой кот в мешке не нужен. В целом же идея хорошая.

    Reply
  10. dotPRICE.ru

    (7) cool.vlad4,

    к счастью, не могут — это должны быть «очень продвинутые» 🙂

    Reply
  11. dotPRICE.ru

    (9) alex_4x,

    Да. Вы правы — это сервис. Существует (в бета версии) уже достаточно давно. Находится на поддержке.

    Собственно цель моей публикации — обсудить с сообществом infostart его востребованность, услышать критику, пожелания.

    Reply
  12. Tatitutu

    (11) Мне мой клиент дал ссылку на ваш сервис

    и хочет чтобы MAGAZKA — лучшая программ для розничного магазина

    в этой связке заработала. Клиентов много (желающих хоть отбовляй из глубинок)

    Как организовать адаптацию ?

    (если будет предложения лучше в личку или на почту)

    Reply
  13. dotPRICE.ru

    (12) Tatitutu,

    Спасибо за предложение.

    Обязательно посмотрю как можно адаптировать обработку под Вашу конфигурацию…

    Reply
  14. mkostya

    Можно ли на свой домен выложить ?

    Reply
  15. dotPRICE.ru

    (14) mkostya,

    Если я Вас правильно понял, то да. См.

    Привязка собственных доменных имен к Вашему интернет-магазину

    Reply
  16. mkostya

    Если есть такая функция как

    Управление доступом к интернет-магазину (режим Интернет-магазин «для своих»)

    ,

    то возможно ли этому пользователю видеть свою историю заказов ?

    Можно ли подключить СМС уведомление о поступлении заказа?

    Можно ли уведомлять клиента, а готовности выполнить заказ.

    Если заказ сделан по звонку, и менеджер сам в 1С оформил за него заказ, будет ли уведомление в почту, номер уникальны?

    Reply
  17. dotPRICE.ru

    16) mkostya,

    возможно ли этому пользователю видеть свою историю заказов ?

    Это можно будет в «Личном кабинете» посетителя. Сейчас этот функционал находится в разработке.

    Можно ли подключить СМС уведомление о поступлении заказа?

    Если это будет востребовано (пока только Вы обратились с этим) — реализуем. Очевидно, что это будет платный сервис.

    Могу ошибаться, но, по-моему, данный функционал уже сейчас можно настроить с помощью специальных сервисов обработки/перенаправления входящей почты.

    Можно ли уведомлять клиента, а готовности выполнить заказ.

    Сейчас такого сервиса нет. Давайте обсудим как это для Вас удобнее: «Обмен статусами заказов» (в работе, но, к сожалению, не поддерживается всеми типовыми конфигурациями) или специальные «активные» ссылки в письме-уведомлении о размещении заказа? Наверное, лучше в личке….

    Если заказ сделан по звонку, и менеджер сам в 1С оформил за него заказ, будет ли уведомление в почту, номер уникальны?

    Заказы, отдельно оформляемые в 1С, никак не связаны с интернет-магазином. Никаких уведомлений от интернет-магазина в принципе быть не может. Возможно, я Ваш вопрос не понял…

    Reply
  18. mkostya

    Отлично жду обновления

    и будет ли версия для мобильного телефона или ждать мобильного приложения?

    По sms лучше интегрировать SMS.RU и вам будет выгодно и клиенту удобно

    Reply
  19. retif

    Привязка собственных доменных имен к Вашему интернет-магазину:

    Как подключить магазин к уже работающему сайту mysite.ru на котором есть описания и история в яндексе?

    Можно ли сделать поддомен shop.mysite.ru?

    Reply
  20. dotPRICE.ru

    (18) mkostya,

    будет ли версия для мобильного телефона или ждать мобильного приложения?

    О мобильном приложении пока говорить рано (думаю, сначала надо разработать и опубликовать API для взаимодействия с интернет-магазином), а версия сайта с адаптивной версткой для мобильных устройств в разработке.

    Reply
  21. dotPRICE.ru

    (19) retif,

    По умолчанию привязка доменов 3-го уровня не допускается. В Вашем и подобных случаях ничто не мешает сделать исключение — напишите соответствующую заявку в тех. поддержку.

    Reply
  22. kosyakov_anton

    Есть еще вопрос по оплатам он-лайн: их как-то возможно подвязывать?

    Reply
  23. dotPRICE.ru

    (22) kosyakov_anton,

    В текущий момент — нет. Наверное, надо об этом подумать.

    Reply
  24. dotPRICE.ru

    (19) retif,

    поскольку потребность в привязке своих доменов 3-го уровня оказалась актуальной для многих, принято решение дать такую возможность по умолчанию.

    Reply
  25. Pyzuriaka

    Добрый день. Не могу припарковать свой домен «mobisale.in.ua», извилин не хватает на все. Поможите?

    Reply
  26. dotPRICE.ru

    (25) Pyzuriaka, ответил в почту

    Reply
  27. Pyzuriaka

    Большое спасибо, все работает! Сайт поумолчанию вполне устраивает, вносим свою инфу и вуаля! ))) Так быстро интернет магазин я еще не открывал. Помню два года назад, я делал интернет магазин, потратил 12 месяцев, да и денег потратил.

    Всем рекомендую!!! Автору огромное спасибо, надеюсь на продолжение банкета )))

    Reply
  28. dotPRICE.ru

    (27) Pyzuriaka, Очевидно, что сервис не устроит в полной мере всех желающих иметь свой интернет-магазин (интернет-ресурс).

    Но то, что он многим позволяет решать свои бизнес-задачи — это радует.

    Спасибо за благодарности и рекомендации. 🙂

    Reply
  29. vdv2701

    Здравствуйте! Можно ли получить обработку с открытым кодом?

    Reply
  30. dotPRICE.ru

    Выслал Вам на email

    Reply
  31. FreeArcher

    Приветствую!

    Идея прикольная, но есть одно но.

    ПО сути это не интернет магазин, а просто витрина.

    Интернет магазин требует полной автоматизации покупки, расчет доставки (нужны модули служб доставки), оплата (тоже интеграция). Ну как минимум.

    Вот если бы это реализовать на каком то открытом всем известном движке CMC, то думаю была бы востребована сама интеграция.

    Reply
  32. dotPRICE.ru

    Здравствуйте.

    Не понял Вашу идею.

    Если я не ошибаюсь, «известные движки СМС» имеют интеграцию с 1С 🙂

    Reply
  33. dotPRICE.ru

    (31)

    Извините, промахнулся. См. ниже

    Reply
  34. nick_perm

    как я могу задать вам вопрос по данной обработке?

    Reply
  35. dotPRICE.ru

    (36) Как Вам удобно. Здесь или в почте

    Reply
  36. nick_perm
  37. maxprov

    Добрый день, как с вами связаться? На электронную почту info@dotprice.ru не кто не отвечает.

    Хотел пообщаться по поводу обработки. напишите пожалуйста на почту stil-a@bk.ru Заранее спасибо.

    Reply
  38. dotPRICE.ru

    (39) OK. Написал в почту

    Reply

Leave a Comment

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