public function action1c_exchange()
{
$type = $_REQUEST['type'];
$mode = $_REQUEST['mode'];
$options = Options::_getVal('1c_exchange', true);
if ( !$_COOKIE['exchange_1c_key'] ) {
if ($_SERVER['PHP_AUTH_USER']) {
if ($_SERVER['PHP_AUTH_USER'] == $options['1с_login'] and
$_SERVER['PHP_AUTH_PW'] == $options['1c_password'] ) {
$exchange_1c_key = md5(mt_rand(0,100) . mktime() . 'dsfsdf45435343434');
Options::_update('exchange_1c_key', $exchange_1c_key);
if ($mode == 'checkauth') {
echo "success\nexchange_1c_key\n$exchange_1c_key";
exit();
}
} else {
$this->log_1c_exchange('Ошибка доступа при аунтификации!');
exit('Ошибка доступа! Неправильный логин или пароль!');
}
} else {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
exit();
}
}
$exchange_1c_key = Options::_getVal('exchange_1c_key');
if ( $_COOKIE['exchange_1c_key'] != $exchange_1c_key or $exchange_1c_key == '' ) {
$this->log_1c_exchange('Ошибка доступа: неверный ключ доступа в COOKIE!');
echo "error\nОшибка доступа!\nНеверный ключ доступа!";
exit();
}
if ($type == 'sale' and $mode == 'query') {
header("Content-type: text/xml; charset=utf-8");
echo '<?xml version="1.0" encoding="utf-8"?>';
echo '<КоммерческаяИнформация ВерсияСхемы="2.03" ДатаФормирования="' . date('Y-m-d') . '">';
$condition = '`number` > 0';
if ( trim($options['bill_numbers']) ) {
$bill_numbers = explode(',', $options['bill_numbers']);
$_numbers = array();
if ( is_array($bill_numbers) and count($bill_numbers) ) {
foreach ($bill_numbers as $_number) {
$_number = (int) trim($_number);
if ( $_number > 0)
$_numbers[] = $_number;
}
}
if (count($_numbers)) {
$condition = '`number` IN (' . implode(',', $_numbers) . ')';
}
}
$bills = Bills::model()->findAll(array(
'condition'=>$condition,
'order'=>'id DESC',
'limit'=>$limit,
'offset'=>$offset
));
$doc_template = YiiBase::getPathOfAlias('application').DIRECTORY_SEPARATOR.'modules'.DIRECTORY_SEPARATOR.'bills'.DIRECTORY_SEPARATOR.'views'.DIRECTORY_SEPARATOR.'bill'.DIRECTORY_SEPARATOR.'1c.php';
if ( is_array($bills) and count($bills) ) {
foreach ($bills as $bill) {
$_bills_numbers[] = $bill->number;
include($doc_template);
}
}
echo '</КоммерческаяИнформация>';
if ( is_array($_bills_numbers) and count($_bills_numbers) ) {
$this->log_1c_exchange( "Выгрузка счетов (" . count($_bills_numbers) . "): " . @implode(', ', $_bills_numbers) );
} else {
$this->log_1c_exchange( "Пустая выгрузка!");
}
exit();
}
if ($type == 'sale' and $mode == 'success') {
Options::_update('exchange_1c_key', '');
echo 'success';
exit();
}
}
<Документ>
<Ид><?php echo $bill->number; ?></Ид>
<Номер><?php echo $bill->number; ?></Номер>
<Дата><?php echo date('Y-m-d', strtotime($bill->date_invoice)); ?></Дата>
<ХозОперация>Заказ товара</ХозОперация>
<Роль>Продавец</Роль>
<Валюта>руб</Валюта>
<Курс>1</Курс>
<Сумма><?php echo $bill->price * $bill->count; ?>.00</Сумма>
<Контрагенты>
<Контрагент>
<Ид><?php $contragent_id = strtoupper(preg_replace('|(\S{8})(\S{4})(\S{4})(\S{4})(\S{12})|is', '$1-$2-$3-$4-$5', md5($bill->part ? $bill->part->company->id : $bill->entry_id))); echo $contragent_id; ?></Ид>
<Наименование><?php echo $bill->entry_id ? $bill->entry->company : $bill->part->company->name; ?></Наименование>
<Роль>Покупатель</Роль>
<ОфициальноеНаименование><?php echo $bill->entry_id ? $bill->entry->company : $bill->part->company->name; ?></ОфициальноеНаименование>
<ИНН><?php echo $bill->entry_id ? ( $bill->entry->id ? $bill->entry->inn : $bill->entryArch->inn) : $bill->part->company->inn; ?></ИНН>
<КПП><?php echo $bill->entry_id ? ( $bill->entry->id ? $bill->entry->kpp : $bill->entryArch->kpp) : $bill->part->company->kpp; ?></КПП>
<АдресРегистрации>
<Представление><?php echo $bill->entry_id ? $bill->entry->legal_address : $bill->part->company->legal_address; ?></Представление>
<Контакты>
<Контакт>
<Тип>Почта</Тип>
<Значение><?php echo $bill->entry_id ? $bill->entry->email : $bill->part->company->email; ?></Значение>
</Контакт>
<Контакт>
<Тип>Телефон</Тип>
<Значение><?php echo $bill->entry_id ? $bill->entry->phone_numbers : $bill->part->company->phone_numbers; ?></Значение>
</Контакт>
</Контакты>
</АдресРегистрации>
</Контрагент>
</Контрагенты>
<Время><?php echo $bill->entry_id ? date('H:i:s', strtotime($bill->entry->created)) : date('H:i:s', strtotime($bill->part->created)); ?></Время>
<Комментарий><?php echo Yii::app()->createAbsoluteUrl( ($bill->entry_id ? "/bills/billEdit/id/{$bill->id}/entry_id/{$bill->entry_id}" : "/bills/billEdit/id/{$bill->id}/company_id/{$bill->part->company->id}") . "?redirect=/bills/admin"); ?></Комментарий>
<Товары>
<Товар>
<Ид><?php $product_id = strtoupper(preg_replace('|(\S{8})(\S{4})(\S{4})(\S{4})(\S{12})|is', '$1-$2-$3-$4-$5', md5($bill->id))); echo $product_id; ?></Ид>
<Наименование><?php echo $bill->name; ?></Наименование>
<БазоваяЕдиница Код="796" НаименованиеПолное="Штука" МеждународноеСокращение="PCE">шт</БазоваяЕдиница>
<ЦенаЗаЕдиницу><?php echo $bill->price; ?>.00</ЦенаЗаЕдиницу>
<Количество><?php echo $bill->count; ?></Количество>
<Сумма><?php echo $bill->price * $bill->count; ?>.00</Сумма>
<ЗначенияРеквизитов>
<ЗначениеРеквизита>
<Наименование>ВидНоменклатуры</Наименование>
<Значение>Услуги</Значение>
</ЗначениеРеквизита>
<ЗначениеРеквизита>
<Наименование>ТипНоменклатуры</Наименование>
<Значение>Услуги</Значение>
</ЗначениеРеквизита>
</ЗначенияРеквизитов>
</Товар>
</Товары>
<ЗначенияРеквизитов>
<ЗначениеРеквизита>
<Наименование>Статус заказа</Наименование>
<Значение>Принят</Значение>
</ЗначениеРеквизита>
</ЗначенияРеквизитов>
</Документ>
1) Я правильно понимаю что 1с-ка должна всего лишь иметь возможность загрузить с интернет-магазина *.xml файл, далее у себя распарсить его и добавить в свою базу данных?
2) При настройке обмена в 1с-ке, над кнопкой "Проверить подключение" есть поля "логин" и "пароль".
3) DEBUG.TXT это файл для записи в него возможных ошибок?
4) При проверке подключения соединение успешное, НО это ведь только проверка, а как осуществляется сама загрузка *.xml? Нужен же пусковой механизм на стороне 1с-ки? Кнопка "Загрузить" или где-то выставляется время периодической загрузки?
5) Нашёл таки кнопку "Загрузить" находится она в Продажи -> Счета покупателям, при клике по этой кнопке происходит авторизация, о чём пишется лог в файле DEBUG.TXT, но счёта не возникает. Сделал всё в точности. В чём может быть ошибка?