Новости Joomla

Как тестировать Joomla PHP-разработчику? Компонент Patch tester.

👩‍💻 Как тестировать Joomla PHP-разработчику? Компонент Patch tester.Joomla - open source PHP-фреймворк с готовой админкой. Его основная разработка ведётся на GitHub. Для того, чтобы международному сообществу разработчиков было удобнее тестировать Pull Requests был создан компонент Patch Tester, который позволяет "накатить" на текущую установку Joomla именно те изменения, которые необходимо протестировать. На стороне инфраструктуры Joomla для каждого PR собираются готовые пакеты, в которых находится ядро + предложенные изменения. В каждом PR обычно находятся инструкции по тестированию: куда зайти, что нажать, ожидаемый результат. Тестировщики могут предположить дополнительные сценарии, исходя из своего опыта и найти баги, о которых сообщить разработчику. Или не найти, и тогда улучшение или исправление ошибки быстрее войдёт в ядро Joomla. Напомню, что для того, чтобы PR вошёл в ядро Joomla нужны минимум 2 положительных теста от 2 участников сообщества, кроме автора. Видео на YouTubeВидео на VK ВидеоВидео на RuTubeКомпонент на GitHub https://github.com/joomla-extensions/patchtester@joomlafeed#joomla #php #webdev #community

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

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

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

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

Автор Alex_gs

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

Автор vasya321

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

Автор 1g0r

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

Автор Kokshetau

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

Автор v42bis

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