Личный кабинет Utmcabinet V2.0 (Utm 5.2.1–008+, 5.3+)

Вопросы по сопутствующим продуктам производства партнеров
Ответить
lknsfos
Сообщения: 24
Зарегистрирован: Чт дек 17, 2009 09:53

Сообщение lknsfos »

Наш программист реализовал интеграцию данного ЛК с сервисом "Смотрешка" от ООО "ЛайфСтрим". Ему особо некогда делиться, потому сам. Используется немного добитая до нужного функционала urfaadmin из того что было в ЛК и самописный им lfstrm для связи с v1 api от Смотрёшки.
Суть: В биллинг добавляем доп. параметры lfstrm_id и lfstrm_suspend - в первый падает id от смотрешки, во второй будут сохраняться подписки абонента со стороны смотрешки, которые удаляются на время блокировки абонента (что бы он не уходил в минус).
В биллинге создаются периодические услуги на каждый пакет с нужной вам стоимостью.
При заходе абонента в личный кабинет проверяем lfstrm_id, если пуста - выкидывается запрос email, регистрируемся, записываем его id в доп параметр
Абоненту назначается логин ПРОВАЙДЕРЛИЦЕВОЙСЧЕТ (els1175 для примера) и он кидается в заранее созданную группу смотрёшки.
В конфигах есть сравнение ваших услуг от смотрешки и от биллинга. Оно и используется при построении списка пакетов абоненту в ЛК.
При блокировке (отключение интернета) используем систему utm5_rfw если пользователь в группе, то запрашиваем со смотрёшки номера подписок, сохраняем в доп параметр, а когда разблокируется - поочереди подключаем.

в /application/modules/billing/controllers/IndexController.php добавляем (не забудьте поменять строчку $login = 'ВАШПРОВАЙДЕР'.$account_id; !)

Код: Выделить всё

