• Laravel интеграция с 1с?

    @NiCnameqqww Автор вопроса
    Alex Wells, Во первых "Ты", я написал только в последнем сообщении,
    Во вторых в запросе 'init' достаточно отправить 'success' что бы все работало(он будет использовать стандартные значения)
    В третьих я написал "ВЫ НЕ КОМПЕТЕНТНЫ В ЭТОМ ВОПРОСЕ" а не в LARAVEL
    В четвертых выражаясь вашими словами "Ткните пальцем" в каком месте я не компетентен в laravel
  • Laravel интеграция с 1с?

    @NiCnameqqww Автор вопроса
    JhaoDa, ЭТО
    Storage::disk('public')->put('file.txt', 'Contents');
    создает файл file.txt c содержимым 'Content'
  • Laravel интеграция с 1с?

    @NiCnameqqww Автор вопроса
    JhaoDa, Логика приложения:
    1)в файле web.php регистрируем роут
    <b>Route::get('/1c_exchange.php', 'ExchangeController@exchange');</b>

    2)Создаем контроллер ExchangeController и внем метод exchange который принимает Request
    3)Заходим в 1с пишем путь до сайта site.ru/1c_exchange.php, пишем логин и пароль из созданного пользователя используя стандартную аутентификацию, далее настраиваем выгрузку в 1с
    4) Идем в api 1с предприятия(обмен данными с сайтом) читаем(это важно)
    5) После прочтения api естественно мы уже знаем: какие запросы будет отправлять 1с и какие ответы нам нужно предоставить так что в выше указанном методе(exchange) пишем проверку на входящие запросы по параметру mode
    6) Первый запрос мы получаем checkauth, логинимся при помощи полученых данных из 1с а именно логином и паролем, которые мы вписали в пункте 3 и если аутентификация пройдена отправляем в ответ 'success'
    7) Если 1с после первого запроса получает 'success' она отправляет следующий 'init' на него нам тоже необходимо ответить 'success'
    8) Если и на этот запрос 1с получает ответ 'success', она отправляет запрос 'file' c нужными нам файлами
    Профит
    Как все просто, казалось бы, но почему то 3 - его запроса просто не поступает, наверное потому что он post методом отправляется или почему я не знаю(я создавал еще 1 роут только с методом post в этом же контроллере создавал новый метод)
    Еще раз вас прошу если вы и теперь не понимаете зачем в laravel(акцент на laravel) передавать в ответ куки, токен, то ПОЖАЛУЙСТА НЕ СПАМЬТЕ, ВЫ НЕ КОМПЕТЕНТНЫ В ЭТОМ ВОПРОСЕ
  • Laravel интеграция с 1с?

    @NiCnameqqww Автор вопроса
    JhaoDa,Cначала у меня стоял get потом я поставил any потому что 1с запрос mode=file отправляет методом post,
    Изобретенная аутентификация у меня для теста потому что в В КОНТРОЛЛЕРЕ НЕ ПРОХОДИТ ЗАПРОС MODE=INIT,
    Если вы не понимаете почему здесь методы init разные, почему я добавляю куки, токен, дату, почему я изобрел аутентификацию, то не отвечайте мне здесь ВЫ не компетентны в этом вопросе
  • Laravel интеграция с 1с?

    @NiCnameqqww Автор вопроса
    JhaoDa, Так будет правильней
  • Laravel интеграция с 1с?

    @NiCnameqqww Автор вопроса
    JhaoDa, Дак я и прошу помощи у знающих людей, я же не говорю что "ни чего не работает помогите" как вы выразилсь, у меня все работает, только я хочу что бы ответ обрабатывался в контроллере
  • Laravel интеграция с 1с?

    @NiCnameqqww Автор вопроса
    JhaoDa, ААА ну сорян я же не знал, сейчас исправлю
  • Laravel интеграция с 1с?

    @NiCnameqqww Автор вопроса
    JhaoDa, И что непонятного в моем вопросе,я написал что когда я регистрирую роут(например GET '/1c_exchange/'), отправляю обработку в контроллер в метод exchange, запускаю выгрузку в 1с, она(1с) посылает запрос checkauth а метод exchange принимает этот запрос и в ответ отправляет 'success', после чего когда 1с получила 'success', она (1с) отправляет следующий запрос который называется 'init', в ответ я так же отправляю 'success', после чего следует следующий запрос уже с файлами, но у меня все заканчивается на стадии инициализации, чего не могу сказать по обычный файлик 1c_exchange.php который лежит в папочке public и роут для него не нужен т.к. обратиться к нему можно так site.ru/1c_exchange.php и внем лежит код такой же как в вышеуказанном контроллере в методе exchange, и здесь он прекрасно работает
  • Laravel интеграция с 1с?

    @NiCnameqqww Автор вопроса
    JhaoDa, Что тут ужасного, во первых я тут первый раз и не знал этого, во вторых где вы увидели только запах laravel, что не так с контроллером и роутом, если уж ВЫ критикуете, то будьте добры указать на недостатки кода . Спасибо.
  • Laravel интеграция с 1с?

    @NiCnameqqww Автор вопроса
    проблема в том что когда я начинаю выгружать через контроллер, проходит только две первые стадии(checkauth и init), и на этом все третий запрос уже не отправляет
  • Laravel интеграция с 1с?

    @NiCnameqqww Автор вопроса
    Я делаю на стороне сайта, но через контроллер у меня не получается это сделать, я пока что сделал просто через php файл

    Вот мой контроллер:
    public function exchange(Request $request) {
            $cookieName = config('session.cookie');
            $cookieID = Session::getId();
            $csrf = csrf_token();
            $date = date('Y-m-d H:m:s');
           
            if($request->get('type') == 'catalog')
            {
                switch ($request->mode)
                {
                    case 'checkauth':
                        $user = $_SERVER['PHP_AUTH_USER'];
                        $pass = $_SERVER['PHP_AUTH_PW'];
                        if(Auth::attempt(['email' => $user, 'password' => $pass]))
                        {
                            return response("success\n$cookieName\n$cookieID\n$csrf\n$date")
                                ->header("Content-Type" ,"text/plane; charset=UTF-8");
                        };
                    case "init":
    
                        return response("no\nfile_limit=100000000000\nsessid=$cookieID\nversion=3.1")
                            ->header("Content-Type" ,"text/plane; charset=UTF-8");
    
                    case "file":
                        
                        $filename = $request->get('filename');
                        $file_content = file_get_contents('php://input');
                        Storage::disk('public')->put('file.txt', 'Contents');
                }
            }
           
        }

    а вот мой php файл который работает:
    <?php
    $user	= "admin";
    $pass	= "admin";
    $path	= "upload/";
    
    if (!isset($_SERVER['PHP_AUTH_USER']) && !isset($_SERVER["PHP_AUTH_PW"]) && !isset($_REQUEST["type"])) {
        header('WWW-Authenticate: Basic realm="1C-Exchange"');
        header('HTTP/1.0 401 Unauthorized');
        $_SESSION["login"] = false;
        die("failure");
    }
    
    if (($_SERVER["PHP_AUTH_USER"] == $user && $_SERVER["PHP_AUTH_PW"] == $pass) || $_SESSION["login"]) {
        $_SESSION["login"] = true;
        if ($_REQUEST["type"] == "catalog") {
            switch ($_REQUEST["mode"]):
                case "checkauth":
                    die("success");
                    break;
                case "init":
                    die("zip=no" . "\r\n" . "file_limit=0");
                    break;
                case "file":
                    $filename = (strpos($_REQUEST["filename"], ".") == 0) ? substr($_REQUEST["filename"], 1) : $_REQUEST["filename"];
                    $dirname = dirname($path . $filename);
                    if (!is_dir($dirname))
                        mkdir($dirname, 0755, true);
                    $file = fopen($path . $filename, 'ab') or die("failure");
                    fwrite($file, file_get_contents('php://input'));
                    fclose($file);
                    die("success");
                    break;
            endswitch;
        }
        if ($_REQUEST["type"] == "sale") {
    
        }
    } else {
        header('WWW-Authenticate: Basic realm="1C-Exchange"');
        header('HTTP/1.0 401 Unauthorized');
        $_SESSION["login"] = false;
        die("failure");
    }

    роуты:
    Route::any('/1c/1c_exchange.php', 'ExchangeController@exchange');

    Это роут для контроллера