├── .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 | 
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 |
--------------------------------------------------------------------------------