Реализация обмена 1с и yii2

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
vv-off
Сообщения: 53
Зарегистрирован: 2018.01.12, 11:49

Реализация обмена 1с и yii2

Сообщение vv-off »

Здравствуйте.
Пытаюсь выгрузить данные из 1с в yii2. Сделал контроллер, в нем принимаю get параметры запроса и в зависимости от параметра отдаю 1с ответы. Когда инициируешь обмен из 1с режимы checkauth, init, complete проходят и обрабатываются, но вот режим file (передача xml) перекидывает видимо на 404, потому что именно в view\site\ error.php отлавливаю этот запрос. Если ввожу его в браузере то получаю адекватный ответ от yii.

вот дебаг по $_SERVER['REQUEST_URI'] того-что нормально отрабатывает и отдает ответы:
----------
запрос - /exchange?type=catalog&mode=checkauth
ответ - success PHPSESSID o9qm1a8a65cho1kksn31ps20i0
---------
запрос - /exchange?type=catalog&mode=init&&version=3.1
ответ - zip=yes file_limit=0
---------
запрос - /exchange?type=catalog&mode=complete&
ответ - success
---------

а вот этот запрос (передача xml) улетает в 404, ловлю его там
/exchange?type=catalog&mode=file&filename=v8_3F82_773.zip&

если ввожу в браузере /exchange?type=catalog&mode=file&filename=v8_3F82_773.zip&
то получаю success

по коду просто заглушки с ответами 1с-нине

Код: Выделить всё

class ExchangeController extends Controller
{
    public function actionIndex()
    {
        $request = Yii::$app->request;

        switch ($request->get('mode')) {
            case 'checkauth' :
                echo "success\n";
                echo session_name() . "\n";
                echo session_id() . "\n";
                exit;

            case 'init' :
                $zip = extension_loaded('zip') ? 'yes' : 'no';
                echo 'zip='.$zip."\n";
                echo "file_limit=0\n";
                exit;

            case 'file' :
                echo "success\n";
                exit;

            case 'import' :
                echo "success\n";
                exit;

            case 'complete' :
                echo "success\n";
                exit;
        }
    }
}
Ну и в 1с соответственно путь - http://yiilpshop.local/exchange

Может кто сталкивался?
vv-off
Сообщения: 53
Зарегистрирован: 2018.01.12, 11:49

Re: Реализация обмена 1с и yii2

Сообщение vv-off »

Кажется разобрался. Дело было в проверке CSRF.
Скажите насколько корректно отключить её для этого контроллера методом Yii::$app->controller->enableCsrfValidation = false;?
Или есть более корректный способ
Аватара пользователя
carono
Сообщения: 52
Зарегистрирован: 2018.04.28, 11:05

Re: Реализация обмена 1с и yii2

Сообщение carono »

для своего контроллера обмена выключи, это нормально, ни кто ведь, кроме твоей 1с не будет им пользоваться.
Аватара пользователя
carono
Сообщения: 52
Зарегистрирован: 2018.04.28, 11:05

Re: Реализация обмена 1с и yii2

Сообщение carono »

можешь попробовать готовый модуль https://github.com/carono/yii2-1c-exchange
vv-off
Сообщения: 53
Зарегистрирован: 2018.01.12, 11:49

Re: Реализация обмена 1с и yii2

Сообщение vv-off »

Большое спасибо!
Аватара пользователя
carono
Сообщения: 52
Зарегистрирован: 2018.04.28, 11:05

Re: Реализация обмена 1с и yii2

Сообщение carono »

если будешь использовать модули и появятся вопросы по использованию, пиши сюда, в тикеты на гитхабе или на почту
vv-off
Сообщения: 53
Зарегистрирован: 2018.01.12, 11:49

Re: Реализация обмена 1с и yii2

Сообщение vv-off »

Ок. Еще раз спасибо. Мне главное получить файлы (уже получил). А там дальше довольно специфичный парсинг, из-за корявого ведения базы в 1с.
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: Реализация обмена 1с и yii2

Сообщение svil »

Пытаюсь реализовать выгрузку файла xml c 1C в базу данных yii2.
1) С помощью composer подключила два модуля yii2-1c-exchange и https://github.com/creocoder/yii2-nested-sets
Создала с помощью миграции таблицу и модель Group по примеру

Код: Выделить всё