// added 2016-03-15
    public function smotreshkaAction()
    {
     	$this->setTitle('«Смотрёшка»: совершенно новое телевидение');

        $lfstrm = new Lfstrm_Smotreshka();
//        Zend_Debug::dump($lfstrm->test());

        $urfa = $this->reconnect();
        $userInfo = $urfa->getUserInfo();
//        echo '$urfa->getUserInfo()';
//        Zend_Debug::dump($userInfo);
        $user_id = $userInfo['id'];
        $account_id = $userInfo['basic_account'];

        $urfa_admin = new Urfaphp_URFAClientAdmin(
                 $this->config->urfaphp->login ,
                 $this->config->urfaphp->password,
                 $this->config->urfaphp->host,
                 $this->config->urfaphp->port, true, true);
        // Zend_Debug::dump($urfa_admin);

        $user = $urfa_admin->rpcf_get_userinfo($user_id);
//        echo '$urfa_admin->rpcf_get_userinfo($user_id)';
//        Zend_Debug::dump($user);

        $parameters = $user['parameters'];
        $lfstrm_param_id = $lfstrm->getBillingParamId();
        $param_key = FALSE;
        foreach ($parameters as $key=>$param) {
          if ($param['id'] == $lfstrm_param_id) {
            $param_key = $key;
            break;
          }
	}
	if ($param_key === FALSE) {
            $this->_helper->flashMessenger->addMessage(
                array('danger' => 'Неверно указан ID параметра')
            );
            $this->redirect('/user/');
        }
	$lfstrm_id = $parameters[$param_key]['value'];
        $account_info = $urfa_admin->rpcf_get_accountinfo($account_id);
        if ($account_info['int_status'] == 0){
        echo "Подключение и редактирование подписок \"Cмотрешки\" доступно только при активной услуге доступа в Интернет";
        return;
}

	if ($lfstrm_id == FALSE) { // еще не зарегистрирован в Смотрешке и/или не привязан к биллингу
          $this->view->form = new Billing_Form_SmotreshkaUser($user['email']);

          if ($this->getRequest()->isPost() and $this->view->form->isValid($this->getRequest()->getPost())) { // сабмит, все валидно
              $values = $this->view->form->getValues();
              $email = $values['email'];
              $login = 'ВАШПРОВАЙДЕР'.$account_id;
              $result = $lfstrm->addUser($login,$email);

              if ($result['status'] == 200) { // смотрешка ответила корректно
                $lfstrm_id = $result['response']['id'];
                $parameters[$param_key]['value'] = $lfstrm_id;
                $urfa_result = $urfa_admin->rpcf_edit_user_new($user,$parameters);

                if ($urfa_result['user_id']) { // корректно записалось в доппараметры
                  $urfa_admin->rpcf_add_group_to_user($user_id,$lfstrm->getBillingGroupId());
                  $this->_helper->flashMessenger->addMessage(
                    array('success' => 'Регистрация прошла успешно')
                  );
                  $this->redirect('/user/smotreshka');

                } else { // ошибка в биллинге
                  $this->_helper->flashMessenger->addMessage(
                    array('danger' => $urfa_result['error_msg'])
                  );
                  $this->redirect('/user');
                }

              } else { // ошибка на стороне смотрешки
                $this->view->error = 'Ошибка регистрации: '.$result['response']['error'];
              }
          }
          return;
        }


	$result = $lfstrm->getUser($lfstrm_id);
        //Zend_Debug::dump($result);
        if ($result['status'] != 200) {
            $this->_helper->flashMessenger->addMessage(
                array('danger' => 'Неверно указан lfstrm_id')
            );
            $this->redirect('/user/');
        }

	// корректный lfstrm_id в доппараметрах
        $this->view->lfstrmInfo = $result['response'];

        $all_services = $urfa_admin->rpcf_get_services_list(); //все, что есть в биллинге
        $active_services = $urfa_admin->rpcf_get_all_services_for_user($account_id); // уже подключенные
        $lfstrm_services = $lfstrm->getBillingServices(); // наш список из конфига
        $services = $active = array();
        foreach ($all_services['services'] as $service) {
          $service_id = $service['service_id'];
          if (isset($lfstrm_services[$service_id])) { // and $lfstrm_services[$service_id]
            $services[$service_id] = $service['service_name'] . ', ' . $service['service_comment'];
            foreach ($active_services['services'] as $active_service) {
              if ($active_service['id'] == $service_id) {
                $active[$service_id] = $active_service['slink_id'];
              }
            }
          }
	}
	$this->view->form = new Billing_Form_SmotreshkaServices($services,array_keys($active));
        if ($this->getRequest()->isPost() and $this->view->form->isValid($this->getRequest()->getPost())) { // сабмит, все валидно
            $values = $this->view->form->getValues();
            foreach ($lfstrm_services as $service_id=>$offer_id) {
                $from = in_array($service_id,array_keys($active));
                $to = in_array($service_id,$values['services']);
                if ($from != $to) { // подключение или отключение
                    $result = $lfstrm->setSubscription($lfstrm_id,$offer_id,$to);
//                    $result = array('status'=>200);
                    if ($result['status'] == 200) { // смена подписки в смотрешке прошла корректно
                        if ($to) { // подключение

                            $periods = $urfa_admin->rpcf_get_discount_periods();
                            $period_static_id = $lfstrm->getBillingPeriodStaticId();
                            $discount_period_id = FALSE;
                            foreach ($periods['discount_periods'] as $period) {
                              if ($period['static_id']==$period_static_id) {
                                $discount_period_id = $period['discount_period_id'];
                                break;
                              }
                            }
                            if ($discount_period_id) { // нашли РП по static_id из конфига
                                $service = $lfstrm->getBillingPeriodicDefault();
                                $service['user_id'] = $user_id;
                                $service['account_id'] = $account_id;
                                $service['service_id'] = $service_id;
                                $service['start_date'] = time();
                                $service['expire_date'] = 2000000000;
                                $service['discount_period_id'] = $discount_period_id;
                                $urfa_result = $urfa_admin->rpcf_add_periodic_slink_ex($service);
//Zend_Debug::dump($service);
//return;
                            } else {
                                $this->_helper->flashMessenger->addMessage(
                                    array('danger' => 'Не найден РП')
                                );
                            }
                        } else { // отключение
                            $urfa_result = $urfa_admin->rpcf_delete_slink($active[$service_id]);
 //$urfa_result = $urfa_admin->rpcf_edit_periodic_slink_ex($service);
                        }
                        if ((is_array($urfa_result) and $urfa_result['slink_id']==-1) or $urfa_result==-1) {
                            $this->_helper->flashMessenger->addMessage(
                                array('danger' => 'Ошибка услуги')
                            );
                        }

                    } else {
                        $this->_helper->flashMessenger->addMessage(
                            array('danger' => 'Ошибка подписки: '.$result['response']['error'])
                        );
                    }
                }
            }

            if (!count($this->_helper->flashMessenger->getMessages())) {
                $this->_helper->flashMessenger->addMessage(
                    array('success' => 'Подписки обновлены успешно')
                );
            }
            $this->redirect('/user/smotreshka');
        }

	unset($urfa);
        unset($urfa_admin);
        unset($user);
        unset($parameters);
    }
/application/modules/billing/forms/SmotreshkaServices.php

Код: Выделить всё

