Обработчик платежной системы IntellectMoney
Сайт платежной системы:
1. В код настроек типовой дин. страницы в блок обработок уведомлений от ПС внести обработчик:
2. Добавить обработчик платежной системы, внести секретный ключ и номер магазина:
1. В код настроек типовой дин. страницы в блок обработок уведомлений от ПС внести обработчик:
// ------------------------------------------------
// Обработка уведомления об оплате от IntellectMoney
// ------------------------------------------------
if (isset($_REQUEST['orderId']))
{
// Получаем ID заказа
$order_id = to_int($_REQUEST['orderId']);
$order_row = $shop->GetOrder($order_id);
if ($order_row)
{
// Вызов обработчика платежной системы
$shop->ExecSystemsOfPayHandler($order_row['shop_system_of_pay_id']);
}
}
// Обработка уведомления об оплате от IntellectMoney
// ------------------------------------------------
if (isset($_REQUEST['orderId']))
{
// Получаем ID заказа
$order_id = to_int($_REQUEST['orderId']);
$order_row = $shop->GetOrder($order_id);
if ($order_row)
{
// Вызов обработчика платежной системы
$shop->ExecSystemsOfPayHandler($order_row['shop_system_of_pay_id']);
}
}
2. Добавить обработчик платежной системы, внести секретный ключ и номер магазина:
<?php
/* Оплата через IntellectMoney */
class system_of_pay_handler
{
// Идентифкатор магазина, с которым будет работать обработчик
var $eShopId = 123456;
// Секретный ключ (заполняется вручную пользователем на странице настроек магазина)
var $secretKey = "secret_key_string";
// Валюта платежа RUR для работы или TST для тестирования системы
var $currencyName = "RUR";
//var $currencyName = "TST";
// Код валюты в магазине HostCMS, которая была указана при регистрации магазина
var $intellectmoney_currency = 1;
// Запускаем обработчик платежной системы
function Execute()
{
// Пришло подтверждение оплаты, обработаем его
if (isset($_REQUEST['orderId']))
{
$this->ProcessResult();
}
/* Пользователь перешел на страницу с уведомлением о статусе заказа */
/*if (isset($_REQUEST['InvId']) && isset($_REQUEST['Culture']))
{
$this->ShowResultMessage();
return true;
}*/
// Иначе оформляем заказ и отображаем стартовую страницу для оплаты через IntellectMoney
$this->ShowPurseRequest();
}
// Обработка ответа платежной системы
function ProcessResult()
{
// Информация о заказе
$order_id = to_int($_REQUEST['orderId']);
if (!$order_id)
{
return false;
}
$shop = & singleton('shop');
$order_row = $shop->GetOrder($order_id);
// Заказ не найден или уже оплачен
if (!$order_row || $order_row['shop_order_status_of_pay'])
{
return false;
}
$shop_row = $shop->GetShop($order_row['shop_shops_id']);
// чтение полученных параметров
$in_eshopId = to_str($_REQUEST["eshopId"]);
$in_orderId = to_str($_REQUEST["orderId"]);
$in_serviceName = to_str($_REQUEST["serviceName"]);
$in_eshopAccount = to_str($_REQUEST["eshopAccount"]);
$in_recipientAmount = to_str($_REQUEST["recipientAmount"]);
$in_recipientCurrency = to_str($_REQUEST["recipientCurrency"]);
$in_paymentStatus = to_str($_REQUEST["paymentStatus"]);
$in_userName = to_str($_REQUEST["userName"]);
$in_userEmail = to_str($_REQUEST["userEmail"]);
$in_paymentData = to_str($_REQUEST["paymentData"]);
$in_secretKey = to_str($_REQUEST["secretKey"]);
// Хеш, рассчитанный IntellectMoney
$intellectMoney_hash = strtoupper(to_str($_REQUEST["hash"]));
$for_hash = $this->eShopId."::".
$in_orderId."::".
$in_serviceName."::".
$in_eshopAccount."::".
$in_recipientAmount."::".
$in_recipientCurrency."::".
$in_paymentStatus."::".
$in_userName."::".
$in_userEmail."::".
$in_paymentData."::".
$this->secretKey;
// Получаем наш вариант контрольной подписи
$my_hash = strtoupper(md5($for_hash));
// Устанавливаем параметры, которые не зависят от совпадения хешей
$param['id'] = $order_row['shop_order_id'];
$param['shop_shops_id'] = $order_row['shop_shops_id'];
// Сравниваем хэши
if (mb_strtoupper($intellectMoney_hash) == $my_hash)
{
if ($in_paymentStatus == 5)
{
$param['system_information'] = "Товар оплачен через IntellectMoney.\n\n"
. "Информация:\n\n"
. "ID магазина: {$_REQUEST['eshopId']}\n"
. "Номер покупки (СКО): {$_REQUEST['paymentId']}\n"
. "Номер счета магазина: {$_REQUEST['eshopAccount']}\n"
. "Назначение платежа: {$_REQUEST['serviceName']}\n"
. "Сумма платежа: {$_REQUEST['recipientAmount']}\n"
. "Валюта платежа: {$_REQUEST['recipientCurrency']}\n"
. "Имя пользователя: {$_REQUEST['userName']}\n"
. "E-mail пользователя: {$_REQUEST['userEmail']}\n"
. "Время выполнения платежа: {$_REQUEST['paymentData']}\n"
. "\n";
// Обновляем информацию о заказе
$shop->InsertOrder($param);
// Изменяем статус оплаты ПОСЛЕ ОБНОВЛЕНИЯ ИНФОРМАЦИ, генерируем ссылки для эл.товаров, списываем товары
$shop->SetOrderPaymentStatus($order_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']));
$order_row = $shop->GetOrder($order_id);
// Отправляем письмо администратору о подтверждении платежа
$shop->SendMailAboutOrder($order_row['shop_shops_id'], $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($GLOBALS['MSG_shops']['shop_order_confirm_admin_subject'], $order_id, $shop_row['shop_shops_name'], $order_row['shop_order_date_of_pay']),
'user-subject' => sprintf($GLOBALS['MSG_shops']['shop_order_confirm_user_subject'], $order_id, $shop_row['shop_shops_name'], $order_row['shop_order_date_of_pay']),
'email_from_admin' => $order_row['shop_order_users_email']));
echo "OK";
exit();
}
elseif ($in_paymentStatus == 3)
{
echo "OK";
exit();
}
}
else
{
$param['system_information'] = 'Хэш не совпал!';
// Обновляем информацию о заказе
$shop->InsertOrder($param);
}
}
/**
* Отображает стартовую страницу для оплаты через IntellectMoney.
*
*/
function ShowPurseRequest()
{
$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);
if ($order_row)
{
$this->PrintOrder($order_id);
}
$shop_row = $shop->GetShop($shop_id);
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']));
}
// Сохраняем 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 PrintOrder($order_id)
{
$shop = & singleton('shop');
$order_row = $shop->GetOrder($order_id);
if (!$order_row)
{
return false;
}
if ($order_row)
{
$shop_row = $shop->GetShop($order_row['shop_shops_id']);
$order_id = $order_row['shop_order_id'];
$order_sum = $shop->GetOrderSum($order_id);
// Делаем перерасчет суммы в валюту IntellectMoney
$shop_currency_id = $shop_row['shop_currency_id'];
// Получаем название валюты
$currency_row = $shop->GetCurrency($shop_currency_id);
$currency_name = $currency_row['shop_currency_name'];
$coefficient = $shop->GetCurrencyCoefficientToShopCurrency($shop_currency_id, $this->intellectmoney_currency);
$im_sum = round($order_sum * $coefficient, 2);
// Получаем имя/фамилию/отчество заказчика
$fio = implode(" ", array($order_row['shop_order_users_surname'], $order_row['shop_order_users_name'], $order_row['shop_order_users_patronymic']));
// Получаем email заказчика
$email = $order_row['shop_order_users_email'];
// Информация об алиасе сайта
$site = & singleton ('site');
$site_alias = $site->GetCurrentAlias($shop_row['site_id']);
/* Получаем путь к магазину */
$Structure = & singleton('Structure');
$shop_path = "/".$Structure->GetStructurePath($shop_row['structure_id'], 0);
$handler_url = 'http://'.$site_alias.$shop_path.'cart/';
?>
<h1>Оплата через систему IntellectMoney</h1>
<!-- Форма для оплаты через IntellectMoney -->
<p>К оплате <strong><?php echo $im_sum . " " . $currency_name?></strong></p>
<form id="pay" name="pay" method="post" action="https://merchant.intellectmoney.ru/ru/">
<input id="orderId" type="hidden" name="orderId" value="<?php echo htmlspecialchars($order_id)?>">
<input id="eshopId" type="hidden" name="eshopId" value="<?php echo htmlspecialchars($this->eShopId)?>">
<input id="serviceName" type="hidden" name="serviceName" value="Оплата заказа № <?php echo $order_id?>">
<input id="recipientAmount" type="hidden" name="recipientAmount" value="<?php echo htmlspecialchars($im_sum)?>">
<input id="recipientCurrency" type="hidden" name="recipientCurrency" value="<?php echo $this->currencyName?>">
<input id="successUrl" type="hidden" name="successUrl" value="<?php echo htmlspecialchars($handler_url."?order_id={$order_row['shop_order_account_number']}&payment=success")?>">
<input id="failUrl" type="hidden" name="failUrl" value="<?php echo htmlspecialchars($handler_url."?order_id={$order_row['shop_order_account_number']}&payment=fail")?>">
<input id="userName" type="hidden" name="userName" value="<?php echo htmlspecialchars($fio)?>">
<input id="userEmail" type="hidden" name="userEmail" value="<?php echo htmlspecialchars($email)?>">
<input name="submit" value="Перейти к оплате" type="submit"/>
</form>
<?php
}
}
/**
* Изменение статуса заказа. Позволяет пользователю внедрять собственные
* обработчики при изменении статуса.
*
* @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']));
}
}
}
}
/* Оплата через IntellectMoney */
class system_of_pay_handler
{
// Идентифкатор магазина, с которым будет работать обработчик
var $eShopId = 123456;
// Секретный ключ (заполняется вручную пользователем на странице настроек магазина)
var $secretKey = "secret_key_string";
// Валюта платежа RUR для работы или TST для тестирования системы
var $currencyName = "RUR";
//var $currencyName = "TST";
// Код валюты в магазине HostCMS, которая была указана при регистрации магазина
var $intellectmoney_currency = 1;
// Запускаем обработчик платежной системы
function Execute()
{
// Пришло подтверждение оплаты, обработаем его
if (isset($_REQUEST['orderId']))
{
$this->ProcessResult();
}
/* Пользователь перешел на страницу с уведомлением о статусе заказа */
/*if (isset($_REQUEST['InvId']) && isset($_REQUEST['Culture']))
{
$this->ShowResultMessage();
return true;
}*/
// Иначе оформляем заказ и отображаем стартовую страницу для оплаты через IntellectMoney
$this->ShowPurseRequest();
}
// Обработка ответа платежной системы
function ProcessResult()
{
// Информация о заказе
$order_id = to_int($_REQUEST['orderId']);
if (!$order_id)
{
return false;
}
$shop = & singleton('shop');
$order_row = $shop->GetOrder($order_id);
// Заказ не найден или уже оплачен
if (!$order_row || $order_row['shop_order_status_of_pay'])
{
return false;
}
$shop_row = $shop->GetShop($order_row['shop_shops_id']);
// чтение полученных параметров
$in_eshopId = to_str($_REQUEST["eshopId"]);
$in_orderId = to_str($_REQUEST["orderId"]);
$in_serviceName = to_str($_REQUEST["serviceName"]);
$in_eshopAccount = to_str($_REQUEST["eshopAccount"]);
$in_recipientAmount = to_str($_REQUEST["recipientAmount"]);
$in_recipientCurrency = to_str($_REQUEST["recipientCurrency"]);
$in_paymentStatus = to_str($_REQUEST["paymentStatus"]);
$in_userName = to_str($_REQUEST["userName"]);
$in_userEmail = to_str($_REQUEST["userEmail"]);
$in_paymentData = to_str($_REQUEST["paymentData"]);
$in_secretKey = to_str($_REQUEST["secretKey"]);
// Хеш, рассчитанный IntellectMoney
$intellectMoney_hash = strtoupper(to_str($_REQUEST["hash"]));
$for_hash = $this->eShopId."::".
$in_orderId."::".
$in_serviceName."::".
$in_eshopAccount."::".
$in_recipientAmount."::".
$in_recipientCurrency."::".
$in_paymentStatus."::".
$in_userName."::".
$in_userEmail."::".
$in_paymentData."::".
$this->secretKey;
// Получаем наш вариант контрольной подписи
$my_hash = strtoupper(md5($for_hash));
// Устанавливаем параметры, которые не зависят от совпадения хешей
$param['id'] = $order_row['shop_order_id'];
$param['shop_shops_id'] = $order_row['shop_shops_id'];
// Сравниваем хэши
if (mb_strtoupper($intellectMoney_hash) == $my_hash)
{
if ($in_paymentStatus == 5)
{
$param['system_information'] = "Товар оплачен через IntellectMoney.\n\n"
. "Информация:\n\n"
. "ID магазина: {$_REQUEST['eshopId']}\n"
. "Номер покупки (СКО): {$_REQUEST['paymentId']}\n"
. "Номер счета магазина: {$_REQUEST['eshopAccount']}\n"
. "Назначение платежа: {$_REQUEST['serviceName']}\n"
. "Сумма платежа: {$_REQUEST['recipientAmount']}\n"
. "Валюта платежа: {$_REQUEST['recipientCurrency']}\n"
. "Имя пользователя: {$_REQUEST['userName']}\n"
. "E-mail пользователя: {$_REQUEST['userEmail']}\n"
. "Время выполнения платежа: {$_REQUEST['paymentData']}\n"
. "\n";
// Обновляем информацию о заказе
$shop->InsertOrder($param);
// Изменяем статус оплаты ПОСЛЕ ОБНОВЛЕНИЯ ИНФОРМАЦИ, генерируем ссылки для эл.товаров, списываем товары
$shop->SetOrderPaymentStatus($order_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']));
$order_row = $shop->GetOrder($order_id);
// Отправляем письмо администратору о подтверждении платежа
$shop->SendMailAboutOrder($order_row['shop_shops_id'], $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($GLOBALS['MSG_shops']['shop_order_confirm_admin_subject'], $order_id, $shop_row['shop_shops_name'], $order_row['shop_order_date_of_pay']),
'user-subject' => sprintf($GLOBALS['MSG_shops']['shop_order_confirm_user_subject'], $order_id, $shop_row['shop_shops_name'], $order_row['shop_order_date_of_pay']),
'email_from_admin' => $order_row['shop_order_users_email']));
echo "OK";
exit();
}
elseif ($in_paymentStatus == 3)
{
echo "OK";
exit();
}
}
else
{
$param['system_information'] = 'Хэш не совпал!';
// Обновляем информацию о заказе
$shop->InsertOrder($param);
}
}
/**
* Отображает стартовую страницу для оплаты через IntellectMoney.
*
*/
function ShowPurseRequest()
{
$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);
if ($order_row)
{
$this->PrintOrder($order_id);
}
$shop_row = $shop->GetShop($shop_id);
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']));
}
// Сохраняем 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 PrintOrder($order_id)
{
$shop = & singleton('shop');
$order_row = $shop->GetOrder($order_id);
if (!$order_row)
{
return false;
}
if ($order_row)
{
$shop_row = $shop->GetShop($order_row['shop_shops_id']);
$order_id = $order_row['shop_order_id'];
$order_sum = $shop->GetOrderSum($order_id);
// Делаем перерасчет суммы в валюту IntellectMoney
$shop_currency_id = $shop_row['shop_currency_id'];
// Получаем название валюты
$currency_row = $shop->GetCurrency($shop_currency_id);
$currency_name = $currency_row['shop_currency_name'];
$coefficient = $shop->GetCurrencyCoefficientToShopCurrency($shop_currency_id, $this->intellectmoney_currency);
$im_sum = round($order_sum * $coefficient, 2);
// Получаем имя/фамилию/отчество заказчика
$fio = implode(" ", array($order_row['shop_order_users_surname'], $order_row['shop_order_users_name'], $order_row['shop_order_users_patronymic']));
// Получаем email заказчика
$email = $order_row['shop_order_users_email'];
// Информация об алиасе сайта
$site = & singleton ('site');
$site_alias = $site->GetCurrentAlias($shop_row['site_id']);
/* Получаем путь к магазину */
$Structure = & singleton('Structure');
$shop_path = "/".$Structure->GetStructurePath($shop_row['structure_id'], 0);
$handler_url = 'http://'.$site_alias.$shop_path.'cart/';
?>
<h1>Оплата через систему IntellectMoney</h1>
<!-- Форма для оплаты через IntellectMoney -->
<p>К оплате <strong><?php echo $im_sum . " " . $currency_name?></strong></p>
<form id="pay" name="pay" method="post" action="https://merchant.intellectmoney.ru/ru/">
<input id="orderId" type="hidden" name="orderId" value="<?php echo htmlspecialchars($order_id)?>">
<input id="eshopId" type="hidden" name="eshopId" value="<?php echo htmlspecialchars($this->eShopId)?>">
<input id="serviceName" type="hidden" name="serviceName" value="Оплата заказа № <?php echo $order_id?>">
<input id="recipientAmount" type="hidden" name="recipientAmount" value="<?php echo htmlspecialchars($im_sum)?>">
<input id="recipientCurrency" type="hidden" name="recipientCurrency" value="<?php echo $this->currencyName?>">
<input id="successUrl" type="hidden" name="successUrl" value="<?php echo htmlspecialchars($handler_url."?order_id={$order_row['shop_order_account_number']}&payment=success")?>">
<input id="failUrl" type="hidden" name="failUrl" value="<?php echo htmlspecialchars($handler_url."?order_id={$order_row['shop_order_account_number']}&payment=fail")?>">
<input id="userName" type="hidden" name="userName" value="<?php echo htmlspecialchars($fio)?>">
<input id="userEmail" type="hidden" name="userEmail" value="<?php echo htmlspecialchars($email)?>">
<input name="submit" value="Перейти к оплате" type="submit"/>
</form>
<?php
}
}
/**
* Изменение статуса заказа. Позволяет пользователю внедрять собственные
* обработчики при изменении статуса.
*
* @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']));
}
}
}
}
Добрый день! Подскажите, по какому протоколу осуществляется подключение в данном случае? Протокол Web Money или Протокол IntellectMoney?
HostCMS, спасибо!
Еще вопрос.
Для настройки необходимо заменить номер магазина и секретный ключ на свои. Техподдержка ПС говорит, что еще необходимо знать URL страницы, где размещен код:
Он у нас размещен в типовой динамеческой странице "Интернет-магазин Корзина". Значит URL будет http://мой домен.ru/shop/cart/ ?
Еще вопрос.
Для настройки необходимо заменить номер магазина и секретный ключ на свои. Техподдержка ПС говорит, что еще необходимо знать URL страницы, где размещен код:
// ------------------------------------------------
// Обработка уведомления об оплате от IntellectMoney
// ------------------------------------------------
if (isset($_REQUEST['orderId']))
{
// Получаем ID заказа
$order_id = to_int($_POST['orderId']);
$order_row = $shop->GetOrder($order_id);
if ($order_row)
{
// Вызов обработчика платежной системы
$shop->ExecSystemsOfPayHandler($order_row['shop_system_of_pay_id']);
}
}
// Обработка уведомления об оплате от IntellectMoney
// ------------------------------------------------
if (isset($_REQUEST['orderId']))
{
// Получаем ID заказа
$order_id = to_int($_POST['orderId']);
$order_row = $shop->GetOrder($order_id);
if ($order_row)
{
// Вызов обработчика платежной системы
$shop->ExecSystemsOfPayHandler($order_row['shop_system_of_pay_id']);
}
}
Он у нас размещен в типовой динамеческой странице "Интернет-магазин Корзина". Значит URL будет http://мой домен.ru/shop/cart/ ?
Здравствуйте, я установила на сайте IntellectMoney, платежи проходят нормально, деньги на счете, уведомления о заказе и оплате получаю. Все в порядке, но приходит от IntellectMoney ошибка:
Ваша система не приняла уведомление о создании или оплате СКО (3270113240)
Перешлите, пожалуйста Вашему техническому специалисту следующую информацию:
Система ИнтеллектМани не смогла доставить http запрос
Страница:
Данные зпароса: eshopId=434550&paymentId=3270113240&orderId=90&eshopAccount=4724684956&serviceName=%ce%ef%eb%e0%f2%e0+%e7%e0%ea%e0%e7%e0+%b9+90&recipientAmount=2800.00&recipientCurrency=RUB&paymentStatus=3&userName=%f1%f2%e0%f0%ea%ee%e2+%e8%e2%e0%ed+%e5%e2%e3%e5%ed%fc%e5%e2%e8%f7&userEmail=ivanstarkov%40yandex.ru&paymentData=2012-02-12+18%3a40%3a27&secretKey=&hash=2874d12f919774440b81b284a692616d
Текст ошибки:
== Начало ошибки ==
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
<head>
<title>Корзина</title>
<meta name="description" content="Корзина"></meta>
<meta name="keywords" content="Корзина"></meta>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type"></meta>
<link rel="stylesheet" type="text/css" href="/templates/template1/style.css?1328881221" /> <link rel="stylesheet" type="text/css" href="/hostcmsfiles/style.css" />
<link rel="alternate" type="application/rss+xml" title="RSS Feed" href="/news/rss/" />
<!-- jQuery -->
<script type="text/javascript" src="/hostcmsfiles/jquery/jquery.js"></script>
<!-- validate -->
<script type="text/javascript" src="/hostcmsfiles/jquery/jquery.validate.js"></script>
<!-- LightBox -->
<script type="text/javascript" src="/hostcmsfiles/jquery/lightbox/js/jquery.lightbox.js"></script>
<link rel="stylesheet" type="text/css" href=
== Конец ошибки ==
После исправления ошибки выполните запрос
== Начало запроса ==
== конец запроса ==
Подскажите, пожалуйста, что исправить. Спасибо.
Ваша система не приняла уведомление о создании или оплате СКО (3270113240)
Перешлите, пожалуйста Вашему техническому специалисту следующую информацию:
Система ИнтеллектМани не смогла доставить http запрос
Страница:
Данные зпароса: eshopId=434550&paymentId=3270113240&orderId=90&eshopAccount=4724684956&serviceName=%ce%ef%eb%e0%f2%e0+%e7%e0%ea%e0%e7%e0+%b9+90&recipientAmount=2800.00&recipientCurrency=RUB&paymentStatus=3&userName=%f1%f2%e0%f0%ea%ee%e2+%e8%e2%e0%ed+%e5%e2%e3%e5%ed%fc%e5%e2%e8%f7&userEmail=ivanstarkov%40yandex.ru&paymentData=2012-02-12+18%3a40%3a27&secretKey=&hash=2874d12f919774440b81b284a692616d
Текст ошибки:
== Начало ошибки ==
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
<head>
<title>Корзина</title>
<meta name="description" content="Корзина"></meta>
<meta name="keywords" content="Корзина"></meta>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type"></meta>
<link rel="stylesheet" type="text/css" href="/templates/template1/style.css?1328881221" /> <link rel="stylesheet" type="text/css" href="/hostcmsfiles/style.css" />
<link rel="alternate" type="application/rss+xml" title="RSS Feed" href="/news/rss/" />
<!-- jQuery -->
<script type="text/javascript" src="/hostcmsfiles/jquery/jquery.js"></script>
<!-- validate -->
<script type="text/javascript" src="/hostcmsfiles/jquery/jquery.validate.js"></script>
<!-- LightBox -->
<script type="text/javascript" src="/hostcmsfiles/jquery/lightbox/js/jquery.lightbox.js"></script>
<link rel="stylesheet" type="text/css" href=
== Конец ошибки ==
После исправления ошибки выполните запрос
== Начало запроса ==
== конец запроса ==
Подскажите, пожалуйста, что исправить. Спасибо.
А ведь я писал вам об идентичной проблеме!
И вы послали меня в поддержку IntellektMoney
И вы послали меня в поддержку IntellektMoney

xshock писал(а):
А вы решили проблему?
У меня версия Халява - думаю техподдержка мне не ответит.
А ведь я писал вам об идентичной проблеме!
А вы решили проблему?
У меня версия Халява - думаю техподдержка мне не ответит.
xshock писал(а):
На сколько я понимаю Вы упорно не хотите обратиться в поддержку этой ПС?
А ведь я писал вам об идентичной проблеме!
И вы послали меня в поддержку IntellektMoney
И вы послали меня в поддержку IntellektMoney
На сколько я понимаю Вы упорно не хотите обратиться в поддержку этой ПС?
Техподдержка hostcms послала в IntellektMoney.
IntellektMoney - не отвечают.
IntellektMoney - не отвечают.
Авторизация