Имя: Пароль:
1C
1С v8
Импорт xml в 1С
0 pavel-zol
 
02.03.16
11:09
Доброго времени суток, форумчане.

Впервые столкнулся с тем что необходимо синхронизировать заказы интернет-магазина с 1С.


Парсер xml уже написал для каталога, дошло дело до обмена заказами. На ftp лежит xml-файл с заказами, который должен моим php-скриптом отправиться на обработку в 1С. Я настроил все в 1С. Проверка говорит, что соединение успешно, но данные не могут быть прочитаны. В скрипте я пользую file_get_content и simpl_xml_string для формирования переменной xml-строки в массиве $_POST когда mode=query. Я наивно надеялся что 1С сам подхватит этот пост и сам его волшебненько схавает, за что и был покаран. Подскажите как это сделать? Все блуждание по форумам и документациям приводит меня к процедурам написанным на 1С, которых я совершенно не умею писать (хотя говорят есть готовые решения на этот случай), но мне тем не менее не ясно куда эту процедуру прописывать и что в этом случае должно происходить в php-скрипте что бы получить удачный импорт. Данные которые я сейчас пытаюсь импортировать это тестовый xml с сайта со спецификациями CommerceML 2.
1 Мимохожий Однако
 
02.03.16
11:17
Если файл сделан по стандартам CommerceML, то в типовой конфигурации есть обработка по загрузке твоего файла. 1С сама подхватит, если у неё будет запущено соответствующее регламентное задание с обработкой. ИМХО, или ищи 1с-ника в партнеры, или изучай 1С.
2 Лефмихалыч
 
02.03.16
11:20
под 1С имеется в виду Битрикс?
3 pavel-zol
 
02.03.16
17:14
Да 1С Битрикс.
4 pavel-zol
 
02.03.16
17:37
Буквально вопрос выглядит как "Чем отправить в 1С какими средствами php какой должен быть выполнен код" и "Чем принять в 1С. Это может быть опция обмена с Веб-сервером заказами, которые настраиваются на http://<сайт>/<путь>; /1c_exchange.php или процедура написанная на языке 1С.
5 pavel-zol
 
02.03.16
20:27
<?php

/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the Closure to execute when that URI is requested.
|
*/

Route::get('/', function()
{
    return View::make('hello');
});

Route::any('/1c_exchange.php', function()
{
    if (Input::get('type') == 'catalog')
    {
        $input_mode = Input::get('mode');
        $uploads_folder = storage_path() . '/uploads/1c/';
        if ($input_mode == 'checkauth')
        {
            //Not possible to return plaintext session cookie because Laravel encrypts them right before sending
            return "success\nnil\nnil";
        }
        elseif ($input_mode == 'init')
        {
            File::deleteDirectory($uploads_folder, true);

            //Not zipping makes a pair of files that are over 50 times larger
            return "zip=yes\nfile_limit=10000";
        }
        elseif ($input_mode == 'file')
        {
            File::append($uploads_folder . Input::get('filename'), Request::instance()->getContent());
            return "success\n";
        }
        elseif ($input_mode == 'import')
        {
            //Dirty as fuck, necessary due to no session storage
            //If the only file in the folder is a zip, it must mean the 1c has just uploaded it so we unzip and delete
            $file_path = File::files($uploads_folder)[0];
            Log::info('Filename is ' . $file_path);
            if (strpos($file_path, 'zip') !== false) {
                $zip = new ZipArchive;
                if ($zip->open($file_path) === true) {
                    $zip->extractTo($uploads_folder);
                    $zip->close();
                    File::delete($file_path);
                } else {
                    Log::info("couldn't unzip");
                    echo 'failure\n';
                }
            };

            //Parsing XML here
            Log::info("importing " . Input::get('filename'));
            return "success\n";
        }
    }
        elseif (Input::get('type') == 'sale')
    {
############################# sale mode ##################################
        $input_mode = Input::get('mode');
        $uploads_folder = storage_path() . '/uploads/export/';
        if ($input_mode == 'checkauth')
        {
            //Not possible to return plaintext session cookie because Laravel encrypts them right before sending
            return "success\nnil\nnil";
        }
        elseif ($input_mode == 'init')
        {
            File::deleteDirectory($uploads_folder, true);

            //Not zipping makes a pair of files that are over 50 times larger
            return "zip=yes\nfile_limit=10000";
        }
        elseif ($input_mode == 'query')
        {
            $file_path = File::files($uploads_folder)[0];
            Log::info('Filename is ' . $file_path);
            if (strpos($file_path, 'xml') !== false)
                {
                    $export_xml = file_get_contents($file_path."from.xml");
                    $comer = simplexml_load_string($export_xml);
                    $_POST['xmlfile'] = $comer;
                    return "success\n";

                } else {
                    Log::info("couldn't unzip");
                    echo 'failure\n';
                }
        }
/*        elseif ($input_mode == 'file')
        {
            File::append($uploads_folder . Input::get('filename'), Request::instance()->getContent());
            return "success\n";
        }
*/
############################# sale mode ##################################
    } else App::abort(403, 'Unauthorized action.');

});


#App::abort(403, 'Unauthorized action.');
Route::controller('admin/categories', 'CategoriesController');
6 франц
 
02.03.16
23:23
(3) ой, а разве ж 1С+битрикс сам не кушает все это?. ой, а зачем свой парсер?..
7 франц
 
02.03.16
23:26
8 франц
 
03.03.16
02:16
а, вот, нашел то, что хотел - http://1c.1c-bitrix.ru/ecommerce/download.php. Здесь, собственно, доп.модули для 1С, которые упрощают интеграцию. Сам использовал для ут 11.1 (без модуля заказов - онную разработывали сами "с нуля", чего не рекомендую), сейчас буду и для ут 10.3 онное использовать.
9 pavel-zol
 
03.03.16
15:56
франц, спасибо
10 франц
 
03.03.16
23:41
* разрабатывали. Это к (8)