Безналичная оплата от юридического лица
Подскажите Безналичная оплата от юридического лица в версии Халява так и должен работать, что при заполнении покупки на этапе "Ваш заказ оформлен" и выборе " бланк счета" результат "В корзине нет ни одного товара.
Для оформления заказа добавьте товар в корзину."
Обработчик взят с демо сайта
<?php
/* Безналичная оплата от юридического лица */
class system_of_pay_handler
{
/**
* Метод, запускающий выполнение обработчика
*
*/
function Execute()
{
/* Обработчик формы оплаты "Оплата при получении" */
$shop = & singleton('shop'
;
/* ID платежной системы берем из сессии */
$system_of_pay_id = to_int($_SESSION['system_of_pay_id']);
$row_system_of_pay = $shop->GetSystemOfPay($system_of_pay_id);
if ($row_system_of_pay)
{
$shop_id = $row_system_of_pay['shop_shops_id'];
}
else
{
return false;
}
/* Получаем id текущего пользователя сайта */
if (class_exists('SiteUsers'
)
{
/* Получаем id текущего пользователя сайта */
$SiteUsers = & singleton('SiteUsers'
;
$site_users_id = $SiteUsers->GetCurrentSiteUser();
}
else
{
$site_users_id = false;
}
// статус платежа, по умолчанию 0
$order_row['status_of_pay'] = 0 ;
// дата платежа, по умолчанию пустая строка
$order_row['date_of_pay'] = '';
$order_row['description'] = to_str($_SESSION['description']);
// описание и системная информация, по умолчанию пустая строка
if (to_str($_SESSION['shop_coupon_text']) != ''
{
$order_row['description'] .= "Купон на скидку: ".to_str($_SESSION['shop_coupon_text'])."\n";
}
if (!isset($_SESSION['last_order_id']))
{
$_SESSION['last_order_id'] = 0;
}
// Если заказ еще не был оформлен
if ($_SESSION['last_order_id'] == 0)
{
// Оформляем заказ
$order_id = $shop->ProcessOrder($shop_id, $site_users_id, $system_of_pay_id, $order_row);
}
else
{
$order_id = $_SESSION['last_order_id'];
}
if ($order_id > 0)
{
if (!class_exists('SiteUsers'
)
{
/* Класс пользователей сайта не существует, дописываем информацию о заказчике
в поле shop_order_description из текущей сессии */
if ($order_row)
{
/* Описание заказчика */
$order_row['description'] .= "Информация о заказчике:\n"
."Имя: ".to_str($_SESSION['site_users_name'])."\n"
."Фамилия: ".to_str($_SESSION['site_users_surname'])."\n"
."Отчество: ".to_str($_SESSION['site_users_patronymic'])."\n"
."E-Mail: ".to_str($_SESSION['site_users_email'])."\n"
."Телефон: ".to_str($_SESSION['site_users_phone'])."\n"
."Факс: ".to_str($_SESSION['site_users_fax'])."\n"
."Адрес: ".to_str($_SESSION['full_address'])."\n";
/* Дополнительная информация о заказе */
$order_row['system_information'] = to_str($_SESSION['system_information']);
/* Обязательно добавляем идентификатор! */
$order_row['id'] = $order_id;
$shop->InsertOrder($order_row);
}
}
$order_row = $shop->GetOrder($order_id);
/* Формируем XML */
$xmlData = '<?xml version="1.0" encoding="UTF-8"?>'."\n";
$xmlData .= '<document_list>'."\n";
/* Ссылака на версию для печати */
$shop_row = $shop->GetShop($shop_id);
if ($shop_row)
{
/* Получаем путь к магазину */
$Structure = & singleton('Structure'
;
$shop_path = "/".$Structure->GetStructurePath($shop_row['structure_id'], 0);
$shop_path .= "cart/print/{$order_row['shop_order_guid']}/";
$xmlData .= "<print_link>".$shop_path."</print_link>";
}
$xmlData .= $shop->GetXmlForOrder($order_id, false, true);
$xmlData .= $shop->GetXmlForItemsOrder($order_id);
$xmlData .= '</document_list>'."\n";
$xsl = new xsl();
echo $xsl->build($xmlData, 'ОплатаБезналичнаяОтЮрЛица'
;
if ($_SESSION['last_order_id'] == 0)
{
$structure = & singleton('Structure'
;
$structure_row = $structure->GetStructureItem(to_int($shop_row['structure_id']));
$lib = new lib();
$LA = $lib->LoadLibPropertiesValue(to_int($structure_row['lib_id']), to_int($structure_row['structure_id']));
$date_str = date("d.m.Y H:i:s"
;
if (trim(to_str($order_row['shop_order_account_number'])) != ''
{
$shop_order_account_number = trim(to_str($order_row['shop_order_account_number']));
}
else
{
$shop_order_account_number = $order_id;
}
/* Отправляем письмо заказчику */
$shop->SendMailAboutOrder($shop_id,
$order_id,
$site_users_id,
to_str($LA['xsl_letter_to_admin']),
to_str($LA['xsl_letter_to_user']),
$order_row['shop_order_users_email'],
array('admin-content-type' => 'html',
'user-content-type' => 'html',
'admin-subject' => sprintf($GLOBALS['MSG_shops']['shop_order_admin_subject'], $shop_order_account_number, $shop_row['shop_shops_name'], $date_str),
'user-subject' => sprintf($GLOBALS['MSG_shops']['shop_order_user_subject'], $shop_order_account_number, $shop_row['shop_shops_name'], $date_str),
'email_from_admin' => $order_row['shop_order_users_email']));
$this->MailOrder($order_id);
}
// Сохраняем ID последнего оформленного заказа ТОЛЬКО ПОСЛЕ ОТПРАВКИ ПИСЬМА
$_SESSION['last_order_id'] = $order_id;
}
else
{
switch ($order_id)
{
case -1:
{
?><div id="error">Ошибка вставки заказа в базу данных. Обратитесь к администратору.</div><?php
break;
}
case -2:
{
?><div id="error">Ошибка - не найден магазин. Обратитесь к администратору.</div><?php
break;
}
case -3:
{
?><div id="error">Ошибка - корзина пуста. Добавьте товар в корзину и оформите заказ.</div><?php
break;
}
}
}
}
/**
* Метод для отправки письма со счетом.
*
* @param int $order_id идентификатор заказа
*/
function MailOrder($order_id)
{
$shop = & singleton('shop'
;
/* Информация о заказе */
$order_row = $shop->GetOrder($order_id);
if (!$order_row)
{
return false;
}
/* Информация о магазине */
$shop_row = $shop->GetShop($order_row['shop_shops_id']);
if (!$shop_row)
{
return false;
}
ob_start();
$this->PrintOrder($order_id);
$blank = ob_get_clean();
// Добавляем переводы строк после тегов.
$blank = str_replace(">", ">\n", $blank);
$order_row = $shop->GetOrder($order_id);
$subject = 'Банковский счет';
$kernel = & singleton('kernel'
;
$kernel->SendMailWithFile(trim(to_str($order_row['shop_order_users_email'])),
$shop_row['shop_shops_admin_mail'], $subject, $blank, array(), 'text/html'
;
}
/**
* Метод для отображения формы заказа для печати.
*
* @param int $order_id идентификатор заказа
*/
function PrintOrder($order_id)
{
$shop = & singleton('shop'
;
/* Информация о заказе */
$order_row = $shop->GetOrder($order_id);
if (!$order_row)
{
return false;
}
/* Информация о магазине */
$shop_row = $shop->GetShop($order_row['shop_shops_id']);
if (!$shop_row)
{
return false;
}
/* Формируем XML */
$xmlData = '<?xml version="1.0" encoding="UTF-8"?>'."\n";
$xmlData .= "<print_version>\n";
$xmlData .= $shop->GenXml4Company($shop_row['shop_company_id']);
$xmlData .= $shop->GetXmlForOrder(0, $order_row, true);
$xmlData .= "</print_version>\n";
$xsl = new xsl();
$blank = $xsl->build($xmlData, 'БанковскийСчет'
;
echo $blank;
}
/**
* Изменение статуса заказа. Позволяет пользователю внедрять собственные
* обработчики при изменении статуса.
*
* @param array $param массив атрибутов
* - $param['shop_order_id'] идентификатор заказа
* - $param['prev_order_row'] информация о предыдущем состоянии заказа (доступно не всегда)
* - $param['action'] выполняемое действие над заказом, может принимать значения:
* edit (редактирование заказа), cancel (отмена заказа),
* status (изменение статуса заказа), delete (удаление заказа),
* edit_item (редактирование товара в заказе), delete_item (удаление товара в заказе)
*/
function ChangeStatus($param = array())
{
// Если произошло изменение статуса или
if (isset($param['action']) && in_array($param['action'], array('status', 'edit'
))
{
$shop_order_id = to_int($param['shop_order_id']);
$shop = & singleton('shop'
;
$order_row = $shop->GetOrder($shop_order_id);
// Получаем информацию о магазине
$shop_id = to_int($order_row['shop_shops_id']);
$shop_row = $shop->GetShop($shop_id);
$structure = & singleton('Structure'
;
$structure_row = $structure->GetStructureItem(to_int($shop_row['structure_id']));
$lib = new lib();
$LA = $lib->LoadLibPropertiesValue(to_int($structure_row['lib_id']), to_int($structure_row['structure_id']));
if ($order_row)
{
$DateClass = new DateClass();
$date_str = $DateClass->datetime_format($order_row['shop_order_date_time']);
}
else
{
$date_str = '';
}
// Если предыдущий статус заказа был 1, то меняем тему на подтверждение
if (to_int($order_row['shop_order_status_of_pay']) == 1)
{
$admin_subject = $GLOBALS['MSG_shops']['shop_order_confirm_admin_subject'];
$user_subject = $GLOBALS['MSG_shops']['shop_order_confirm_user_subject'];
}
else
{
$admin_subject = $GLOBALS['MSG_shops']['shop_order_admin_subject'];
$user_subject = $GLOBALS['MSG_shops']['shop_order_user_subject'];
}
$not_paid = isset($param['prev_order_row']) && $param['prev_order_row']['shop_order_status_of_pay'] == 0;
// Письмо отправляем только при установке статуса активности для заказа
if (to_int($order_row['shop_order_status_of_pay']) == 1 && $not_paid)
{
if (trim(to_str($order_row['shop_order_account_number'])) != ''
{
$shop_order_account_number = trim(to_str($order_row['shop_order_account_number']));
}
else
{
$shop_order_account_number = $shop_order_id;
}
/* Отправляем письмо заказчику */
$shop->SendMailAboutOrder($shop_id,
$shop_order_id,
$order_row['site_users_id'],
to_str($LA['xsl_letter_to_admin']),
to_str($LA['xsl_letter_to_user']),
$order_row['shop_order_users_email'],
array('admin-content-type' => 'html',
'user-content-type' => 'html',
'admin-subject' => sprintf($admin_subject, $shop_order_account_number, $shop_row['shop_shops_name'], $date_str),
'user-subject' => sprintf($user_subject, $shop_order_account_number, $shop_row['shop_shops_name'], $date_str),
'email_from_admin' => $order_row['shop_order_users_email']));
}
}
}
}
?>
Для оформления заказа добавьте товар в корзину."
Обработчик взят с демо сайта
<?php
/* Безналичная оплата от юридического лица */
class system_of_pay_handler
{
/**
* Метод, запускающий выполнение обработчика
*
*/
function Execute()
{
/* Обработчик формы оплаты "Оплата при получении" */
$shop = & singleton('shop'
;/* ID платежной системы берем из сессии */
$system_of_pay_id = to_int($_SESSION['system_of_pay_id']);
$row_system_of_pay = $shop->GetSystemOfPay($system_of_pay_id);
if ($row_system_of_pay)
{
$shop_id = $row_system_of_pay['shop_shops_id'];
}
else
{
return false;
}
/* Получаем id текущего пользователя сайта */
if (class_exists('SiteUsers'
){
/* Получаем id текущего пользователя сайта */
$SiteUsers = & singleton('SiteUsers'
;$site_users_id = $SiteUsers->GetCurrentSiteUser();
}
else
{
$site_users_id = false;
}
// статус платежа, по умолчанию 0
$order_row['status_of_pay'] = 0 ;
// дата платежа, по умолчанию пустая строка
$order_row['date_of_pay'] = '';
$order_row['description'] = to_str($_SESSION['description']);
// описание и системная информация, по умолчанию пустая строка
if (to_str($_SESSION['shop_coupon_text']) != ''

{
$order_row['description'] .= "Купон на скидку: ".to_str($_SESSION['shop_coupon_text'])."\n";
}
if (!isset($_SESSION['last_order_id']))
{
$_SESSION['last_order_id'] = 0;
}
// Если заказ еще не был оформлен
if ($_SESSION['last_order_id'] == 0)
{
// Оформляем заказ
$order_id = $shop->ProcessOrder($shop_id, $site_users_id, $system_of_pay_id, $order_row);
}
else
{
$order_id = $_SESSION['last_order_id'];
}
if ($order_id > 0)
{
if (!class_exists('SiteUsers'
){
/* Класс пользователей сайта не существует, дописываем информацию о заказчике
в поле shop_order_description из текущей сессии */
if ($order_row)
{
/* Описание заказчика */
$order_row['description'] .= "Информация о заказчике:\n"
."Имя: ".to_str($_SESSION['site_users_name'])."\n"
."Фамилия: ".to_str($_SESSION['site_users_surname'])."\n"
."Отчество: ".to_str($_SESSION['site_users_patronymic'])."\n"
."E-Mail: ".to_str($_SESSION['site_users_email'])."\n"
."Телефон: ".to_str($_SESSION['site_users_phone'])."\n"
."Факс: ".to_str($_SESSION['site_users_fax'])."\n"
."Адрес: ".to_str($_SESSION['full_address'])."\n";
/* Дополнительная информация о заказе */
$order_row['system_information'] = to_str($_SESSION['system_information']);
/* Обязательно добавляем идентификатор! */
$order_row['id'] = $order_id;
$shop->InsertOrder($order_row);
}
}
$order_row = $shop->GetOrder($order_id);
/* Формируем XML */
$xmlData = '<?xml version="1.0" encoding="UTF-8"?>'."\n";
$xmlData .= '<document_list>'."\n";
/* Ссылака на версию для печати */
$shop_row = $shop->GetShop($shop_id);
if ($shop_row)
{
/* Получаем путь к магазину */
$Structure = & singleton('Structure'
;$shop_path = "/".$Structure->GetStructurePath($shop_row['structure_id'], 0);
$shop_path .= "cart/print/{$order_row['shop_order_guid']}/";
$xmlData .= "<print_link>".$shop_path."</print_link>";
}
$xmlData .= $shop->GetXmlForOrder($order_id, false, true);
$xmlData .= $shop->GetXmlForItemsOrder($order_id);
$xmlData .= '</document_list>'."\n";
$xsl = new xsl();
echo $xsl->build($xmlData, 'ОплатаБезналичнаяОтЮрЛица'
;if ($_SESSION['last_order_id'] == 0)
{
$structure = & singleton('Structure'
;$structure_row = $structure->GetStructureItem(to_int($shop_row['structure_id']));
$lib = new lib();
$LA = $lib->LoadLibPropertiesValue(to_int($structure_row['lib_id']), to_int($structure_row['structure_id']));
$date_str = date("d.m.Y H:i:s"
;if (trim(to_str($order_row['shop_order_account_number'])) != ''

{
$shop_order_account_number = trim(to_str($order_row['shop_order_account_number']));
}
else
{
$shop_order_account_number = $order_id;
}
/* Отправляем письмо заказчику */
$shop->SendMailAboutOrder($shop_id,
$order_id,
$site_users_id,
to_str($LA['xsl_letter_to_admin']),
to_str($LA['xsl_letter_to_user']),
$order_row['shop_order_users_email'],
array('admin-content-type' => 'html',
'user-content-type' => 'html',
'admin-subject' => sprintf($GLOBALS['MSG_shops']['shop_order_admin_subject'], $shop_order_account_number, $shop_row['shop_shops_name'], $date_str),
'user-subject' => sprintf($GLOBALS['MSG_shops']['shop_order_user_subject'], $shop_order_account_number, $shop_row['shop_shops_name'], $date_str),
'email_from_admin' => $order_row['shop_order_users_email']));
$this->MailOrder($order_id);
}
// Сохраняем ID последнего оформленного заказа ТОЛЬКО ПОСЛЕ ОТПРАВКИ ПИСЬМА
$_SESSION['last_order_id'] = $order_id;
}
else
{
switch ($order_id)
{
case -1:
{
?><div id="error">Ошибка вставки заказа в базу данных. Обратитесь к администратору.</div><?php
break;
}
case -2:
{
?><div id="error">Ошибка - не найден магазин. Обратитесь к администратору.</div><?php
break;
}
case -3:
{
?><div id="error">Ошибка - корзина пуста. Добавьте товар в корзину и оформите заказ.</div><?php
break;
}
}
}
}
/**
* Метод для отправки письма со счетом.
*
* @param int $order_id идентификатор заказа
*/
function MailOrder($order_id)
{
$shop = & singleton('shop'
;/* Информация о заказе */
$order_row = $shop->GetOrder($order_id);
if (!$order_row)
{
return false;
}
/* Информация о магазине */
$shop_row = $shop->GetShop($order_row['shop_shops_id']);
if (!$shop_row)
{
return false;
}
ob_start();
$this->PrintOrder($order_id);
$blank = ob_get_clean();
// Добавляем переводы строк после тегов.
$blank = str_replace(">", ">\n", $blank);
$order_row = $shop->GetOrder($order_id);
$subject = 'Банковский счет';
$kernel = & singleton('kernel'
;$kernel->SendMailWithFile(trim(to_str($order_row['shop_order_users_email'])),
$shop_row['shop_shops_admin_mail'], $subject, $blank, array(), 'text/html'
;}
/**
* Метод для отображения формы заказа для печати.
*
* @param int $order_id идентификатор заказа
*/
function PrintOrder($order_id)
{
$shop = & singleton('shop'
;/* Информация о заказе */
$order_row = $shop->GetOrder($order_id);
if (!$order_row)
{
return false;
}
/* Информация о магазине */
$shop_row = $shop->GetShop($order_row['shop_shops_id']);
if (!$shop_row)
{
return false;
}
/* Формируем XML */
$xmlData = '<?xml version="1.0" encoding="UTF-8"?>'."\n";
$xmlData .= "<print_version>\n";
$xmlData .= $shop->GenXml4Company($shop_row['shop_company_id']);
$xmlData .= $shop->GetXmlForOrder(0, $order_row, true);
$xmlData .= "</print_version>\n";
$xsl = new xsl();
$blank = $xsl->build($xmlData, 'БанковскийСчет'
;echo $blank;
}
/**
* Изменение статуса заказа. Позволяет пользователю внедрять собственные
* обработчики при изменении статуса.
*
* @param array $param массив атрибутов
* - $param['shop_order_id'] идентификатор заказа
* - $param['prev_order_row'] информация о предыдущем состоянии заказа (доступно не всегда)
* - $param['action'] выполняемое действие над заказом, может принимать значения:
* edit (редактирование заказа), cancel (отмена заказа),
* status (изменение статуса заказа), delete (удаление заказа),
* edit_item (редактирование товара в заказе), delete_item (удаление товара в заказе)
*/
function ChangeStatus($param = array())
{
// Если произошло изменение статуса или
if (isset($param['action']) && in_array($param['action'], array('status', 'edit'
)){
$shop_order_id = to_int($param['shop_order_id']);
$shop = & singleton('shop'
;$order_row = $shop->GetOrder($shop_order_id);
// Получаем информацию о магазине
$shop_id = to_int($order_row['shop_shops_id']);
$shop_row = $shop->GetShop($shop_id);
$structure = & singleton('Structure'
;$structure_row = $structure->GetStructureItem(to_int($shop_row['structure_id']));
$lib = new lib();
$LA = $lib->LoadLibPropertiesValue(to_int($structure_row['lib_id']), to_int($structure_row['structure_id']));
if ($order_row)
{
$DateClass = new DateClass();
$date_str = $DateClass->datetime_format($order_row['shop_order_date_time']);
}
else
{
$date_str = '';
}
// Если предыдущий статус заказа был 1, то меняем тему на подтверждение
if (to_int($order_row['shop_order_status_of_pay']) == 1)
{
$admin_subject = $GLOBALS['MSG_shops']['shop_order_confirm_admin_subject'];
$user_subject = $GLOBALS['MSG_shops']['shop_order_confirm_user_subject'];
}
else
{
$admin_subject = $GLOBALS['MSG_shops']['shop_order_admin_subject'];
$user_subject = $GLOBALS['MSG_shops']['shop_order_user_subject'];
}
$not_paid = isset($param['prev_order_row']) && $param['prev_order_row']['shop_order_status_of_pay'] == 0;
// Письмо отправляем только при установке статуса активности для заказа
if (to_int($order_row['shop_order_status_of_pay']) == 1 && $not_paid)
{
if (trim(to_str($order_row['shop_order_account_number'])) != ''

{
$shop_order_account_number = trim(to_str($order_row['shop_order_account_number']));
}
else
{
$shop_order_account_number = $shop_order_id;
}
/* Отправляем письмо заказчику */
$shop->SendMailAboutOrder($shop_id,
$shop_order_id,
$order_row['site_users_id'],
to_str($LA['xsl_letter_to_admin']),
to_str($LA['xsl_letter_to_user']),
$order_row['shop_order_users_email'],
array('admin-content-type' => 'html',
'user-content-type' => 'html',
'admin-subject' => sprintf($admin_subject, $shop_order_account_number, $shop_row['shop_shops_name'], $date_str),
'user-subject' => sprintf($user_subject, $shop_order_account_number, $shop_row['shop_shops_name'], $date_str),
'email_from_admin' => $order_row['shop_order_users_email']));
}
}
}
}
?>
qwazzzzzz, что-то мне подсказывает, что у вас в структуре сайта просто нету узла /print/ внутри узла /cart/ 
Посмотрите, как сделано на демо-сайте, и сделайте у себя по аналогии.

Посмотрите, как сделано на демо-сайте, и сделайте у себя по аналогии.
Заказов не беру. Консультирую редко.
Я сделал как на сайте и при попытке перехода по ссылке просто открывается данный товар в каталоге и никакой ни квитанции ни счета 

Авторизация