Добрый день
Долго искал платежный модуль Privat24 для Virtuemart2
Решил найти любой отечественный и переделать под свои нужды. Был найден плагин платежной системы Intellectmoney.
Он состоит из двух файлов, один собственно сам плагин, взаимодействующий с CMS, а второй это скрипт принимающий ответы со стороны банка и изменяющий статус заказа.
Статус у меня изменять получилось в таблице __virtuemart_orders, но вот оповещать клиента отправкой письма и добавлением в историю заказов проблема.
Я не силен в PHP и не знаю как правильно прицепить этот скрипт к joomle, что бы воспользоваться вот этим простым механизмом.
if (!class_exists('VirtueMartModelOrders'))
require( JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'orders.php' );
$modelOrder = new VirtueMartModelOrders();
$order['order_status'] = 'C';
$order['virtuemart_order_id'] = $order_info;
$order['customer_notified'] = 1;
$modelOrder->updateStatusForOneOrder($order_info, $order, true);
return TRUE;
Привожу ниже весь код слушающего ответы скрипта.
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'On');
header("HTTP/1.0 200 OK");
$my_path = dirname(__FILE__);
if( file_exists($my_path."/../../../configuration.php")) {
$absolute_path = dirname( $my_path."/../../../configuration.php" );
require_once($my_path."/../../../configuration.php");
}
elseif( file_exists($my_path."/../../configuration.php")) {
$absolute_path = dirname( $my_path."/../../configuration.php" );
require_once($my_path."/../../configuration.php");
}
elseif( file_exists($my_path."/configuration.php")) {
$absolute_path = dirname( $my_path."/configuration.php" );
require_once( $my_path."/configuration.php" );
}
else {
die( "Joomla Configuration File not found!" );
}
$absolute_path = realpath( $absolute_path );
// Set up the appropriate CMS framework
if(class_exists( 'jconfig' ))
{
define('_JEXEC', 1);
define('JPATH_BASE', $absolute_path);
define('DS', DIRECTORY_SEPARATOR);
define('JPATH_VM_PLUGINS', $absolute_path. "/administrator/components/com_virtuemart/plugins");
define('JPATH_VM_ADMINISTRATOR', $absolute_path. "/administrator/components/com_virtuemart");
define('JPATH_VM_LIBRARIES', $absolute_path. "/libraries");
// Load the framework
require_once( JPATH_BASE . DS . 'includes' . DS . 'defines.php' );
require_once( JPATH_BASE . DS . 'includes' . DS . 'framework.php' );
// create the mainframe object
$mainframe = & JFactory::getApplication( 'site' );
// Initialize the framework
$mainframe->initialise();
}
else
{
define('_VALID_MOS', '1');
require_once($mosConfig_absolute_path. '/includes/joomla.php');
require_once($mosConfig_absolute_path. '/includes/database.php');
$database = new database( $mosConfig_host, $mosConfig_user, $mosConfig_password, $mosConfig_db, $mosConfig_dbprefix );
$mainframe = new mosMainFrame($database, 'com_virtuemart', $mosConfig_absolute_path );
}
$db =& JFactory::getDBO(); /// подключаемся к MySQL
$query = "SELECT * FROM #__virtuemart_paymentmethods WHERE payment_element LIKE 'Intellectmoney';";
$db->setQuery($query);
$row = $db->loadAssocList('payment_element');
$payment = $row['Intellectmoney']['payment_params'];
preg_match('#eshop_id="(.*)"#Uis',$payment,$shop);
preg_match('#debug="(.*)"#Uis',$payment,$debug_Stats);
preg_match('#secret_key="(.*)"#Uis',$payment,$skey);
preg_match('#status_pending="(.*)"#Uis',$payment,$pending);
preg_match('#status_success="(.*)"#Uis',$payment,$success);
preg_match('#status_canceled="(.*)"#Uis',$payment,$canceled);
$eshop_Id = $shop[1];
if ($debug_Stats[1]==0)
{
$debug_State = 'ok';
}
else
{
$debug_State = 'test';
}
$pass = $skey[1]; //Получаем secret_key
$statuspending= $pending[1]; //Статус заказа для отложенных платежей
$statussuccess= $success[1]; //Статус заказа для успешной операции
$statuscanceled= $canceled[1]; //Статус заказа для неудавшихся сделок
$payment_p = $_POST['payment'];
$signature_p = $_POST['signature'];
$signature = sha1(md5(htmlspecialchars_decode($payment_p, ENT_QUOTES) . $pass));
$info = explode('&', htmlspecialchars_decode($payment_p, ENT_QUOTES));
foreach ($info as $value)
{
$z = explode('=', $value);
$data[$z[0]] = $z[1];
}
if($signature == $signature_p AND $debug_State == $data["state"])
{
$order_info = $data['order'];
if ( !$order_info)
{
return 0;
}
if( $order_info == $data['order'])
{
$db->setQuery("UPDATE #__virtuemart_orders SET `order_status`='". $statussuccess. "' WHERE order_number LIKE '". $order_info. "'");
$db->Query();
if (!class_exists('VirtueMartModelOrders'))
require( JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'orders.php' );
$modelOrder = new VirtueMartModelOrders();
$order['order_status'] = 'C';
$order['virtuemart_order_id'] = $order_info;
$order['customer_notified'] = 1;
$modelOrder->updateStatusForOneOrder($order_info, $order, true);
return TRUE;
}
}
else
{
echo 'ERROR: не совпадает crc!';
return 0;
}
?>
Пожалуйста, помогите разобраться.