Как автоматически менять цены на сайте без загрузки и выгрузки Excel файла с прайсом
Сегодня на связи отдел разработки и поддержки сайтов Зекслер. Продолжаем рассказывать, как автоматизируем бизнес процессы клиентов (писали как автоматизировали создание коммерческих предложений в Битрикс 24), и в этот раз сделали синхронизацию цен из Google-таблицы (дабы не грузить Excel и прочее) и цен на сайте производителя гаражей и хозблоков SKOGGY (да, для многих производственников делаем полный цикл по маркетингу, продажам, автоматизации и управленческому учету).
В статье будут строчки кода и прочая внутрянка, но донесению сути она не должна помешать. А если всё же помешала, пиши в комментариях, учтём в следующих материалах.
Подписывайтесь на наш Телеграм-канал, где мы ежедневно публикуем посты по теме не только разработки, но и дизайна, маркетинга, продвижения и т.д. Будем рады новым подписчикам!
Возвращаемся к модулю. Задача состояла в разработке модуля для CMS Drupal, который синхронизирует данные из гугл документа формата Excel (Google Spreadsheet) в колонке с ценами в поля для цен на сайте.
Подготовка колонки с артикулами в Google таблице
Предварительно необходимо было задать связь записи продукта и таблицы. Для это в файле документа организовали колонку с уникальными полями (Артикулы), отвечающими за связь этой строки (продукта) с вариантом продукта в Drupal.
В нашем случае, это колонка C.
Колонка с ценами – это N.
Начальная строка 5, а конечная 105.
После добавления всех артикулов в таблицу и правильных цен, переходим к следующему этапу.
Создание приложения в Google консоли
Следующий шаг – создание приложения. Переходим в Google Cloud Console и создаем отдельное приложение. Подключаем к нему (ENABLE APIS AND SERVICES) Google Drive API.
Далее нужно получить доступ к приложению. Для этого переходим в credentials и нажимаем Create credentials. После заполнения и добавления тестового пользователя, нужно скачать Client secrets в формате json (справа в строке).
После этого необходимо дать разрешения для доменов Authorized JavaScript origins и Authorized redirect URIs. В нашем случае это localhost и localhost/state.
Сохраненный файл json нужен для получения токена, который будем получать с помощью php-файла в отдельном скрипте в консоле.
Получение токена для ClientApi Google
Теперь нужно организовать получение токена. Для этого создаем в папке микропроекта composer.json и добавим туда google/apiclient посредством команды:
composer require google/apiclient
Делаем файл php с подгрузкой require __DIR__ . '/vendor/autoload.php';
А скачанный файл credentials размещаем в той же папке composer.json
Файл index.php:
Показываем пример файла credentials.json
Скрипт в index.php выполняется только в консоли php index.php
В результате выполнения скрипта в терминале (консоли) получим примерно следующее:
Копируем полученную ссылку и вводим в строку браузера. Сейчас нужно получить код авторизации для того адреса email, который будет работать с этим приложением.
После авторизации и получения доступа к приложению, к вашим файлам Excel будет перенаправление примерно по такой ссылке:
http://localhost/state?code=4/0AWyig&scope=https://www.googleapis.com/auth/spreadsheets
Копируем code и вставляем в терминал. После этого получим файл token.json.
Возможные проблемы получения токена
При получении токена могут возникнуть ошибки. Рассмотрим наиболее частые из них.
Проблема 1: Нет доступа к приложению или приложение не проверялось.
Решение: Добавьте тестового пользователя в разделе OAuth consent screen.
Проблема 2: Fatal error: Uncaught InvalidArgumentException: Redirect URI must be absolute in /var/www/vendor/google/auth/src/OAuth2.php:793
Решение: Эта ошибка связана с тем, что в разделе credentials (https://console.cloud.google.com/apis/credentials) проекта не указаны Authorized JavaScript origins и Authorized redirect URIs. Необходимо их заполнить и сохранить. При этом сохранение будет происходит в течение 5 минут.
Завершение настройки модуля
После проведения всех манипуляций, организация получения данных и отправление их на обработку в Batch-процесс выглядит так.
Важно! Файл с которым работаете должен быть доступен для тестового пользователя, либо должен быть открыт доступ по ссылке (чтение).
К примеру, SheetId с файла https://docs.google.com/spreadsheets/d/3xS34U5аZ8zVzU65ho-VFRVg/edit#gid=0 – это «3xS34U5аZ8zVzU65ho-VFRVg».
Функция обработки каждой строки 'mw_google_spreadsheet_op_1' в Batch-процессе выглядит так (описание в комментариях):
В итоге получили, что каждая строка обрабатывает все записи вариантов по артикулу и присваивает им нужную цену с валютой RUB. Процесс отображается пользователю.
Можно менять строки начальной и конечной строки, не обновляя старые.
Как это работает для менеджера
Если цена меняется, менеджер исправляет ее в Google таблице. После этого в админке сайта необходимо выполнить одну простую команду «Обновить цены».
В результате на сайте автоматически цены будут обновлены.
Надеемся, статья была для вас полезна, и вы смогли по инструкции настроить самостоятельно синхронизацию цен и упростить работу себе и менеджерам. Подписывайтесь на наш Телеграм-канал, где мы рассказываем, как делаем дизайн, нейминг, продвижение, публикуем короткие инструкции и т.д. Будем рады новым подписчикам.
Пишите комментарии, если остались вопросы по настройкам.