$this->createTable('{{%group}}', [
    'id' => self::primaryKey(),
    'name' => self::string()->comment('Наименование группы'),
    'parent_id' => self::integer()->comment('Родительская группа'),
    'accounting_id' => self::string()->comment('Код в 1С')->unique(),
]);
Но далее эта модель создается с подключением yii2-nested-sets
Какие там должны быть поля?
2)Модель Product c 3 таблицами создается с помощью миграций пакета carono/yii2-migrate?
Где их взять? Запускала php carono/yii2-migrate Product-ошибка
Дальше не знаю что делать. Проект https://github.com/svil1502/basic.git
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: Реализация обмена 1с и yii2

Сообщение svil »

Как запустить тесты из vendor расширения yii2-1C-exchange?
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: Реализация обмена 1с и yii2

Сообщение svil »

Код: Выделить всё

 vendor/bin/codecept run
MIB search path: c:/usr/share/snmp/mibs
Cannot find module (IP-MIB): At line 0 in (none)
Cannot find module (IF-MIB): At line 0 in (none)
Cannot find module (TCP-MIB): At line 0 in (none)
Cannot find module (UDP-MIB): At line 0 in (none)
Cannot find module (HOST-RESOURCES-MIB): At line 0 in (none)
Cannot find module (SNMPv2-MIB): At line 0 in (none)
Cannot find module (SNMPv2-SMI): At line 0 in (none)
Cannot find module (NOTIFICATION-LOG-MIB): At line 0 in (none)
Cannot find module (UCD-SNMP-MIB): At line 0 in (none)
Cannot find module (UCD-DEMO-MIB): At line 0 in (none)
Cannot find module (SNMP-TARGET-MIB): At line 0 in (none)
Cannot find module (NET-SNMP-AGENT-MIB): At line 0 in (none)
Cannot find module (DISMAN-EVENT-MIB): At line 0 in (none)
Cannot find module (SNMP-VIEW-BASED-ACM-MIB): At line 0 in (none)
Cannot find module (SNMP-COMMUNITY-MIB): At line 0 in (none)
Cannot find module (SNMP-FRAMEWORK-MIB): At line 0 in (none)
Cannot find module (SNMP-MPD-MIB): At line 0 in (none)
Cannot find module (SNMP-USER-BASED-SM-MIB): At line 0 in (none)
Cannot find module (SNMP-NOTIFICATION-MIB): At line 0 in (none)
Cannot find module (SNMPv2-TM): At line 0 in (none)
Codeception PHP Testing Framework v2.5.1
Powered by PHPUnit 7.3.5 by Sebastian Bergmann and contributors.
Running with seed:


Functional Tests (10) ----------------------------------------------------------
+ ContactFormCest: Open contact page (0.98s)
+ ContactFormCest: Submit empty form (0.13s)
+ ContactFormCest: Submit form with incorrect email (0.03s)
+ ContactFormCest: Submit form successfully (0.43s)
+ LoginFormCest: Open login page (0.08s)
+ LoginFormCest: Internal login by id (0.04s)
+ LoginFormCest: Internal login by instance (0.01s)
+ LoginFormCest: Login with empty credentials (0.03s)
+ LoginFormCest: Login with wrong credentials (0.01s)
+ LoginFormCest: Login successfully (0.08s)
--------------------------------------------------------------------------------

Unit Tests (8) -----------------------------------------------------------------
+ ContactFormTest: Email is sent on contact (0.40s)
+ LoginFormTest: Login no user (0.00s)
+ LoginFormTest: Login wrong password (0.00s)
+ LoginFormTest: Login correct (0.00s)
+ UserTest: Find user by id (0.00s)
+ UserTest: Find user by access token
+ UserTest: Find user by username (0.00s)
+ UserTest: Validate user (0.00s)
--------------------------------------------------------------------------------


Time: 5.28 seconds, Memory: 18.00MB

OK (18 tests, 52 assertions)

home@homepc MINGW32 /c/Apache24/htdocs/www/basic (master)
А как в браузере?
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: Реализация обмена 1с и yii2

Сообщение svil »

Попробовала контрооллер и вид импорта подключить. Пароль спрашивает. Где его отключить? Мне пока авторизация не нужна. Нужно загрузить xml в базу на данном этапе.
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: Реализация обмена 1с и yii2

Сообщение svil »

при переходе на сайт к документации сайт/exchange/article/index
вылетает ошибка

Код: Выделить всё

