0 Пользователей и 1 Гость просматривают эту тему.
  • 14 Ответов
  • 4797 Просмотров
*

Maklay

  • Осваиваюсь на форуме
  • 31
  • 0 / 0
Добрый день!

Пытаюсь собрать модуль оплаты для эквайринга банка авангард. Для начала простейший, без отслеживания статуса заказа, просто чтобы пользователь имел возможность оплаты. Столкнулся с проблемой, после подтверждения на step5 joomshoping просто  благодарит за заказ, не перенаправляя на сайт для совершения платежа. Хотелось бы узнать в чем может быть проблема.
p.s. Функции getUrlParams и checkTransaction удалены (скорее всего напрасно), так как в моем понимании для функционирования на заданном уровне не нужны.
Вот код:

Код
<?php
defined('_JEXEC') or die('Restricted access');

class pm_avangard extends PaymentRoot {

  function showPaymentForm($params, $pmconfigs) {
    include(dirname(__FILE__). "/paymentform.php");
  }

  //function call in admin
  function showAdminFormParams($params) {
    $array_params = array('preference', 'transaction_end_status', 'transaction_pending_status', 'transaction_failed_status');
    foreach ($array_params as $key) {
      if (!isset($params[$key]))
        $params[$key] = '';
    }
    $orders = &JModel::getInstance('orders', 'JshoppingModel'); //admin model
    include(dirname(__FILE__). "/adminparamsform.php");
  }

   function showEndForm($pmconfigs, $order)
   {
$return = JURI::root(). "index.php?option=com_jshopping&controller=checkout&task=step7&act=return&js_paymentclass=pm_avangard";
   
$xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<NEW_ORDER>
<SHOP_ID>{$pmconfigs['eshop_id']}</SHOP_ID>
<SHOP_PASSWD>{$pmconfigs['Password']}</SHOP_PASSWD>
<AMOUNT>{$order->order_total}</AMOUNT>
<ORDER_NUMBER>{$order->order_id}</ORDER_NUMBER>
<ORDER_DESCRIPTION>Оплата заказа {$order->order_id}</ORDER_DESCRIPTION>
<LANGUAGE>RU</LANGUAGE>
<BACK_URL>{$return}</BACK_URL>
</NEW_ORDER>";
jimport( 'joomla.client.http' );
$opt = new JRegistry;
$trans = new JHttpTransportCurl($opt);
$http = new JHttp($opt,$trans);
$response = $http->post("https://www.avangard.ru/iacq/h2h/reg",array('xml'=>$xml));
$result = $response->body;
if($result)
$obj = new SimpleXMLElement($result);
$dbValues['ticket_id'] = strval(@$obj->ticket);
echo $xml;
echo "<br>";
echo $result;
echo "<br>";
echo $dbValues['ticket_id'];
?>
       <html>
        <head>
            <meta http-equiv="content-type" content="text/html; charset=utf-8" />           
        </head>
        <body>
        <form id="paymentform" action="https://www.avangard.ru/iacq/pay" name = "paymentform" method = "post">
        <input  name='tiсket' value='<? echo $dbValues['ticket_id'] ?>'>
        </form>       
        <?php print _JSHOP_REDIRECT_TO_PAYMENT_PAGE ?>
        <br>
         <!-- <script type="text/javascript">document.getElementById('paymentform').submit();</script> -->
        </body>
        </html>
<?php
        die();
    }
}
?>


Заранее благодарен.
« Последнее редактирование: 15.04.2013, 14:41:53 от Maklay »
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
payment_type при установке какой указываете? Надо 2.
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

Maklay

  • Осваиваюсь на форуме
  • 31
  • 0 / 0
Цитировать
ayment_type при установке какой указываете? Надо 2.
Спасибо помогло.

 Но появились новые проблемы уже с кодом модуля. Принцип работы системы эквайринга : сайт посылает XML с запросом на регистрацию платежа:
Цитировать
"Входные параметры передаются в формате XML, передача возможна как методом GET, так и POST, наименование параметра с входящим XML-сообщением – “xml” (без кавычек). Регистр элементов во входящем сообщении и их порядок следования несуществен."

