Для организации обмена данными между 1С и Bitrix24 с использованием PHP, FastAPI и 1С, можно следовать следующей схеме:
- PHP код в Bitrix24: Отправляет запрос с помощью curl к FastAPI приложению.
- FastAPI приложение: Обрабатывает запрос от Bitrix24, формирует данные в формате XDTO и отправляет запрос к 1С с использованием requests.post.
- 1С: Получает и обрабатывает данные, отправленные с FastAPI приложения.
- PHP код в Bitrix24
В вашем бизнес-процессе Bitrix24, используйте curl для отправки данных на FastAPI приложение. Пример кода на PHP:
<?php
$data = array(
"name" => "Example Name",
"email" => "example@example.com"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://your-fastapi-server/api/endpoint");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json'
));
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
- FastAPI приложение
Создайте приложение на FastAPI, которое будет принимать запросы от Bitrix24 и отправлять их в 1С. Пример кода на Python с использованием FastAPI и requests:
from fastapi import FastAPI, Request
import requests
import json
app = FastAPI()
@app.post("/api/endpoint")
async def handle_request(request: Request):
data = await request.json()
# Формирование данных в формате XDTO
xdto_data = {
"name": data["name"],
"email": data["email"]
}
# Отправка данных в 1С
response = requests.post(
"http://your-1c-server/api/endpoint",
json=xdto_data,
headers={"Content-Type": "application/json"}
)
return {"status": "success", "1c_response": response.json()}
- Обработка запроса в 1С
Создайте обработчик в 1С, который будет принимать запросы и обрабатывать данные в формате XDTO. Пример кода на 1С:
Процедура ОбработатьЗапрос(Запрос)
HTTPЗапрос = Новый HTTPЗапрос(Запрос);
ТелоЗапроса = HTTPЗапрос.ПолучитьТелоКакСтроку();
Данные = СтрНайти(ТелоЗапроса);
// Пример обработки данных
Имя = Данные["name"];
ЭлектроннаяПочта = Данные["email"];
// Обработка данных (сохранение в базе и т.д.)
HTTPОтвет = Новый HTTPОтвет(200);
HTTPОтвет.УстановитьТело(Новый HTTPСообщение(Новый Строка(Формат("Данные успешно получены: %1", Имя))));
Запрос.ОтправитьОтвет(HTTPОтвет);
КонецПроцедуры
- Bitrix24 (PHP):
- Отправка данных на FastAPI приложение.
- curl запрос с данными в формате JSON.
- FastAPI (Python):
- Прием данных от Bitrix24.
- Формирование данных в формате XDTO.
- Отправка данных в 1С с использованием requests.post.
- 1С (1C):
- Прием данных от FastAPI.
- Обработка и сохранение данных.
Формат XDTO данных может быть любым, но для примера это может быть JSON:
{
"name": "Example Name",
"email": "example@example.com"
}
Таким образом, схема обмена данными между 1С и Bitrix24 с использованием PHP, FastAPI и 1С будет состоять из четко определенных шагов по передаче данных между системами, обеспечивая гибкость и масштабируемость интеграции.
Мне невдомек, какой у вас IDE, предположу лайт вариант. В файле main.py вставить
if __name__ == "__main__":
pass
uvicorn.run(app, host="192.168.1.2", port=8000
# , ssl=ssl_context
)
'''uvicorn.run(
# app,
"__main__:app",
host="192.168.1.2", port=8000,
reload=True,
# workers=2,
ssl_keyfile="./key.pem",
ssl_certfile="./cert.pem")
'''
Если приложение запустили, то откройте страницу http://localhost:8000/docs и тестируйте на здоровье)
Я только ЗА, чтобы происходила не демонизация guicorn/uvicorn, а чтобы приложение запускалось через Supervisor с помошью start_app.sh
#!/bin/bash
# --worker-class $WORKER_CLASS \
NAME=app_b24-fastapi
DIR=/home/myuser/app_b24
USER=owner
GROUP=owner
WORKERS=3
WORKER_CLASS=uvicorn.workers.UvicornWorker
VENV=$DIR/.venv/bin/activate
BIND=0.0.0.0:8100
LOG_LEVEL=error
cd $DIR
source $VENV
exec gunicorn wsgi:app \
--name $NAME \
--workers $WORKERS \
--user=$USER \
--group=$GROUP \
--bind=$BIND \
--log-level=$LOG_LEVEL \
--log-file=-
Как Вы настроите nginx и какие задачи решаете, не знаю, но вот примерно как может выглядеть файл конфигурации для вашего ресурса
location /app_b24 {
proxy_pass http://localhost:8100/;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_set_header Host $host;
#proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
}
location /swaggeruiapp_b24 {
proxy_pass http://127.0.0.1:8100/docs/;
}
Может, это все - лишнее (https) не будете применять, тогда хотя-бы сделайте намек на микросервис, огородив доступ с помошью iptables