<?php
/**
 * @author    Ruslan Yamaletdinov <dime@vne.ru>
 * @link      http&#58;//els-net.ru/
 * @copyright Copyright &copy; 2016
 * @license   GNU General Public License, version 2&#58;
 *            http&#58;//www.gnu.org/licenses/old-licenses/gpl-2.0.html
 */

class Billing_Form_SmotreshkaServices extends Zend_Form
&#123;

    public function __construct&#40;$services,$value&#41;
    &#123;
        parent&#58;&#58;__construct&#40;&#41;;
        $this->setName&#40;'form_smotreshka_services'&#41;;
        //$this->removeDecorator&#40;'HtmlTag'&#41;;

        $this->addElement&#40;
            'multiCheckbox', 'services', array&#40;
                                     'label'        => 'Подписка на каналы',
                                     'value' => $value,
                                     'multiOptions' => $services
                                &#41;
        &#41;;

        $submit = new Zend_Form_Element_Submit&#40;'submit', array&#40;'class' => 'btn btn-primary'&#41;&#41;;
        $submit->setLabel&#40;'Сохранить изменения'&#41;;//->removeDecorator&#40;'DtDdWrapper'&#41;;

        $this->addElement&#40;$submit&#41;;

    &#125;

    public function init&#40;&#41;
    &#123;
        $this->addAttribs&#40;array&#40;'class' => 'well col-md-6'&#41;&#41;;
    &#125;

&#125;
/application/modules/billing/forms/SmotreshkaUser.php

Код: Выделить всё

<?php
/**
 * @author    Ruslan Yamaletdinov <dime@vne.ru>
 * @link      http&#58;//els-net.ru/
 * @copyright Copyright &copy; 2016
 * @license   GNU General Public License, version 2&#58;
 *            http&#58;//www.gnu.org/licenses/old-licenses/gpl-2.0.html
 */

class Billing_Form_SmotreshkaUser extends Zend_Form
&#123;

    public function __construct&#40;$email=''&#41;
    &#123;
        parent&#58;&#58;__construct&#40;&#41;;
        $this->setName&#40;'form_smotreshka_user'&#41;;
        //$this->removeDecorator&#40;'HtmlTag'&#41;;

        $this->addElement&#40;
            'text', 'email', array&#40;
                                         'label'         => 'E-mail&#58;',
                                         'required'      => TRUE,
                                         'value'         => $email,
                                         'filters'       => array&#40;'StringTrim', 'StringToLower'&#41;,
                                         'validators'    => array&#40;
                                             array&#40;'EmailAddress', TRUE&#41;
                                         &#41;,
                                         'ErrorMessages' => array&#40;'Некорректный адрес электронной почты'&#41;,
                                    &#41;
        &#41;;

        $submit = new Zend_Form_Element_Submit&#40;'submit', array&#40;'class' => 'btn btn-primary'&#41;&#41;;
        $submit->setLabel&#40;'Зарегистрироваться'&#41;;//->removeDecorator&#40;'DtDdWrapper'&#41;;

        $this->addElement&#40;$submit&#41;;

    &#125;
    public function init&#40;&#41;
    &#123;
        $this->addAttribs&#40;array&#40;'class' => 'well col-md-6'&#41;&#41;;
    &#125;

&#125;
/application/modules/billing/views/scripts/index/smotreshka.phtml

Код: Выделить всё

<?php
if &#40;isset&#40;$this->error&#41;&#41; &#123;
    echo $this->bootAlert&#40;array&#40;'danger'=>$this->error&#41;&#41;;
&#125;
if &#40;isset&#40;$this->info&#41;&#41; &#123;
    echo $this->bootAlert&#40;array&#40;'info'=>$this->info&#41;&#41;;
&#125;
?>

<?php if &#40;$this->lfstrmInfo&#41; &#58; ?>
<table class="table table-striped table-bordered">
    <thead>
    <tr>
        <th colspan="2">Параметры аккаунта</th>
    </tr>
    </thead>
    <tbody>
    <tr>
        <td class="span5">Логин&#58;</td>
        <td><?= $this->lfstrmInfo&#91;'username'&#93;?></td>
    </tr>
    <tr>
        <td>E-mail&#58;</td>
        <td><?= $this->lfstrmInfo&#91;'email'&#93;?></td>
    </tr>
    <tr>
        <td class="span5">Личный кабинет&#58;</td>
        <td><a href="http&#58;//smotreshka.tv/#tv/personal" target="_blank">http&#58;//smotreshka.tv/#tv/personal</a></td>
    </tr>
</table>

<?php endif; ?>

<?= $this->form ?>
/application/modules/cli/controllers/IndexController.php

Код: Выделить всё

