![]() |
![]() |
![]() |
|
Импорт 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)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |