Новосибирск +7(983)

По всем вопросам :

Телеграм : @radgura

SP LMS - экваринг от сбербанка

Заказать доработку
Joomla 3.x

Стоимость 2000


@radgura.ru
Адриена Лежена
63089
Новосибирск
Адриена Лежена
+7(983)
3067856
Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.

Статьи

Вы можете Заказать доработку 2000руб. RUB
Для внедрения экваринга сначала создадим параметры компонента

/administrator/components/com_splms/config.xml
<fieldset name="urls" label="Платежные системы">
<field name="sber_login" type="text" label="Логин магазина" description="" default="" />
<field name="sber_pass" type="password" label="Пароль магазина" description="" default="" />
<field name="sber_token" type="tokensber" label="Токен магазина" description="" default="" />
<field name="sberauthtype" type="radio" class="btn-group btn-group-yesno" default="0" label="Тип авторизации">
<option value="1">Логин и пароль</option>
<option value="0">Токен</option>
</field>
<field name="sberdebug" type="radio" class="btn-group btn-group-yesno" default="0" label="Режим">
<option value="1">Тестовый</option>
<option value="0">Рабочий</option>
</field>
<field name="sber_success" type="text" label="Сбербанк success" description="" default="" />
<field name="sber_ref" type="text" label="Сбербанк страница постоплаты" description="" default="" />

Далее в корзине разместитм кнопку оплаты - будем использовать встроенный метод оплаты "direct"

components/com_splms/cart/default.php
<?php if( $this->payment_method == 'all' || ( is_array($this->payment_method) && in_array('direct', $this->payment_method) ) ) { ?>
<div class="splms-payment-method payment-method-direct pull-right">
<a href="#" class="btn btn-success sberbtn" style=""><?php echo JText::_('COM_SPLMS_CART_PROCEED_CHECKOUT'); ?></a><div id="sberout"></div>
<input type="hidden" name="totalamount" id="totalamount" value="<?php echo $amounts; ?>">
</div>
<?php } ?>

Добавим чтение параметров

function curlQuery($query_url) //функция ждет на вход некий URL адрес, с параметрами.
{
$ch = curl_init() or die('Ошибка инициализации cURL'); //инициализируем протокол cURL
//устанавливаем все необходимые данные
curl_setopt($ch, CURLOPT_URL, $query_url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_USERAGENT, 'PHP Payment Gateway by Fuss (https://fussraider.ru)');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$data = curl_exec($ch) or die('Не удалось послать данные на сервер, повторите попытку.
Error: ' . curl_error($ch));
$data_array = json_decode($data, true);
return $data_array;
}
//параметры
$compo_params = JComponentHelper::getParams('com_splms');
$sber_post = $compo_params->get('sber_post','index.php?option=com_splms&task=payment.notify');
$sber_success = $compo_params->get('sber_success','index.php?option=com_splms&task=payment.direactPayment&pm=direct ');
$sber_cancel = $compo_params->get('sber_cancel','index.php?option=com_splms&task=payment.paymencancel');
$sber_ref = $compo_params->get('sber_ref','');
//номер заказа для сбера
$today = JFactory::getDate();
$today = JHtml::_('date', $today, 'Ymd');
$rand = strtoupper(substr(uniqid(sha1(time())),0,6));
$uniqueno = $rand . $today; //order_id

Для работы скрипта необходим уникальный номер - создаем его каждый раз во время открытия страницы , переменная $uniqueno

Размещаем скрипт, отвечающий за открытие формы оплаты

<script>
jQuery(document).ready(function() {
jQuery("body").on("click", ".sberbtn", function(e){
var myData = 'sberbtn='+document.getElementById('invoice_id').value+'&amount='+document.getElementById('totalamount').value;
jQuery.ajax({
type: "POST",
url: "<?php echo JURI::root();?>index.php?option=com_splms&view=cart",
dataType:"text",
data:myData,
success:function(response){
if (response.split('://')[1]!=null)
{
window.location.replace(response);
}
else
document.getElementById('sberout').innerHTML=response;
},
error:function (xhr, ajaxOptions, thrownError){alert(thrownError);}
});
});
});
</script>

 Скрипт проверяет ответ, если в нем html ссылка, то ошибок нет и можно переадресовыать 

Функция читающая aJax запрос - в ней идет первое обращение к сбербанку и получение окна с оплатой

Доступ к этому контенту разрешен только участникам проекта.
Вы можете получить доступ,купив эту доработку
Последний шрих - автоматическое закрытие страницы с проведеной оплатой и перевод клиента в кабинет. Используем ссылку из параметров компонента

components\com_splms\controllers\payment.php
// Direct payment
public function direactPayment() {
$db = JFactory::getDbo();
$compo_params = JComponentHelper::getParams('com_splms');
$sber_ref = $compo_params->get('sber_ref','');
$user = JFactory::getUser();
// Load Lessons model
jimport('joomla.application.component.model');
JModelLegacy::addIncludePath(JPATH_SITE . '/components/com_splms/models');
$model = JModelLegacy::getInstance('Payment', 'SplmsModel');
//Get cookie
$cookie = JFactory::getApplication()->input->cookie;
$orders_info = $cookie->get('splmsOrders', base64_encode(serialize(array())));
$orders_info = unserialize(base64_decode($orders_info));
if ($user-> guest) {
JFactory::getApplication()->enqueueMessage(JText::_('COM_SPLMS_CART_LOGIN_TO_CHECKOUT'), 'warning');
} elseif (isset($orders_info) && is_array($orders_info)) {
if (count($orders_info)) {
$model->insertOrders($orders_info);
//clear cookie
$cookie->set('splmsOrders', null, time() - 1);
if (isset($user->email) && $user->email) {self::sendPurchasdeMail($user->email, $orders_info);}
JFactory::getApplication()-> enqueueMessage(JText::_('COM_SPLMS_DIRECT_ORDER_SUBMITED'), 'success');
echo '<script>window.setTimeout(function(){location.href = "'.JURI::root().$sber_ref.'";}, 2000);</script>';
}
else
{
JFactory::getApplication()-> enqueueMessage(JText::_('COM_SPLMS_NO_ITEM_IN_CART'), 'warning');
//echo '<p>Корзина пуста</p>';
}
} else
{
JFactory::getApplication()-> enqueueMessage(JText::_('COM_SPLMS_SOMETHING_WRONG'), 'warning');
//echo '<p>Ошибка</p>';
}
}

 Но в этом методе не хватает защиты - нам необходимо проверить статус оплаты, до момента создания заказа и отправки письма, с корректировкой метод будет выглядеть так:

Доступ к этому контенту разрешен только участникам проекта.
Вы можете получить доступ,купив эту доработку

Комментарии (0)

Здесь ещё нет оставленных комментариев.

Оставьте свой комментарий

  1. Добавление комментария от гостя.
Вложения (0 / 3)
Share Your Location

Как с нами связаться

По всем вопросам пишите  

Телеграм: @radgura

OnLine заказ

Отправить сообщение

Нажимая на кнопку «Отправить сообщение», я соглашаюсь:
* с условиями публичной оферты
* обработку моих персональных данных


RAD компоненты

Please publish modules in offcanvas position.