, сервис в ответ отсылает XML с уникальным номером(по которому и будет потом осуществлеy запрос на оплату) и другой информацией.
Код
function showEndForm($pmconfigs, $order) 
   {
$return = JURI::root(). "index.php?option=com_jshopping&controller=checkout&task=step7&act=return&js_paymentclass=pm_avangard";
  
$xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<NEW_ORDER>
<SHOP_ID>{$pmconfigs['eshop_id']}</SHOP_ID>
<SHOP_PASSWD>{$pmconfigs['Password']}</SHOP_PASSWD>
<AMOUNT>{$order->order_total}</AMOUNT>
<ORDER_NUMBER>{$order->order_id}</ORDER_NUMBER>
<ORDER_DESCRIPTION>Оплата заказа {$order->order_id}</ORDER_DESCRIPTION>
<LANGUAGE>RU</LANGUAGE>
<BACK_URL>{$return}</BACK_URL>
</NEW_ORDER>";
jimport( 'joomla.client.http' );
$opt = new JRegistry;
$trans = new JHttpTransportCurl($opt);
$http = new JHttp($opt,$trans);
$response = $http->post("https://www.avangard.ru/iacq/h2h/reg",array('xml'=>$xml));
$result = $response->body;
if($result)
$obj = new SimpleXMLElement($result);
$dbValues['ticket_id'] = strval(@$obj->ticket);
echo $xml;
echo "<br>";
echo $result;
echo "<br>";
echo $dbValues['ticket_id'];



 Вместо ответного XML с данными
 
Код
 $result = $response->body;
Получает : 4 Внутренняя ошибка системы.
Есть подозрение, что  не отправляется XML  в сторону банка, или отправляется но не в виде XML, так как строка(для проверки)
Код
$obj = new SimpleXMLElement($xml);
Выдает ошибку недопустимости парсить строку как XML.
И при выполнении
Код
echo $xml;
на экран выводятся только значения переменных, разделенных пробелами.
Такое же  сообщение(Ответ на функцию) получается если просто обратиться по ссылке https://www.avangard.ru/iacq/h2h/reg ), следовательно все атки что-то не то или не так отсылается. Буду рад советам.
« Последнее редактирование: 15.04.2013, 15:00:32 от Maklay »
*

Maklay

  • Осваиваюсь на форуме
  • 31
  • 0 / 0
Та проблема решилась, возник другой вопрос:
Как движок джумшопа относится к прямому удалению заказа из таблицы orders, нормально или есть необходимость дочищать какие-либо другие таблицы?
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
orderhistory, orderitem
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

Maklay

  • Осваиваюсь на форуме
  • 31
  • 0 / 0
спасибо
*

Maklay

  • Осваиваюсь на форуме
  • 31
  • 0 / 0
*тут был вопрос ответ на который уже не нужен*
*

Maklay

  • Осваиваюсь на форуме
  • 31
  • 0 / 0
Подскажите каким образом можно использовать метод
Код
jshopCheckout::sendOrderEmail($order_id,1)

из стороннего файла? попробовал
 
Код
include_once(JPATH_SITE."/components/com_jshopping/models/checkout.php");
не помогает. При вызове в плагине оплаты работает, а из стороннего файла нет(функции Joomla файлу доступны)
« Последнее редактирование: 23.04.2013, 09:53:56 от Maklay »
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Подскажите каким образом можно использовать метод
Код
jshopCheckout::sendOrderEmail($order_id,1)

Это не статическая функция.
Попробуйте подключить так же, а потом создать экземпляр класса и вызвать его метод.
$checkout = new jshopCheckout();
$checkout->sendOrderEmail($order_id);
p.s. У метода всего 1 переменная...
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

Maklay

  • Осваиваюсь на форуме
  • 31
  • 0 / 0
Цитировать
Это не статическая функция.
Попробуйте подключить так же, а потом создать экземпляр класса и вызвать его метод.
$checkout = new jshopCheckout();
$checkout->sendOrderEmail($order_id);
p.s. У метода всего 1 переменная...
Ничего не изменилось, на выводе ошибка.
Код
order_payed() @ /public_html/myhost/cli/status.php:159
jshopCheckout :: sendOrderEmail() @ /public_html/myhost/cli/status.php:92
JFactory :: getApplication() @ /public_html/myhost/components/com_jshopping/models/checkout.php:14
JError :: raiseError() @ /public_html/myhost/libraries/joomla/factory.php:99
JError :: raise() @ /public_html/myhost/libraries/joomla/error/error.php:251
JError :: throwError() @ /public_html/myhost/libraries/joomla/error/error.php:176
call_user_func_array() @ /public_html/myhost/libraries/joomla/error/error.php:214
JError :: handleCallback()
call_user_func() @ /public_html/myhost/libraries/joomla/error/error.php:765
JError :: customErrorPage()
JFactory :: getApplication() @ /public_html/myhost/libraries/joomla/error/error.php:784
JError :: raiseError() @ /public_html/myhost/libraries/joomla/factory.php:99
JError :: raise() @ /public_html/myhost/libraries/joomla/error/error.php:251
p.s. из модуля оплаты(внутри showendform) вызывал именно без создания экземпляра класса, и работает.
« Последнее редактирование: 23.04.2013, 13:16:26 от Maklay »
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
аа... Так это... Добавить надо бы
Код
include_once(JPATH_SITE."/components/com_jshopping/lib/factory.php");
Потому что на 14 строке код $lang = JSFactory::getLang(); не может получить экземпляр класса JSFactory.
Остальные классы вроде как чисто от Joomla и должны подключаться...
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

Maklay

  • Осваиваюсь на форуме
  • 31
  • 0 / 0
Цитировать
Потому что на 14 строке код $lang = JSFactory::getLang(); не может получить экземпляр класса JSFactory.
Остальные классы вроде как чисто от Joomla и должны подключаться...
Не помогает. Ошибка та же
Код
jos-Error: Application Instantiation Error
order_payed() @ /var/www/u4396130/public_html/shtory.net/cli/status.php:160
jshopCheckout -> sendOrderEmail() @ /var/www/u4396130/public_html/shtory.net/cli/status.php:93
JFactory :: getApplication() @ /var/www/u4396130/public_html/shtory.net/components/com_jshopping/models/checkout.php:14
JError :: raiseError() @ /var/www/u4396130/public_html/shtory.net/libraries/joomla/factory.php:99
JError :: raise() @ /var/www/u4396130/public_html/shtory.net/libraries/joomla/error/error.php:251
JError :: throwError() @ /var/www/u4396130/public_html/shtory.net/libraries/joomla/error/error.php:176
call_user_func_array() @ /var/www/u4396130/public_html/shtory.net/libraries/joomla/error/error.php:214
JError :: handleCallback()
call_user_func() @ /var/www/u4396130/public_html/shtory.net/libraries/joomla/error/error.php:765
JError :: customErrorPage()
JFactory :: getApplication() @ /var/www/u4396130/public_html/shtory.net/libraries/joomla/error/error.php:784
JError :: raiseError() @ /var/www/u4396130/public_html/shtory.net/libraries/joomla/factory.php:99
JError :: raise() @ /var/www/u4396130/public_html/shtory.net/libraries/joomla/error/error.php:251

Вот все что подключено к файлу:
Код
define('_JEXEC', 1);
define('DS', DIRECTORY_SEPARATOR);
if (file_exists(dirname(dirname(__FILE__)). '/defines.php'))
{
require_once dirname(dirname(__FILE__)). '/defines.php';
}

if (!defined('_JDEFINES'))
{
define('JPATH_BASE', dirname(dirname(__FILE__)));
require_once JPATH_BASE . '/includes/defines.php';
}

require_once JPATH_LIBRARIES . '/import.php';
require_once JPATH_LIBRARIES . '/cms.php';
JError::$legacy = true;;
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
include_once(JPATH_SITE."/libraries/joomla/database/table.php");
include_once(JPATH_SITE."/libraries/joomla/factory.php");
include_once(JPATH_SITE."/components/com_jshopping/lib/factory.php");
include_once(JPATH_SITE."/components/com_jshopping/payments/payment.php");
include_once(JPATH_SITE."/components/com_jshopping/models/checkout.php");
Но видимо все же чего то не хватает. =\
« Последнее редактирование: 23.04.2013, 17:13:58 от Maklay »
*

umbabaraumba

  • Живу я здесь
  • 2415
  • 153 / 1
  • если помог можете поставить +
Тоже вот понадобилось подключить авангард на Joomla 3.0 , получилось ли у вас это сделать ?
Errare humanum est
Ubuntu по-русски
Пишу не сложные модули и компоненты, не дорого но не срочно
*

Neyasyt

  • Новичок
  • 5
  • 0 / 0
Тоже интересна судьба плагина
*

Ragivort

  • Завсегдатай
  • 1154
  • 58 / 2
  • Такая Life
Та же фигня, интересно, получилось ли прикрутить
Дозволь мне свершить то добро, которое я способен свершить, теперь, ибо я могу более не вернуться сюда.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Украинские плагины оплаты для версии 5, 0?

Автор Alex_gs

Ответов: 3
Просмотров: 1262
Последний ответ 12.01.2023, 01:16:57
от Alex_gs
Privat24 - плагин оплаты (приват24)

Автор vasya321

Ответов: 84
Просмотров: 21647
Последний ответ 05.07.2022, 10:39:36
от nevigen
LiqPay - плагин оплаты

Автор 1g0r

Ответов: 160
Просмотров: 38070
Последний ответ 31.12.2021, 23:17:26
от Biss
Плагин оплаты AlfaBank Казахстана

Автор Kokshetau

Ответов: 4
Просмотров: 1508
Последний ответ 13.01.2021, 18:40:11
от Kokshetau
Плагин оплаты кредитной картой [Альфа-Банк]

Автор v42bis

Ответов: 3
Просмотров: 3259
Последний ответ 30.11.2020, 22:00:28
от nevigen