<?php
/**
 * @author    Ruslan Yamaletdinov <dime@vne.ru>
 * @link      http&#58;//els-net.ru/
 * @copyright Copyright &copy; 2016
 * @license   GNU General Public License, version 2&#58;
 *            http&#58;//www.gnu.org/licenses/old-licenses/gpl-2.0.html
 */
class Default_IndexController extends Zend_Controller_Action
&#123;
    public function init&#40;&#41;
    &#123;
        $this->config = new Zend_Config_Ini&#40;APPLICATION_PATH . '/configs/billing.ini', 'app'&#41;;
    &#125;

    public function indexAction&#40;&#41;
    &#123;
        $this->view->title = "Test CLI action&#58; index";
        $user_id = $this->_getParam&#40;'user_id'&#41;;
        $this->view->message = "user_id=&#123;$user_id&#125;";
    &#125;

&#125;
/application/modules/cli/views/scripts/index/index.phtml

Код: Выделить всё

<?php echo $this->message; ?>
в /application/configs/application.ini добавляем в нужный раздел

Код: Выделить всё

autoloadernamespaces&#91;&#93; = "Lfstrm_"
для работы скриптов из консоли:
/application/configs/cli.ini

Код: Выделить всё

&#91;cli&#93;

phpSettings.date.timezone = "Europe/Moscow"

;resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"

phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1

includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"


resources.frontController.params.prefixDefaultModule = "1"
resources.modules&#91;&#93; =

resources.view.helperPath.App_View_Helper = APPLICATION_PATH "/views/helpers"

resources.layout.layoutPath = APPLICATION_PATH "/layouts"
resources.layout.layout = "default"
;default.resources.layout.layout = "login"


;Прописываем префиксы файлов для автозагрузки в папке library.
autoloadernamespaces&#91;&#93; = "Urfaphp_"
autoloadernamespaces&#91;&#93; = "Lfstrm_"

resources.log.stream.writerName = "Stream"
resources.log.stream.writerParams.stream = APPLICATION_PATH "/logs/cli.log"
resources.log.stream.writerParams.mode = "a"
;resources.log.stream.filterName = "Priority"
;resources.log.stream.filterParams.priority = 4

;Прописываем роуты

resources.router.routes.default.route = "&#58;user_id"
resources.router.routes.default.defaults.module= "cli"
resources.router.routes.default.defaults.controller= "index"
resources.router.routes.default.defaults.action= "index"
Конфиг смотрешки. Внимательно подставляем свои значения из биллинга. В биллинге в доп параметрах не забудьте создать доп услуги lfstrm_id и lfstrm_suspend
/application/configs/smotreshka.ini

Код: Выделить всё

&#91;lfstrm&#93;

 ;подключение
prefix = "http&#58;//ПУТЬДОСЕРВЕРАlfstrm.tv/v1/"

 ;услуги, формат «id_биллинга => id_смотрешки» &#40;false для устаревших услуг&#41;
service&#91;210&#93; = 110      ;25 за 25
service&#91;202&#93; = 102      ;Промо
service&#91;203&#93; = 103      ;Базовый
service&#91;204&#93; = 104      ;Супербазовый
service&#91;205&#93; = 107      ;Дождь
service&#91;206&#93; = 106      ;Amedia Premium HD
service&#91;207&#93; = 105      ;Наш футбол HD
service&#91;208&#93; = 111      ;Матч футбол
service&#91;209&#93; = 115      ;Плюс кино


 ;ID доппараметра в биллинге для хранения lfstrm_id
lfstrm_param_id = 1
lfstrm_suspend_id = 3

 ;ID группы в биллинге для абонентов смотрешки
lfstrm_group_id = 201

 ;static_id расчетного периода в биллинге
period_static_id = 6

 ;параметры периодической услуги в биллинге
periodic.tariff_link_id = 0
periodic.start_date = 0         ;"now&#40;&#41;"
periodic.expire_date = 0        ;"max_time&#40;&#41;"
periodic.policy_id = 2
periodic.unabon = 0
periodic.cost_coef = 1
в нужное место в /application/layouts/_menu.phtml добавим

Код: Выделить всё

    <li>
      <a href="/user/smotreshka">Смотрешка</a>
    </li>

api смотрёшки /library/Lfstrm/Smotreshka.php

Код: Выделить всё

<?php