yii\base\InvalidConfigException: Unknown component ID: exchangeDb in C:\Apache24\htdocs\www\basic\vendor\yiisoft\yii2\di\ServiceLocator.php:139
Stack trace:
#0 C:\Apache24\htdocs\www\basic\vendor\yiisoft\yii2\base\Module.php(742): yii\di\ServiceLocator->get('exchangeDb', true)
#1 C:\Apache24\htdocs\www\basic\vendor\carono\yii2-1c-exchange\models\Article.php(43): yii\base\Module->get('exchangeDb')
#2 C:\Apache24\htdocs\www\basic\vendor\yiisoft\yii2\db\ActiveQuery.php(312): carono\exchange1c\models\Article::getDb()
#3 C:\Apache24\htdocs\www\basic\vendor\yiisoft\yii2\db\BatchQueryResult.php(138): yii\db\ActiveQuery->createCommand(NULL)
#4 C:\Apache24\htdocs\www\basic\vendor\yiisoft\yii2\db\BatchQueryResult.php(112): yii\db\BatchQueryResult->fetchData()
#5 C:\Apache24\htdocs\www\basic\vendor\yiisoft\yii2\db\BatchQueryResult.php(102): yii\db\BatchQueryResult->next()
#6 C:\Apache24\htdocs\www\basic\vendor\carono\yii2-1c-exchange\models\Article.php(85): yii\db\BatchQueryResult->rewind()
#7 C:\Apache24\htdocs\www\basic\views\article\index.php(12): carono\exchange1c\models\Article::formMenuItems()
#8 C:\Apache24\htdocs\www\basic\vendor\yiisoft\yii2\base\View.php(336): require('C:\\Apache24\\htd...')
#9 C:\Apache24\htdocs\www\basic\vendor\yiisoft\yii2\base\View.php(254): yii\base\View->renderPhpFile('C:\\Apache24\\htd...', Array)
#10 C:\Apache24\htdocs\www\basic\vendor\yiisoft\yii2\base\View.php(156): yii\base\View->renderFile('C:\\Apache24\\htd...', Array, Object(app\controllers\ArticleController))
#11 C:\Apache24\htdocs\www\basic\vendor\yiisoft\yii2\base\Controller.php(384): yii\base\View->render('index', Array, Object(app\controllers\ArticleController))
#12 C:\Apache24\htdocs\www\basic\controllers\ArticleController.php(19): yii\base\Controller->render('index')
#13 [internal function]: app\controllers\ArticleController->actionIndex()
#14 C:\Apache24\htdocs\www\basic\vendor\yiisoft\yii2\base\InlineAction.php(57): call_user_func_array(Array, Array)
#15 C:\Apache24\htdocs\www\basic\vendor\yiisoft\yii2\base\Controller.php(157): yii\base\InlineAction->runWithParams(Array)
#16 C:\Apache24\htdocs\www\basic\vendor\yiisoft\yii2\base\Module.php(528): yii\base\Controller->runAction('index', Array)
#17 C:\Apache24\htdocs\www\basic\vendor\yiisoft\yii2\web\Application.php(103): yii\base\Module->runAction('article/index', Array)
#18 C:\Apache24\htdocs\www\basic\vendor\yiisoft\yii2\base\Application.php(386): yii\web\Application->handleRequest(Object(yii\web\Request))
#19 C:\Apache24\htdocs\www\basic\web\index.php(12): yii\base\Application->run()
#20 {main}
Copy Stacktrace Search Stackoverflow Search Google Exception
Invalid Configuration – yii\base\InvalidConfigException
Unknown component ID: exchangeDb
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: Реализация обмена 1с и yii2

Сообщение svil »

Нашла carono/yii2-migrate https://github.com/carono/yii2-migrate и carono/yii2-file-upload https://github.com/carono/yii2-file-upload
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: Реализация обмена 1с и yii2

Сообщение svil »

Запустила http://сайт/exchange/testing/index с БД sqlite - документация
Аватара пользователя
carono
Сообщения: 52
Зарегистрирован: 2018.04.28, 11:05

Re: Реализация обмена 1с и yii2

Сообщение carono »

svil писал(а): 2018.11.25, 22:41 Попробовала контрооллер и вид импорта подключить. Пароль спрашивает. Где его отключить? Мне пока авторизация не нужна. Нужно загрузить xml в базу на данном этапе.
Отключить её нельзя, она одна для импорта из 1С и для просто просмотра модуля. Если только создала новый проект, то можешь зайти под стандартными паролями, которые зашиты в модели: admin/admin
Ответить