├── .env.dist ├── .gitignore ├── Dockerfile ├── README.md ├── assets └── offers.xml.gif ├── bundle.sh ├── data └── .gitkeep ├── log └── .gitkeep ├── scripts ├── generic ├── getorders ├── lib │ ├── colors.sh │ └── functions.sh └── post └── snippets └── vendor:catalog.import.1c └── component.php /.env.dist: -------------------------------------------------------------------------------- 1 | # 2 | # Конфигурационный файл 3 | # 4 | 5 | # Адрес сайта с протоколом, если хост не резолвится, следует добавить `--dns=IP-вашего-DNS-сервера` в парамерты `docker run` 6 | SITE=http://site.ru 7 | 8 | # Логин-пароль служебной учетной записи стандартного обмена 9 | AUTH_LOGIN=1c_exchange@site.ru 10 | AUTH_PASS=password 11 | 12 | # Кодировка сайта 13 | CHARSET_IN=cp1251 14 | 15 | # Кодировка консоли 16 | CHARSET_OUT=utf-8 17 | 18 | # Передаваемый файл является архивом, необходимо обработать все файлы из него (указать `1`) 19 | # ZIP=1 20 | 21 | # Переменная для кастомного обмена, будет передана как параметр обмена `mode=GET_STEP_MODE` 22 | # GET_STEP_MODE=report 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.env 2 | /data 3 | /log 4 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine 2 | 3 | RUN apk add curl && \ 4 | apk add bash && \ 5 | apk add zip 6 | 7 | ADD /scripts /scripts 8 | WORKDIR /scripts 9 | 10 | ENV PATH="$PATH:$WORKDIR" \ 11 | CHARSET_IN="utf-8" \ 12 | CHARSET_OUT="utf-8" \ 13 | # Уровень "молчания" curl: "показывать только ошибки, скрыть прогресс бар" \ 14 | CURL_VERBOSITY="-sS" \ 15 | # Импорт осуществляется из этого файла, который монтируется с хоста \ 16 | SRC_FILE="/src" \ 17 | # Файл кукисов \ 18 | COOK="/var/log/cookiefile.txt" \ 19 | # "mode" при импорте файлов \ 20 | GET_STEP_MODE="import" 21 | 22 | CMD generic 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Инструмент для эмуляции обмена файлами 1С => Битрикс 2 | 3 | Этот инструмент полностью эмулирует работу обмена файлами между 1С и Битрикс. Предусмотрены следующие способы обмена: 4 | 5 | * [Стандартный механизм обмена](#generic) `CommerceML` - файлы `import.xml` и `offers.xml` 6 | * [Доработанный механизм обмена на основе стандартного](#custom) - любые файлы, например `JSON`, `CSV` 7 | * [Получение необработанных заказов](#getorders) 8 | * [Простая отправка данных POST запросом на свой обработчик в Битрикс](#post) 9 | 10 | Демонстрация стандартного обмена: 11 | 12 | ![XML обмен файлами 1С Битрикс offers.xml](https://raw.githubusercontent.com/dbfun/1c-bitrix-exchange/master/assets/offers.xml.gif) 13 | 14 | Минимальный пример запуска через [Docker](https://www.docker.com/): 15 | 16 | ``` 17 | docker run -it --rm \ 18 | -e SITE=http://site.ru \ 19 | -e AUTH_LOGIN=1c_exchange@site.ru \ 20 | -e AUTH_PASS=password \ 21 | -e FILE_NAME=offers.xml \ 22 | -v $(pwd)/data/offers.xml:/src \ 23 | required/1c-bitrix-exchange:latest 24 | ``` 25 | 26 | # Установка 27 | 28 | ## Из реестра Docker Hub 29 | 30 | Чтобы получить образ из [реестра Docker Hub](https://hub.docker.com/r/required/1c-bitrix-exchange), откройте командную строку и введите: 31 | 32 | ``` 33 | docker pull required/1c-bitrix-exchange 34 | ``` 35 | 36 | ## Из репозитория GitHub 37 | 38 | Чтобы собрать образ из репозитория GitHub, введите в терминале: 39 | 40 | ``` 41 | git clone https://github.com/dbfun/1c-bitrix-exchange.git 42 | docker build --tag required/1c-bitrix-exchange 1c-bitrix-exchange 43 | ``` 44 | 45 | # Конфигурация 46 | 47 | ## Описание параметров 48 | 49 | | Параметр | Обязательный | Пример значения | Значение по-умолчанию | Описание | 50 | |---------------|--------------|---------------------|-----------------------|----------------------------------------------------------------------------------------------------------------------------| 51 | | SITE | + | http://site.ru | | Адрес сайта с протоколом, если хост не резолвится, следует добавить `--dns=IP-вашего-DNS-сервера` в параметры `docker run` | 52 | | AUTH_LOGIN | + | 1c_exchange@site.ru | | Логин служебной учетной записи стандартного обмена | 53 | | AUTH_PASS | + | password | | Пароль служебной учетной записи стандартного обмена | 54 | | CHARSET_IN | | | utf-8 | Кодировка сайта | 55 | | CHARSET_OUT | | | utf-8 | Кодировка консоли | 56 | | FILE_NAME | | offers.xml | | Название файла, будет передано как GET-параметр `filename` | 57 | | ZIP | | 1 | | Передаваемый файл является архивом, необходимо обработать все файлы из него (указать `1`) | 58 | 59 | ## Файл конфигурации 60 | 61 | Параметры в скрипт обмена можно передавать через командную строку, но при многократном использовании это делать удобнее через файл конфигурации. 62 | 63 | В таком случае нужно скопировать [`.env.dist`](https://raw.githubusercontent.com/dbfun/1c-bitrix-exchange/master/.env.dist) в `.env` и поправить в нем базовую конфигурацию (адрес сайта, логин-пароль, кодировку). 64 | 65 | Тогда запуск обмена станет еще короче: 66 | 67 | ``` 68 | docker run -it --rm \ 69 | --env-file .env \ 70 | -e FILE_NAME=offers.xml \ 71 | -v $(pwd)/data/offers.xml:/src \ 72 | required/1c-bitrix-exchange:latest 73 | ``` 74 | 75 | # Использование 76 | 77 | ## Стандартный механизм обмена 78 | 79 | Если файл для импорта находится в `data/offers.xml`, команда выглядит так: 80 | 81 | ``` 82 | docker run -it --rm \ 83 | --env-file .env \ 84 | -e FILE_NAME=offers.xml \ 85 | -e SITE=test.site.ru \ 86 | --dns=10.0.1.1 \ 87 | -v $(pwd)/data/offers.xml:/src \ 88 | -v $(pwd)/log/:/var/log/ \ 89 | required/1c-bitrix-exchange:latest 90 | ``` 91 | 92 | В этом расширенном примере (полужирным - обязательные настройки): 93 | 94 | * **`--env-file .env`** - базовые настройки (также настройки можно передать через `-e ПАРАМЕТР=значение`) 95 | * **`-e FILE_NAME=offers.xml`** - имя загружаемоего файла (будет передано в Битрикс как GET-параметр) 96 | * `-e SITE=test.site.ru` - переопределен сайт, указанный в базовых настройках `.env` файла 97 | * `--dns=10.0.1.1` - указан собственный DNS (указывать в случае ошибки `Could not resolve host` для локальных сайтов) 98 | * **`-v $(pwd)/data/offers.xml:/src`** - подмонтировать файл `data/offers.xml` в контейнер для импорта, имя файла может быть любым, но название для обмена нужно указать через `FILE_NAME` 99 | * `-v $(pwd)/log/:/var/log/` - подмонтировать каталог `log/` в контейнер, в нем будут созданы логи обмена (полезно при отладке) 100 | 101 | Полученные из файла данные будут загружены на сайт тем же путем, как это делает 1С. 102 | 103 | ## Доработанный механизм обмена на основе стандартного 104 | 105 | Для импорта `JSON`, `CSV` и других типов файлов (в свои отдельные таблицы БД, например) нужно добавить свои кастомные обработчики в стандартный обмен. При этом сохранится стандартный механизм обмена, и появится возможность обработки произвольных файлов. 106 | 107 | ### 1. Создать собственный компонент 108 | 109 | Создадим собственный компонент обмена, для чего скопируем и доработаем стандартный `bitrix:catalog.import.1c`. Переходим в корень сайта и вводим: 110 | 111 | ```bash 112 | mkdir -p local/components/vendor/ 113 | cp -r bitrix/components/bitrix/catalog.import.1c local/components/vendor/ 114 | ``` 115 | 116 | Теперь следует поправить скопированный файл `local/components/vendor/catalog.import.1c/component.php`, сниппет с изменениями находится в файле этого репозитория: [`snippets/vendor:catalog.import.1c/component.php`](https://raw.githubusercontent.com/dbfun/1c-bitrix-exchange/master/snippets/vendor%3Acatalog.import.1c/component.php). 117 | 118 | При вызове можно указать в GET-параметре вместо стандартного режима `mode=import` другое значение, например `mode=report`, и использовать в качестве условия в собственном обработчике: `if(($_GET["..."] == "report")) { /* свой обработчик */ }`. 119 | 120 | ### 2. Заменить стандартный компонент 121 | 122 | В файле `bitrix/admin/1c_exchange.php` необходимо заменить стандартный компонент на собственный: 123 | 124 | ``` 125 | // заменить 126 | $APPLICATION->IncludeComponent("bitrix:catalog.import.1c" 127 | // на 128 | $APPLICATION->IncludeComponent("vendor:catalog.import.1c" 129 | ``` 130 | 131 | ### 3. Запуск нового обмена 132 | 133 | В `docker run` нужно использовать дополнительный параметр `-e GET_STEP_MODE=custom_mode`, где `custom_mode` - параметр, который будет передан в `$_GET['mode']`. Например, обмен отчетами `report` будет выглядеть так: 134 | 135 | ``` 136 | docker run -it --rm \ 137 | -e FILE_NAME=report.zip \ 138 | -e ZIP=1 \ 139 | -e GET_STEP_MODE=report \ 140 | --env-file .env \ 141 | -v $(pwd)/data/report.zip:/src \ 142 | required/1c-bitrix-exchange:latest 143 | ``` 144 | 145 | 146 | ## Получение необработанных заказов 147 | 148 | Для получения необработанных заказов необходимо подмонтировать в `/var/log/` каталог, в который будет записан файл с заказами `02-get-orders.xml`. 149 | 150 | ``` 151 | docker run -it --rm \ 152 | --env-file .env \ 153 | -v $(pwd)/log/:/var/log/ \ 154 | required/1c-bitrix-exchange:latest \ 155 | getorders 156 | ``` 157 | 158 | 159 | ## Простая отправка данных POST запросом на свой обработчик в Битрикс 160 | 161 | Простая отправка данных POST из файла на выделенный URI сайта. Дополнительные параметры: 162 | 163 | | Параметр | Обязательный | Пример значения | Значение по-умолчанию | Описание | 164 | |---------------|--------------|--------------------------|-----------------------|----------------------------------------------------------------| 165 | | URI | + | /lk/ws/orders/ | | Относительный адрес, куда необходимо отправить данные из файла | 166 | | CONTENT_TYPE | | application/octet-stream | application/json | Заголовок `Content-Type` | 167 | 168 | Вариант использования: 169 | 170 | ``` 171 | docker run -it --rm \ 172 | -e URI="/lk/ws/orders/" \ 173 | --env-file .env \ 174 | -v $(pwd)/data/orders.json:/src \ 175 | required/1c-bitrix-exchange:latest \ 176 | post 177 | ``` 178 | 179 | ## Бандл для загрузки на рабочий сайт 180 | 181 | В файле `bundle.sh` содержатся различные кейсы загрузки данных на рабочий сайт. Данные для подключения к сайту следует указать в `.env`-файле, а для кейса - в виде параметров вызова: 182 | 183 | * `-c` - вариант обмена 184 | * `-s` - исходный файл (опционально) 185 | * `-f` - имя файла (опционально, будет передан как GET параметр) 186 | * `-d` - DNS (опционально) 187 | * `-e` - `.env`-файл (опционально, default: `.env`) 188 | 189 | Пример: 190 | 191 | ``` 192 | ./bundle.sh -c custom.csv -s ./data/zony.csv -f zony.csv -d 10.0.0.9 193 | ``` 194 | 195 | В ряде случаев использование бандла позволяет существенно сократить команду, что удобно: 196 | 197 | ``` 198 | ./bundle.sh -c import.xml 199 | ``` 200 | -------------------------------------------------------------------------------- /assets/offers.xml.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dbfun/bitrix.1c-bitrix-exchange/ce051f7a24e1a1b4bc452cafd9b03c6b5560374c/assets/offers.xml.gif -------------------------------------------------------------------------------- /bundle.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 4 | # Бандл для загрузки на рабочий сайт 5 | # 6 | 7 | cd "$(dirname "$0")" 8 | 9 | function help { 10 | local bold=$(tput bold) 11 | local normal=$(tput sgr0) 12 | echo -e "${bold}Описание${normal}\n" 13 | echo -e "\tБандл для загрузки на рабочий сайт \n" 14 | echo -e "${bold}Syntax:${normal}\n\t./bundle.sh \n" 15 | echo -e "${bold}Параметры${normal}\n" 16 | echo -e "\t${bold}-c${normal}\n\t\tвариант обмена\n" 17 | echo -e "\t${bold}-s${normal}\n\t\tисходный файл (опционально)\n" 18 | echo -e "\t${bold}-f${normal}\n\t\tимя файла (опционально, будет передан как GET параметр)\n" 19 | echo -e "\t${bold}-d${normal}\n\t\tDNS (опционально)\n" 20 | echo -e "\t${bold}-e${normal}\n\t\t.env-файл (опционально, default: .env)\n" 21 | } 22 | function getOptions { 23 | getDefauls 24 | if [[ ! -z "$SRC_FILE" ]]; then 25 | SRC_FILE=`realpath "$SRC_FILE"` 26 | fi 27 | } 28 | 29 | function getDefauls { 30 | if [[ -z "$FILE_NAME" ]] && [[ ! -z "$_FILE_NAME" ]]; then 31 | FILE_NAME="$_FILE_NAME" 32 | fi 33 | if [[ -z "$SRC_FILE" ]] && [[ ! -z "$_SRC_FILE" ]]; then 34 | SRC_FILE="$_SRC_FILE" 35 | fi 36 | if [[ -z "$ENV_FILE_STRING" ]] ; then 37 | ENV_FILE_STRING="--env-file .env" 38 | fi 39 | } 40 | 41 | while getopts "hc:s:f:d:e:" arg; do 42 | case $arg in 43 | h) 44 | help 45 | exit 46 | ;; 47 | c) 48 | CASE="$OPTARG" 49 | ;; 50 | s) 51 | SRC_FILE="$OPTARG" 52 | ;; 53 | f) 54 | FILE_NAME="$OPTARG" 55 | ;; 56 | d) 57 | DNS_STRING="--dns=$OPTARG" 58 | ;; 59 | e) 60 | ENV_FILE_STRING="--env-file $OPTARG" 61 | esac 62 | done 63 | 64 | if [[ -z "$1" ]]; then 65 | help 66 | exit 67 | fi 68 | 69 | # import.xml - обмен продукцией каталога 70 | if [ "$CASE" == "import.xml" ]; then 71 | getOptions 72 | docker run -it --rm \ 73 | -e FILE_NAME=import.xml \ 74 | $ENV_FILE_STRING \ 75 | $DNS_STRING \ 76 | -v $(pwd)/log/:/var/log/ \ 77 | -v $(pwd)/data/import.xml:/src \ 78 | required/1c-bitrix-exchange:latest 79 | fi 80 | 81 | # offers.xml - обмен ценами 82 | if [ "$CASE" == "offers.xml" ]; then 83 | getOptions 84 | docker run -it --rm \ 85 | -e FILE_NAME=offers.xml \ 86 | $ENV_FILE_STRING \ 87 | $DNS_STRING \ 88 | -v $(pwd)/log/:/var/log/ \ 89 | -v $(pwd)/data/offers.xml:/src \ 90 | required/1c-bitrix-exchange:latest 91 | fi 92 | 93 | # orders.xml - получение заказов с сайта 94 | if [ "$CASE" == "orders.xml" ]; then 95 | getOptions 96 | docker run -it --rm \ 97 | $ENV_FILE_STRING \ 98 | $DNS_STRING \ 99 | -v $(pwd)/log/:/var/log/ \ 100 | required/1c-bitrix-exchange:latest \ 101 | getorders 102 | fi 103 | 104 | # custom.reports - отчеты (custom) 105 | if [ "$CASE" == "custom.reports" ]; then 106 | _FILE_NAME=1c-2018.07.26-151049-11063 107 | _SRC_FILE=$(pwd)/data/1c-2018.07.26-151049-11063 108 | getOptions 109 | docker run -it --rm \ 110 | -e FILE_NAME="$FILE_NAME" \ 111 | -e ZIP=1 \ 112 | -e GET_STEP_MODE=report \ 113 | $ENV_FILE_STRING \ 114 | $DNS_STRING \ 115 | -v $(pwd)/log/:/var/log/ \ 116 | -v "$SRC_FILE":/src \ 117 | required/1c-bitrix-exchange:latest 118 | fi 119 | 120 | # custom.rezerv - резерв в пути (custom) 121 | if [ "$CASE" == "custom.rezerv" ]; then 122 | _FILE_NAME=rezerv.zip 123 | _SRC_FILE=$(pwd)/data/rezerv.zip 124 | getOptions 125 | docker run -it --rm \ 126 | -e FILE_NAME="$FILE_NAME" \ 127 | -e ZIP=1 \ 128 | -e GET_STEP_MODE=rezerv \ 129 | $ENV_FILE_STRING \ 130 | $DNS_STRING \ 131 | -v $(pwd)/log/:/var/log/ \ 132 | -v "$SRC_FILE":/src \ 133 | required/1c-bitrix-exchange:latest 134 | fi 135 | 136 | 137 | # custom.csv - обмен CSV (custom) 138 | if [ "$CASE" == "custom.csv" ]; then 139 | _FILE_NAME=stock.csv 140 | _SRC_FILE=$(pwd)/data/stock.csv 141 | getOptions 142 | docker run -it --rm \ 143 | -e FILE_NAME="$FILE_NAME" \ 144 | $ENV_FILE_STRING \ 145 | $DNS_STRING \ 146 | -v $(pwd)/log/:/var/log/ \ 147 | -v "$SRC_FILE":/src \ 148 | required/1c-bitrix-exchange:latest 149 | fi 150 | 151 | # custom.PlanPrih.json - план прихода продукции (custom) 152 | if [ "$CASE" == "custom.PlanPrih.json" ]; then 153 | _FILE_NAME=PlanPrih.json 154 | _SRC_FILE=$(pwd)/data/PlanPrih.json 155 | getOptions 156 | docker run -it --rm \ 157 | -e FILE_NAME="$FILE_NAME" \ 158 | $ENV_FILE_STRING \ 159 | $DNS_STRING \ 160 | -v $(pwd)/log/:/var/log/ \ 161 | -v "$SRC_FILE":/src \ 162 | required/1c-bitrix-exchange:latest 163 | fi 164 | 165 | 166 | # custom.ws.orders - обновление заказов через веб-сервис (custom) 167 | if [ "$CASE" == "custom.ws.orders" ]; then 168 | _SRC_FILE=$(pwd)/data/orders.json 169 | getOptions 170 | docker run -it --rm \ 171 | -e URI="/lk/ws/orders/?test=1" \ 172 | $ENV_FILE_STRING \ 173 | $DNS_STRING \ 174 | -v $(pwd)/log/:/var/log/ \ 175 | -v "$SRC_FILE":/src \ 176 | required/1c-bitrix-exchange:latest \ 177 | post 178 | fi 179 | -------------------------------------------------------------------------------- /data/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dbfun/bitrix.1c-bitrix-exchange/ce051f7a24e1a1b4bc452cafd9b03c6b5560374c/data/.gitkeep -------------------------------------------------------------------------------- /log/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dbfun/bitrix.1c-bitrix-exchange/ce051f7a24e1a1b4bc452cafd9b03c6b5560374c/log/.gitkeep -------------------------------------------------------------------------------- /scripts/generic: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 4 | # Стандартный обмен 1С => Битрикс 5 | # 6 | 7 | # 8 | # Ссылки 9 | # 10 | 11 | # скрипт обмена по HTTP 12 | URI="$SITE/bitrix/admin/1c_exchange.php" 13 | # авторизация 14 | URI_CHECKAUTH="$URI?type=catalog&mode=checkauth" 15 | # инициация 16 | URI_INIT="$URI?type=catalog&mode=init" 17 | # загрузка файла 18 | URI_UPLOAD="$URI?type=catalog&mode=file&filename=$FILE_NAME" 19 | 20 | # 21 | # Служебные переменные 22 | # 23 | 24 | # Продолжить обработку 25 | STEP_CONTINUE=1 26 | 27 | # 28 | # Библиотеки 29 | # 30 | 31 | source lib/colors.sh 32 | source lib/functions.sh 33 | 34 | function checkauth { 35 | info "checkauth:\t$URI_CHECKAUTH" 36 | curl $CURL_VERBOSITY -c "$COOK" "$URI_CHECKAUTH" --user "$AUTH_LOGIN":"$AUTH_PASS" --trace-ascii /var/log/curl-debug.txt > /var/log/01-checkauth.txt 37 | assert "$?" "0" "Login fails" 38 | } 39 | 40 | function init { 41 | info "init:\t\t$URI_INIT" 42 | curl $CURL_VERBOSITY -c "$COOK" -b "$COOK" "$URI_INIT" --user "$AUTH_LOGIN":"$AUTH_PASS" --trace-ascii /var/log/curl-debug.txt > /var/log/02-init.txt 43 | assert "$?" "0" "Init fails" 44 | } 45 | 46 | function upload { 47 | info "upload file:\t$URI_UPLOAD" 48 | curl $CURL_VERBOSITY -c "$COOK" -b "$COOK" -X POST --data-binary @- "$URI_UPLOAD" --user "$AUTH_LOGIN":"$AUTH_PASS" -H "Content-Type: application/octet-stream" -H "Expect:" --trace-ascii /var/log/curl-debug.txt < "$SRC_FILE" > /var/log/03-file.txt 49 | assert "$?" "0" "File upload fails" 50 | } 51 | 52 | function step { 53 | curl $CURL_VERBOSITY -c "$COOK" -b "$COOK" "$URI_STEP" --user "$AUTH_LOGIN":"$AUTH_PASS" --trace-ascii /var/log/curl-debug.txt > /var/log/04-step.txt 54 | assert "$?" "0" "Progress file fails (curl error)" 55 | 56 | echo 57 | iconv -f "$CHARSET_IN" -t "$CHARSET_OUT" /var/log/04-step.txt 58 | echo 59 | 60 | if grep -q failure /var/log/04-step.txt ; then 61 | error "Progress file fails (error in response)" 62 | exit 1 63 | fi 64 | 65 | if grep -q progress /var/log/04-step.txt ; then 66 | STEP_CONTINUE=1 67 | else 68 | STEP_CONTINUE=0 69 | fi 70 | } 71 | 72 | # обработка единичного файла 73 | function process { 74 | URI_STEP="$URI?type=catalog&mode=$GET_STEP_MODE&filename=$FILE_NAME" 75 | info "process:\t$URI_STEP" 76 | while [[ $STEP_CONTINUE == "1" ]]; do 77 | step 78 | done 79 | } 80 | 81 | # обработка всех файлов в архиве 82 | function processzip { 83 | info "process zip:\t$URI_STEP" 84 | zipinfo -1 "$SRC_FILE" | while read -d $'\n' PROCESS_FILENAME; do 85 | URI_STEP="$URI?type=catalog&mode=$GET_STEP_MODE&filename=$PROCESS_FILENAME" 86 | info "process file:\t$PROCESS_FILENAME" 87 | STEP_CONTINUE=1 88 | while [[ $STEP_CONTINUE == "1" ]]; do 89 | step 90 | done 91 | done 92 | } 93 | 94 | # проверка входных параметров, подстановка значений по-умолчанию 95 | function checkenv { 96 | 97 | if [ ! -f "$SRC_FILE" ]; then 98 | error "File not exists: $SRC_FILE" 99 | error "Use: Docker ... -v /path/to/upload/file.xml:/src" 100 | exit 1 101 | fi 102 | 103 | if [ -z "$SITE" ]; then 104 | error "Env parameter not set: SITE" 105 | exit 1 106 | fi 107 | 108 | if [ -z "$AUTH_LOGIN" ]; then 109 | error "Env parameter not set: AUTH_LOGIN" 110 | exit 1 111 | fi 112 | 113 | if [ -z "$AUTH_PASS" ]; then 114 | error "Env parameter not set: AUTH_PASS" 115 | exit 1 116 | fi 117 | 118 | } 119 | 120 | info "Start importing file $FILE_NAME on $SITE" 121 | 122 | checkenv 123 | 124 | cp "$SRC_FILE" "/var/log/$FILE_NAME" 125 | 126 | checkauth 127 | init 128 | upload 129 | 130 | if [ -n "$ZIP" ] && [ "$ZIP" -eq "1" ]; then 131 | processzip 132 | else 133 | process 134 | fi 135 | 136 | ok "all done" 137 | -------------------------------------------------------------------------------- /scripts/getorders: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 4 | # Получение необработанных заказов 5 | # 6 | 7 | # 8 | # Ссылки 9 | # 10 | 11 | # скрипт обмена по HTTP 12 | URI="$SITE/bitrix/admin/1c_exchange.php" 13 | # авторизация 14 | URI_CHECKAUTH="$URI?type=catalog&mode=checkauth" 15 | # получение заказов 16 | URI_GET_ORDERS="$URI?type=sale&mode=query&orderIDfrom=1" 17 | # завершение операции 18 | URI_SUCCESS="$URI?type=sale&mode=success" 19 | 20 | # 21 | # Библиотеки 22 | # 23 | 24 | source lib/colors.sh 25 | source lib/functions.sh 26 | 27 | function checkauth { 28 | info "checkauth:\t$URI_CHECKAUTH" 29 | curl $CURL_VERBOSITY -c "$COOK" "$URI_CHECKAUTH" --user "$AUTH_LOGIN":"$AUTH_PASS" --trace-ascii /var/log/curl-debug.txt > /var/log/01-checkauth.txt 30 | assert "$?" "0" "Login fails" 31 | } 32 | 33 | function get { 34 | info "get orders:\t$URI_GET_ORDERS" 35 | curl $CURL_VERBOSITY -sc "$COOK" "$URI_GET_ORDERS" --user "$AUTH_LOGIN":"$AUTH_PASS" --trace-ascii /var/log/curl-debug.txt > /var/log/02-get-orders.xml 36 | assert "$?" "0" "Get orders fails" 37 | } 38 | 39 | function success { 40 | info "sending success:\t$URI_SUCCESS" 41 | curl $CURL_VERBOSITY -sc "$COOK" "$URI_SUCCESS" --user "$AUTH_LOGIN":"$AUTH_PASS" --trace-ascii /var/log/curl-debug.txt > /var/log/03-success.txt 42 | assert "$?" "0" "Sending success fails" 43 | } 44 | 45 | 46 | function checkenv { 47 | 48 | if [ -z "$SITE" ]; then 49 | error "Env parameter not set: SITE" 50 | exit 1 51 | fi 52 | 53 | if [ -z "$AUTH_LOGIN" ]; then 54 | error "Env parameter not set: AUTH_LOGIN" 55 | exit 1 56 | fi 57 | 58 | if [ -z "$AUTH_PASS" ]; then 59 | error "Env parameter not set: AUTH_PASS" 60 | exit 1 61 | fi 62 | 63 | } 64 | 65 | info "Start get orders" 66 | 67 | checkenv 68 | 69 | checkauth 70 | get 71 | success 72 | 73 | ok "See orders file log/02-get-orders.xml" 74 | 75 | # Подтверждение получения заказов работает так (не реализовано): 76 | # "GET /bitrix/admin/1c_exchange.php?type=sale&mode=checkauth HTTP/1.0" 200 45 77 | # "GET /bitrix/admin/1c_exchange.php?type=sale&mode=init HTTP/1.0" 200 21 78 | # "POST /bitrix/admin/1c_exchange.php?type=sale&mode=file&filename=v8_52D8_e12.zip HTTP/1.0" 200 8 79 | -------------------------------------------------------------------------------- /scripts/lib/colors.sh: -------------------------------------------------------------------------------- 1 | # Библиотека цветов 2 | # Сброс 3 | Color_Off='\e[0m' # Text Reset 4 | Red='\e[0;31m' # Red 5 | Green='\e[0;32m' # Green 6 | Yellow='\e[0;33m' # Yellow 7 | Blue='\e[0;34m' # Blue 8 | Purple='\e[0;35m' # Purple 9 | Cyan='\e[0;36m' # Cyan 10 | White='\e[0;37m' # White 11 | UCyan='\e[4;36m' # Cyan 12 | -------------------------------------------------------------------------------- /scripts/lib/functions.sh: -------------------------------------------------------------------------------- 1 | function assert 2 | { 3 | SUBSTR=`echo "$1" | grep -q "$2"` 4 | if [ $? != 0 ]; then 5 | error "$3; Expected: $2" 6 | exit 1 7 | fi 8 | } 9 | 10 | function info 11 | { 12 | echo -e $Blue"$1"$Color_Off 13 | } 14 | 15 | function ok 16 | { 17 | echo -e $Green"$1"$Color_Off 18 | } 19 | 20 | function warning 21 | { 22 | echo -e $Yellow"$1"$Color_Off 23 | } 24 | 25 | function error 26 | { 27 | echo -e $Red"$1"$Color_Off 28 | } 29 | -------------------------------------------------------------------------------- /scripts/post: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 4 | # Простая отправка данных POST запросом на свой обработчик в Битрикс 5 | # 6 | 7 | # 8 | # Ссылки 9 | # 10 | 11 | # Абсолютный адрес 12 | ABS_URI="$SITE$URI" 13 | 14 | # 15 | # Библиотеки 16 | # 17 | 18 | source lib/colors.sh 19 | source lib/functions.sh 20 | 21 | function post { 22 | info "post data:\t$ABS_URI" 23 | curl $CURL_VERBOSITY --user "$AUTH_LOGIN":"$AUTH_PASS" -i -X POST --data-binary @- -H "Content-Type: $CONTENT_TYPE" "$ABS_URI" --trace-ascii /var/log/curl-debug.txt < "$SRC_FILE" > /var/log/01-response.txt 24 | assert "$?" "0" "Post data fails" 25 | } 26 | 27 | function checkenv { 28 | 29 | if [ ! -f "$SRC_FILE" ]; then 30 | error "File not exists: $SRC_FILE" 31 | error "Use: Docker ... -v /path/to/upload/file.json:/src" 32 | exit 1 33 | fi 34 | 35 | if [ -z "$SITE" ]; then 36 | error "Env parameter not set: SITE" 37 | exit 1 38 | fi 39 | 40 | if [ -z "$URI" ]; then 41 | error "Env parameter not set: URI" 42 | exit 1 43 | fi 44 | 45 | if [ -z "$AUTH_LOGIN" ]; then 46 | error "Env parameter not set: AUTH_LOGIN" 47 | exit 1 48 | fi 49 | 50 | if [ -z "$AUTH_PASS" ]; then 51 | error "Env parameter not set: AUTH_PASS" 52 | exit 1 53 | fi 54 | 55 | if [ -z "$CONTENT_TYPE" ]; then 56 | CONTENT_TYPE="application/json" 57 | fi 58 | 59 | } 60 | 61 | info "Start post data on $SITE" 62 | checkenv 63 | post 64 | ok "all done" 65 | -------------------------------------------------------------------------------- /snippets/vendor:catalog.import.1c/component.php: -------------------------------------------------------------------------------- 1 | ", "", $strError); 59 | } 60 | } 61 | // /загрузка файлов в раздел Отчёты 62 | elseif(($_GET["mode"] == "checkRezerv")) 63 | { 64 | \Vendor\Dealer\Parser\Legacy::exportRezervFile(); 65 | die(); 66 | } 67 | --------------------------------------------------------------------------------