class Lfstrm_Smotreshka &#123;

  protected $config;

  public function __construct&#40;&#41; &#123;
    $this->config = new Zend_Config_Ini&#40;APPLICATION_PATH . '/configs/smotreshka.ini', 'lfstrm'&#41;;
  &#125;


  public function getUserlist&#40;&#41; &#123;
    return $this->request&#40;'user'&#41;;
  &#125;


  public function getUser&#40;$lfstrm_id&#41; &#123;
    return $this->request&#40;$lfstrm_id.'/user'&#41;;
  &#125;


  public function deleteUser&#40;$lfstrm_id&#41; &#123;
    return $this->request&#40;$lfstrm_id.'/user','DELETE'&#41;;
  &#125;

  public function addUser&#40;$login,$email&#41; &#123;
    $data = array&#40;
      'email' => $email,
      'username' => $login,
    &#41;;
    return $this->request&#40;'user','POST',$data&#41;;
  &#125;

  public function setSubscription&#40;$lfstrm_id,$offer_id,$action&#41; &#123;
    $data = array&#40;
      'id' => $offer_id,
      'valid' => &#40;bool&#41;$action,
    &#41;;
    return $this->request&#40;$lfstrm_id.'/subscriptions','POST',$data&#41;;
  &#125;
  
  public function deleteSubscriptions&#40;$lfstrm_id&#41; &#123;
    return $this->request&#40;$lfstrm_id.'/subscriptions','DELETE'&#41;;
  &#125;


  public function getSubscriptions&#40;$lfstrm_id&#41; &#123;
    return $this->request&#40;$lfstrm_id.'/subscriptions'&#41;;
  &#125;

  public function getOffers&#40;&#41; &#123;
    return $this->request&#40;'offers'&#41;;
  &#125;
  private function request&#40;$path,$method='GET',$data=FALSE&#41; &#123;
    $ch = curl_init&#40;$this->config->prefix . $path&#41;;
    $params = array&#40;
      CURLOPT_CUSTOMREQUEST => $method,
      CURLOPT_RETURNTRANSFER => TRUE,
      CURLOPT_HTTPHEADER => array&#40;'Content-Type&#58; application/vnd.api+json'&#41;, // или 'application/json', если не понимает?
    &#41;;
    if &#40;$method=='POST' and is_array&#40;$data&#41;&#41; &#123;
      $params&#91;CURLOPT_POSTFIELDS&#93; = json_encode&#40;$data&#41;;
    &#125;
    curl_setopt_array&#40;$ch, $params&#41;;
    $response = curl_exec&#40;$ch&#41;;
    if &#40;curl_errno&#40;$ch&#41;&#41; &#123; // системная ошибка самого CURL
      die&#40;curl_error&#40;$ch&#41;&#41;; // если в биллинг подключать, то может, exception выкидывать какой-нибудь
    &#125;
    $result = array&#40;
      'status' => curl_getinfo&#40;$ch, CURLINFO_HTTP_CODE&#41;,
      'response' => json_decode&#40;$response, TRUE&#41;,
    &#41;;
    curl_close&#40;$ch&#41;;
    return $result;
  &#125;

  public function getBillingParamId&#40;&#41;&#123;
    return $this->config->lfstrm_param_id;
  &#125;

  public function getBillingParamSuspendId&#40;&#41;&#123;
    return $this->config->lfstrm_suspend_id;
  &#125;

  public function getBillingGroupId&#40;&#41;&#123;
    return $this->config->lfstrm_group_id;
  &#125;

  public function getBillingPeriodStaticId&#40;&#41;&#123;
    return $this->config->period_static_id;
  &#125;

  public function getBillingServices&#40;&#41;&#123;
    return $this->config->service->toArray&#40;&#41;;
  &#125;

  public function getBillingPeriodicDefault&#40;&#41;&#123;
    return $this->config->periodic->toArray&#40;&#41;;
  &#125;

  public function test&#40;&#41; &#123;
    return $this->config->toArray&#40;&#41;;
  &#125;

&#125;
Измененный urfaadmin /library/Urfaphp/URFAClientAdmin.php
Сюда не влазит, берем из архива снизую


Скрипты включения и выключения при выключении инета
/netup/utm5/bin/lfstrm_on.php

Код: Выделить всё

<?php

define&#40;'APPLICATION_PATH', '/var/www/html/my/application'&#41;;
define&#40;'APPLICATION_ENV', 'cli'&#41;;

// Ensure library/ is on include_path
set_include_path&#40;
    implode&#40;
        PATH_SEPARATOR, array&#40;
            realpath&#40;APPLICATION_PATH . '/../library'&#41;,
            get_include_path&#40;&#41;,
        &#41;
    &#41;
&#41;;

require_once 'Zend/Application.php';

// Create application
$application = new Zend_Application&#40;
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/cli.ini'
&#41;;

// а запускать MVC нафиг не надо, обойдемся пока обычным скриптом&#41;
//$application->bootstrap&#40;&#41;->run&#40;&#41;;


$user_id = $argv&#91;1&#93;; // аргумент из консоли
//$user_id = 1515;

