Эта статья поможет программистам быстро настроить обмен данными между 1С и сайтом на платформе 1С-Битрикс. Приведены пошаговые команды curl для авторизации, загрузки и обработки XML-файлов (например, цен и остатков).
Обмен данными между 1С и сайтом на Bitrix может быть как ручным (через curl), так и
автоматизированным (через bash-скрипт). В этой статье мы рассмотрим оба способа, а также предоставим готовый скрипт,
который можно адаптировать под свои нужды.
Автоматизация обмена с помощью bash-скрипта
Ниже приведён пример автоматизированного обмена заказами с сайтом. Скрипт выполняет авторизацию, инициализацию, забор заказов и завершение обмена. Все ответы сервера обрабатываются и логируются.
Пример скрипта
#!/bin/bash
# Данные для авторизации
LOGIN="Ваш_логин"
PASSWORD="Ваш_пароль"
BASE_URL="https://ваш_сайт.ru/bitrix/admin/1c_exchange.php"
LOG_FILE="exchange.log"
# Функция логирования
log() {
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
# Функция запросов к серверу
make_request() {
local url="$1"
curl -s -u "$LOGIN:$PASSWORD" \
-H "User-Agent: 1C+Enterprise/8.3" \
"$url" | iconv -f WINDOWS-1251 -t UTF-8
}
# Авторизация
log "Авторизация..."
RESPONSE=$(make_request "$BASE_URL?type=sale&mode=checkauth")
if echo "$RESPONSE" | grep -q "failure"; then
log "Ошибка авторизации: $(echo "$RESPONSE" | head -n 1)"
exit 1
fi
SESSID=$(echo "$RESPONSE" | grep -oE 'sessid=([a-f0-9]+)' | cut -d= -f2)
if [[ -z "$SESSID" ]]; then
log "Не удалось получить SESSION ID."
exit 1
fi
log "Успешная авторизация. SESSION ID: $SESSID"
# Инициализация обмена
log "Инициализация обмена..."
INIT_RESPONSE=$(make_request "$BASE_URL?type=sale&mode=init&sessid=$SESSID")
log "$INIT_RESPONSE"
if echo "$INIT_RESPONSE" | grep -q "failure"; then
log "Ошибка инициализации: $(echo "$INIT_RESPONSE" | head -n 1)"
exit 1
fi
# Получение заказов
log "Получение заказов..."
QUERY_RESPONSE=$(make_request "$BASE_URL?type=sale&mode=query&sessid=$SESSID")
if [[ -z "$QUERY_RESPONSE" || "$QUERY_RESPONSE" == *"failure"* ]]; then
log "Нет данных или ошибка: $(echo "$QUERY_RESPONSE" | head -n 1)"
else
echo "$QUERY_RESPONSE" > orders.xml
log "Данные заказов сохранены в файл orders.xml"
fi
# Завершение обмена
log "Завершение обмена..."
SUCCESS_RESPONSE=$(make_request "$BASE_URL?type=sale&mode=success&sessid=$SESSID")
log "$SUCCESS_RESPONSE"
Примечание: Этот скрипт можно запускать по расписанию через cron или вручную при
необходимости.
Подробности API-обмена
1. Авторизация
curl -v -u "логин:пароль" \ "https://example.com/bitrix/admin/1c_exchange.php?type=catalog&mode=checkauth"
Пример ответа:
success PHPSESSID <идентификатор_сессии> sessid=<sessid> timestamp=<timestamp>
2. Загрузка файлов
curl -v -u "логин:пароль" -X POST \ -F "filename=prices.xml" \ -F "file=@/path/to/prices.xml" \ "https://example.com/bitrix/admin/1c_exchange.php?type=catalog&mode=file&sessid=<sessid>"
3. Обработка загруженных файлов
curl -v -u "логин:пароль" \ "https://example.com/bitrix/admin/1c_exchange.php?type=catalog&mode=import&sessid=<sessid>"
4. Завершение обмена
curl -v -u "логин:пароль" \ "https://example.com/bitrix/admin/1c_exchange.php?type=catalog&mode=complete&sessid=<sessid>"
5. Получение заказов
curl -v -u "логин:пароль" \ "https://example.com/bitrix/admin/1c_exchange.php?type=sale&mode=query&sessid=<sessid>"
6. Подтверждение обработки заказов
curl -v -u "логин:пароль" -X POST \ -F "filename=success.xml" \ -F "file=@/path/to/success.xml" \ "https://example.com/bitrix/admin/1c_exchange.php?type=sale&mode=file&sessid=<sessid>"
curl -v -u "логин:пароль" \ "https://example.com/bitrix/admin/1c_exchange.php?type=sale&mode=success&sessid=<sessid>"
7. Загрузка фотографий товаров
curl -v -u "логин:пароль" -X POST \ -F "filename=import_files/image1.jpg" \ -F "file=@/path/to/image1.jpg" \ "https://example.com/bitrix/admin/1c_exchange.php?type=catalog&mode=file&sessid=<sessid>"
8. Обработка загруженных фотографий
curl -v -u "логин:пароль" \ "https://example.com/bitrix/admin/1c_exchange.php?type=catalog&mode=import&filename=import.xml&sessid=<sessid>"
9. Завершение обмена
curl -v -u "логин:пароль" \ "https://example.com/bitrix/admin/1c_exchange.php?type=catalog&mode=complete&sessid=<sessid>"
Пример полного сценария загрузки фотографий
- Авторизация:
curl -v -u "user:password" \ "https://example.com/bitrix/admin/1c_exchange.php?type=catalog&mode=checkauth" - Загрузка изображения:
curl -v -u "user:password" -X POST \ -F "filename=import_files/image1.jpg" \ -F "file=@/path/to/image1.jpg" \ "https://example.com/bitrix/admin/1c_exchange.php?type=catalog&mode=file&sessid=<sessid>" - Обработка XML с привязкой к изображениям:
curl -v -u "user:password" \ "https://example.com/bitrix/admin/1c_exchange.php?type=catalog&mode=import&filename=import.xml&sessid=<sessid>" - Завершение обмена:
curl -v -u "user:password" \ "https://example.com/bitrix/admin/1c_exchange.php?type=catalog&mode=complete&sessid=<sessid>"
Примечание: Убедитесь, что в import.xml указаны правильные пути к изображениям и их
связь с товарами.
Полезные советы
- Проверяйте логи: Изучайте файлы в
/upload/1c_exchange/. - Обновляйте сертификаты: Убедитесь в актуальности SSL-сертификатов.
- Очередность: Авторизация → Загрузка → Обработка → Завершение.
- Размер файлов: Установите
upload_max_filesizeиpost_max_sizeвphp.ini. - Форматы изображений: Используйте JPEG, PNG для экономии трафика и места.