$lfstrm = new Lfstrm_Smotreshka&#40;&#41;;
//Zend_Debug&#58;&#58;dump&#40;$lfstrm->test&#40;&#41;&#41;;

$config = new Zend_Config_Ini&#40;APPLICATION_PATH . '/configs/billing.ini', 'app'&#41;;
$urfa_admin = new Urfaphp_URFAClientAdmin&#40;
     $config->urfaphp->login ,
     $config->urfaphp->password,
     $config->urfaphp->host,
     $config->urfaphp->port, true, true&#41;;
//Zend_Debug&#58;&#58;dump&#40;$urfa_admin&#41;;

$user = $urfa_admin->rpcf_get_userinfo&#40;$user_id&#41;;
$account_id = $user&#91;'basic_account'&#93;;
//Zend_Debug&#58;&#58;dump&#40;$user&#41;;


$parameters = $user&#91;'parameters'&#93;; //читаем параметры
$lfstrm_param_id = $lfstrm->getBillingParamId&#40;&#41;; //получаем ID lfstrm из биллинга
$lfstrm_suspend_id = $lfstrm->getBillingParamSuspendId&#40;&#41;; //получаем ID lfstrm suspended из биллинга
$param_key = FALSE;
$param_key_susp = FALSE;
foreach &#40;$parameters as $key=>$param&#41; &#123; //ищем ключ массива для lfstrm ID
    if &#40;$param&#91;'id'&#93; == $lfstrm_param_id&#41; &#123;
        $param_key = $key;
        break;
    &#125;
&#125;

foreach &#40;$parameters as $key=>$param&#41; &#123; //ищем ключ массива для susp ID
      if &#40;$param&#91;'id'&#93; == $lfstrm_suspend_id&#41; &#123;
            $param_key_susp = $key;
            break;
          &#125;
        &#125;

if &#40;$param_key === FALSE&#41; &#123;
    die&#40;'Неверно указан ID параметра'&#41;;
&#125;
$lfstrm_subs_susp = $parameters&#91;$param_key_susp&#93;&#91;'value'&#93;;//получаем список приостановленных подписок
$lfstrm_id = $parameters&#91;$param_key&#93;&#91;'value'&#93;;
$lfstrm_subs_susp_arr = explode&#40;',', $lfstrm_subs_susp&#41;; //преобразовываем в массив
foreach &#40;$lfstrm_subs_susp_arr as $sups_subs&#41;&#123; //подписываем их поочереди
    $lfstrm->setSubscription&#40;$lfstrm_id,$sups_subs,true&#41;;
&#125;
$parameters&#91;$param_key_susp&#93;&#91;'value'&#93; = ""; //сбрасываем значение suspended подписок в биллинге
$urfa_result = $urfa_admin->rpcf_edit_user_new&#40;$user,$parameters&#41;;
/netup/utm5/bin/lfstrm_off.php

Код: Выделить всё

<?php

define&#40;'APPLICATION_PATH', '/var/www/html/my/application'&#41;;
define&#40;'APPLICATION_ENV', 'cli'&#41;;

// Ensure library/ is on include_path
set_include_path&#40;
    implode&#40;
        PATH_SEPARATOR, array&#40;
            realpath&#40;APPLICATION_PATH . '/../library'&#41;,
            get_include_path&#40;&#41;,
        &#41;
    &#41;
&#41;;

require_once 'Zend/Application.php';

// Create application
$application = new Zend_Application&#40;
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/cli.ini'
&#41;;

// а запускать MVC нафиг не надо, обойдемся пока обычным скриптом&#41;
//$application->bootstrap&#40;&#41;->run&#40;&#41;;


$user_id = $argv&#91;1&#93;; // аргумент из консоли
//$user_id = 1515;

$lfstrm = new Lfstrm_Smotreshka&#40;&#41;;
//Zend_Debug&#58;&#58;dump&#40;$lfstrm->test&#40;&#41;&#41;;

$config = new Zend_Config_Ini&#40;APPLICATION_PATH . '/configs/billing.ini', 'app'&#41;;
$urfa_admin = new Urfaphp_URFAClientAdmin&#40;
     $config->urfaphp->login ,
     $config->urfaphp->password,
     $config->urfaphp->host,
     $config->urfaphp->port, true, true&#41;;
//Zend_Debug&#58;&#58;dump&#40;$urfa_admin&#41;;

$user = $urfa_admin->rpcf_get_userinfo&#40;$user_id&#41;;
$account_id = $user&#91;'basic_account'&#93;;
//Zend_Debug&#58;&#58;dump&#40;$user&#41;;


$parameters = $user&#91;'parameters'&#93;; //читаем параметры
$lfstrm_param_id = $lfstrm->getBillingParamId&#40;&#41;; //получаем ID lfstrm из биллинга
$lfstrm_suspend_id = $lfstrm->getBillingParamSuspendId&#40;&#41;; //получаем ID lfstrm suspended из биллинга
$param_key = FALSE;
$param_key_susp = FALSE;
foreach &#40;$parameters as $key=>$param&#41; &#123; //ищем ключ массива для lfstrm ID
    if &#40;$param&#91;'id'&#93; == $lfstrm_param_id&#41; &#123;
        $param_key = $key;
        break;
    &#125;
&#125;

foreach &#40;$parameters as $key=>$param&#41; &#123; //ищем ключ массива для susp ID
      if &#40;$param&#91;'id'&#93; == $lfstrm_suspend_id&#41; &#123;
            $param_key_susp = $key;
            break;
          &#125;
        &#125;

if &#40;$param_key === FALSE&#41; &#123;
    die&#40;'Неверно указан ID параметра'&#41;;
&#125;

$lfstrm_id = $parameters&#91;$param_key&#93;&#91;'value'&#93;;
$lfstrm_subs = $lfstrm->getSubscriptions&#40;$lfstrm_id&#41;; //получаем подписки из смотрешки
if &#40;$lfstrm_subs&#91;'status'&#93; == 200&#41; &#123;
    foreach &#40;$lfstrm_subs&#91;'response'&#93; as $offer&#41;&#123; //преобразования в строку
        $lfstrm_subs_cut&#91;&#93;=$offer&#91;'id'&#93;;
        &#125;
    $lfstrm_susp_comm=implode&#40;',', $lfstrm_subs_cut&#41;;
    $parameters&#91;$param_key_susp&#93;&#91;'value'&#93; = $lfstrm_susp_comm;
    $urfa_result = $urfa_admin->rpcf_edit_user_new&#40;$user,$parameters&#41;; //добавляем в susp
    &#125;
$lfstrm->deleteSubscriptions&#40;$lfstrm_id&#41;; //удаляем подписки

Cвоими руками внес пару изменений, возможно они косячны :-)
Может что-то плохо скопировал или что-то забыл. Полный ЛК с данным функционалом: https://yadi.sk/d/Lr9D1rhoqvf79

kirush
Сообщения: 699
Зарегистрирован: Пт фев 04, 2005 13:58

Сообщение kirush »

Модуля для Webmoney нет ни у кого?

London
Сообщения: 4
Зарегистрирован: Пт мар 13, 2015 13:05

Сообщение London »

lknsfos, огромное спасибо за модуль взаимодействия со смотрёшкой, пришелся очень вовремя и кстати :)

Единственное, скрипт включения/отключения для rfw объединил в один файл с условиями ON/OFF и заметил, что если на пользователе несколько IP-адресов, при выключении suspend остаётся пустым, соответственно, все подписки слетают, т.к., rfw обращается несколько раз.
Пофиксил, добавил к условиям ON/OFF проверку $lfstrm_subs_susp, теперь всё ок :) Ещё раз спасибо :!:

mixserv
Сообщения: 4
Зарегистрирован: Пт окт 17, 2014 11:31

Сообщение mixserv »

lknsfos, а какая у вас версия биллинга?

London
Сообщения: 4
Зарегистрирован: Пт мар 13, 2015 13:05

Сообщение London »

taf писал(а):Добрый день!

Уважаемый darang, подскажите, пожалуйста, время жизни http-сессии как-то регулируется? Мы прикрутили к кабинету форму заявок, напрямую отправляемых в OTRS, но столкнулись с проблемой, что пока клиент излагает свои глубокомысленные замечания, сессия протухает, и заявка приходит от "аннона". Хотелось бы этот момент прправить.
Не подскажете решение проблемы? web_session_timeout, как я понял - не оно..

sunrise
Сообщения: 5
Зарегистрирован: Вт июл 12, 2016 17:26

Сообщение sunrise »

Добрый день!

Установил UTM5.3. Когда в биллинге в обещанном платеже ставлю галочку "До положительному баланса", то взять обещанный платеж нет возможности. Подскажите, кто-нибудь сталкивался с такой проблемой?

Аватара пользователя
Voronok
Сообщения: 116
Зарегистрирован: Пт мар 14, 2008 19:21

Сообщение Voronok »

Скажите, а есть пример, как делать запросы к базе данных?

kirush
Сообщения: 699
Зарегистрирован: Пт фев 04, 2005 13:58

Сообщение kirush »

lknsfos, спасибо огромное за интеграцию.
Подскажите пожалуйста, что в параметрах:

/application/configs/smotreshka.ini
;параметры периодической услуги в биллинге
periodic.tariff_link_id = 0
periodic.start_date = 0 ;"now()"
periodic.expire_date = 0 ;"max_time()"
periodic.policy_id = 2
periodic.unabon = 0
periodic.cost_coef = 1

А может уже и v2 есть?

valaykhal
Сообщения: 25
Зарегистрирован: Вт апр 19, 2011 23:02

Интеграция со смотрёшкой

Сообщение valaykhal »

Ребят тут выложили интеграцию со смотрёшкой для кабинета 5.3, а можно что то такое же но для кабинета 5.2 ?

Vovik
Сообщения: 162
Зарегистрирован: Пт янв 21, 2005 06:18
Откуда: Omsk city

Сообщение Vovik »

Существует интеграция для qiwi, яндекс деньги, сбербанк?

kirush
Сообщения: 699
Зарегистрирован: Пт фев 04, 2005 13:58

Сообщение kirush »

Яндекс, киви есть

Vovik
Сообщения: 162
Зарегистрирован: Пт янв 21, 2005 06:18
Откуда: Omsk city

Сообщение Vovik »

kirush писал(а):Яндекс, киви есть
А тыкнете пальцем... а то не вижу где это......

Или есть, но, например, только у вас?
Можете поделиться?

Еще не вижу кнопку к смене тарифа, хотя на скриншотах она есть....

kirush
Сообщения: 699
Зарегистрирован: Пт фев 04, 2005 13:58

Сообщение kirush »

Пишите в icq

kirush
Сообщения: 699
Зарегистрирован: Пт фев 04, 2005 13:58

Сообщение kirush »

Про интеграцию со Смотрешкой:
Наш программер помог усовершенствовать интеграцию выше, а именно:
Например Вы часть пакетов продаете с посуточной тарификацией, а часть с помесячной. Исправляем так:

Indexcontroller.php:

Код: Выделить всё

  foreach &#40;$periods&#91;'discount_periods'&#93; as $period&#41; &#123; 
                              if &#40;$period&#91;'static_id'&#93;==$period_static_id&#41; &#123; 
                                $discount_period_id = $period&#91;'discount_period_id'&#93;; 
                                break; 
                              &#125; 
                            &#125; 
меняем на:

Код: Выделить всё


                    $period_static_id_array = $lfstrm -> getBillingPeriodStaticIdArray&#40;&#41;;
                        foreach&#40;$periods&#91;'discount_periods'&#93; as $period&#41; &#123;
                            foreach&#40;$period_static_id_array as $period_from_config&#41; &#123;
                            if &#40;$period&#91;'static_id'&#93; == $period_from_config&#41; &#123;
                        $discount_period_id = $period&#91;'discount_period_id'&#93;;
                            break 2;
                            &#125;
                        &#125;
                        &#125;

Smotreshka.php:
Добавляем после аналогичных функций:

Код: Выделить всё

  public function getBillingPeriodStaticIdArray&#40;&#41;&#123;
    return $this->config->period_static_id_array->toArray&#40;&#41;;
  &#125;
Теперь в smotreshka.ini:

Код: Выделить всё

;static_id расчетного периода в биллинге
;period_static_id = 586

period_static_id_array&#91;483&#93;= 586
period_static_id_array&#91;484&#93;= 586
period_static_id_array&#91;485&#93;= 586
period_static_id_array&#91;486&#93;= 586
period_static_id_array&#91;487&#93;= 92
period_static_id_array&#91;488&#93;= 92
period_static_id_array&#91;489&#93;= 92
period_static_id_array&#91;490&#93;= 92
period_static_id_array&#91;491&#93;= 92
period_static_id_array&#91;492&#93;= 92
где первый [ ] это ID пакета,
вторая цифра, это ID расчетного периода.

Может кто предложить интеграцию Смотрешки в тарифы с bundle пакетами?

lovestocode
Сообщения: 8
Зарегистрирован: Вт дек 01, 2015 14:12

Qiwi_payment_module

Сообщение lovestocode »

у ЛК модуль платежей на киви был написан под XML который устарел. Переписал под REST + проверка по хрону. Для установки
1) в даблицу киви добавить столбик bonus_cents double(11,2) - нужна дня расчета бонусов, до этого сумма платежа и бонус суммировались и скидывались в 1ну кучу
2) прописать путь к конфигу(предполагается что будет 1 конфиг)
3) в нем по протопипу config.ini записать shop_id, key, rest_id, transaction_period_in_hours, path_to_log_file_qiwi ну и бонусы - пример записи и коментарии есть в ини файле, прописывать по стандарным правилам написания конфигов
Если будут вопросы пишите либо сбда либо сразу на гит
ссылка на гит https://github.com/rasskazovaleksey/Qiwi_payment_module

Ответить