Andrei Posted November 28, 2015 · Report post Ковыряю смотрёшкин API Коллеги, может быть подскажете что я делаю не так. API прилагаю Пытаюсь создать пользователя. #!/usr/bin/php<?php$api_string_url = "http://xxxxx.test.lfstrm.tv/v1/";function UserCreate($username, $email) {global $api_string_url;$add_url = "user";$body = array('email'=>$email,'username'=>$username,'info'=>"",'purchases'=>"");$opts = array('http' => array( 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => json_encode($body), 'timeout' => 60 ) );$context = stream_context_create($opts);$url = $api_string_url.$add_url;$result = file_get_contents($url, false, $context);echo $result;}UserCreate("var_test1", "var@atlint.ru");?> Получаю в ответ file_get_contents(http://xxxxx.test.lfstrm.tv/v1/user): failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden Подумал - ОК, начну с более простого. Зашел через web-интерфейс, завел пользователя вручную. id пользователя получился - 56587b1f098f6b6f4f000006 Пробую получить инфу про него: function GetSubscription($user_id) {global $api_string_url;$add_url = $user_id."/subscriptions";$body = array('id'=>$user_id);$opts = array('http' => array( 'method' => 'GET', 'content' => json_encode($body), 'timeout' => 60 ) );$context = stream_context_create($opts);$url = $api_string_url.$add_url;$result = file_get_contents($url, false, $context);echo $result;}GetSubscription("56587b1f098f6b6f4f000006"); В ответ: PHP Notice: file_get_contents(): Content-type not specified assuming application/x-www-form-urlencoded in /home/andrey/test.php on line 52 PHP Warning: file_get_contents(http://xxxxx.test.lfstrm.tv/v1/56587b1f098f6b6f4f000006/subscriptions): failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden Первый раз пишу подобное, может туплю в чем-то простом? Попробовал просто проверить через web-интерфейс: http://xxxxx.test.lfstrm.tv/v1/56587b1f098f6b6f4f000006/user {"error": "access denied"} http://xxxxx.test.lfstrm.tv/v1/56587b1f098f6b6f4f000006/subscriptions {"error": "access denied"} API v3.pdf API v3.pdf Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
nphs Posted November 28, 2015 · Report post А через сокеты если? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Andrei Posted November 28, 2015 · Report post А через сокеты если? Не знаю как это Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
nphs Posted November 28, 2015 · Report post http://digitorum.ru/blog/2013/08/01/3-sposoba-otpravit-POST-zapros-na-php.phtml Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Andrei Posted November 29, 2015 · Report post Там один из способов - как раз тот, что я описал выше. И я так понимаю, что они равноценные. Значит будем пинать саппорт смотрешки в понедельник. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Negator Posted November 29, 2015 · Report post метод не post а get будьте внимательны. Еще у них привязка по ip. отсюда access denied. завтра могу выложить рабочий php код. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Andrei Posted November 29, 2015 · Report post метод не post а get будьте внимательны. Да не, в API и GET, и POST - для разных операций разные методы, и вроде я нигде не промахнулся. :) Еще у них привязка по ip. отсюда access denied. Утверждается, что открыто для моего IP. Хотя надо будет еще раз у них уточнить, т.к. я поначалу получал от них "Bad Gateway" и не понимал почему. Потом выяснилось, что у них легла платформа. Может и сейчас у них что-то "слетело" завтра могу выложить рабочий php код. Буду благодарен. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Andrei Posted November 30, 2015 · Report post Еще у них привязка по ip. отсюда access denied. В общем что-то они там опять накосячили, теперь с этой настройкой. А скрипты вышеприведенные мной рабочие - проверил после того как в смотрешке поправили настройки платформы. завтра могу выложить рабочий php код. Интеграция с биллингом делалась? Сама смотрешка быстро слилась со своего обещания в презентации "Мы проводим интеграцию платформы с вашим биллингом". Предоставил API, а все что дальше - наш головняк. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Dr. Fred Posted November 30, 2015 · Report post То, что есть у Смотрешки - API сложно назвать, какая-то поделка, а не АПИ. Мы просто кучу граблей при интеграции вставляли, чтобы все нормально работало и так, как нам надо. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Andrei Posted December 1, 2015 · Report post Опытом бега по граблям не поделитесь? Чтоб нам все заново не проходить пробегать. :) Пока застрял на том, что при попытке создать/удалить пользователя у них через API получаю в ответ PHP Warning: file_get_contents(http://xxxxx.test.lfstrm.tv/v1/user): failed to open stream: HTTP request failed! HTTP/1.1 500 Internal Server Error Может опять они что-то не донастроили, например дали права только на чтение. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
KaraVan Posted April 7, 2016 · Report post То, что есть у Смотрешки - API сложно назвать, какая-то поделка, а не АПИ. Мы просто кучу граблей при интеграции вставляли, чтобы все нормально работало и так, как нам надо. А как вы приостановление сервиса реализовали? Смотрешка предлагает каждый раз при блокировке отписывать юзера от пакетов и потом подписывать по-новой. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
MaLblsH Posted July 11, 2016 · Report post То, что есть у Смотрешки - API сложно назвать, какая-то поделка, а не АПИ. Мы просто кучу граблей при интеграции вставляли, чтобы все нормально работало и так, как нам надо. А как вы приостановление сервиса реализовали? Смотрешка предлагает каждый раз при блокировке отписывать юзера от пакетов и потом подписывать по-новой. Тоже интересует данный момент. Ибо в API не нашёл функционала по приостановлению услуг. Приостанавливать списание в биллинге Агента нет смысла - пока услуги висят на Абоненте, Агенту будут идти начисление. Остаётся только реализовывать кнопку "Временно приостановить услугу" в личном кабинете, по которой производить реальную отписку от пакетов данного клиента, а себе куда-то в базу записывать эти пакеты. А по нажатию на кнопку "Возобновить" подключать ранее отключённые пакеты, делая т.о. видимость приостановки услуг для клиента. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
himikrzn Posted July 11, 2016 · Report post Тоже интересует данный момент. Ибо в API не нашёл функционала по приостановлению услуг. Приостанавливать списание в биллинге Агента нет смысла - пока услуги висят на Абоненте, Агенту будут идти начисление. Остаётся только реализовывать кнопку "Временно приостановить услугу" в личном кабинете, по которой производить реальную отписку от пакетов данного клиента, а себе куда-то в базу записывать эти пакеты. А по нажатию на кнопку "Возобновить" подключать ранее отключённые пакеты, делая т.о. видимость приостановки услуг для клиента. денег на счету недостаточно - учетная запись заблокирована - в смотрёшку скрптом отправляется отписка от всех пакетов. клиент денег положил - учетная запись разблокировалась - пакеты в смотрёшки восстановились. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Andrei Posted July 12, 2016 · Report post денег на счету недостаточно - учетная запись заблокирована - в смотрёшку скрптом отправляется отписка от всех пакетов. клиент денег положил - учетная запись разблокировалась - пакеты в смотрёшки восстановились. Если в смотрешке клиент отписался от всех пакетов, то как они потом восстановятся? Смотрешка помнит что было подписано? ИМХО смотрешка не различает - отписался клиент от пакетов добровольно или его отписали принудительно из-за отсутствия денег Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
himikrzn Posted July 12, 2016 · Report post Если в смотрешке клиент отписался от всех пакетов, то как они потом восстановятся? Смотрешка помнит что было подписано? ИМХО смотрешка не различает - отписался клиент от пакетов добровольно или его отписали принудительно из-за отсутствия денег ну в биллинге же есть эти пакеты, они тупо заблокированы. при блокировки биллинг присылает отключение их в смотрёшку, но в биллинге они остаются. при оплате они разблокируются, и пакеты снова "прилетают" в смотрёшку. хз как у вас, но я такое проверял, у меня пакеты востанавливались. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
mrlexus Posted July 12, 2016 · Report post Коллеги, кто-то делал отслеживание и обработку события отвязки оборудования от УЗ? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Negator Posted July 12, 2016 · Report post Тоже интересует данный момент. Ибо в API не нашёл функционала по приостановлению услуг. Приостанавливать списание в биллинге Агента нет смысла - пока услуги висят на Абоненте, Агенту будут идти начисление. Остаётся только реализовывать кнопку "Временно приостановить услугу" в личном кабинете, по которой производить реальную отписку от пакетов данного клиента, а себе куда-то в базу записывать эти пакеты. А по нажатию на кнопку "Возобновить" подключать ранее отключённые пакеты, делая т.о. видимость приостановки услуг для клиента. денег на счету недостаточно - учетная запись заблокирована - в смотрёшку скрптом отправляется отписка от всех пакетов. клиент денег положил - учетная запись разблокировалась - пакеты в смотрёшки восстановились. Да, мы так и делаем. Не очень удобно конечно, но работает. Вообще желательно коллективно допинать Смотрешку чтобы реализовали приостановку услуг. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
himikrzn Posted July 12, 2016 · Report post Тоже интересует данный момент. Ибо в API не нашёл функционала по приостановлению услуг. Приостанавливать списание в биллинге Агента нет смысла - пока услуги висят на Абоненте, Агенту будут идти начисление. Остаётся только реализовывать кнопку "Временно приостановить услугу" в личном кабинете, по которой производить реальную отписку от пакетов данного клиента, а себе куда-то в базу записывать эти пакеты. А по нажатию на кнопку "Возобновить" подключать ранее отключённые пакеты, делая т.о. видимость приостановки услуг для клиента. денег на счету недостаточно - учетная запись заблокирована - в смотрёшку скрптом отправляется отписка от всех пакетов. клиент денег положил - учетная запись разблокировалась - пакеты в смотрёшки восстановились. Да, мы так и делаем. Не очень удобно конечно, но работает. Вообще желательно коллективно допинать Смотрешку чтобы реализовали приостановку услуг. связь односторонняя биллинг -> смотрешка если и сделают двухстороннюю связь, то очень не скоро в принципе, я проблем не вижу, биллинг занимается списаниями, балансом и прочим. такой односторонней связи более чем достаточно. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Gubanov Posted July 16, 2016 · Report post Коллеги, есть пример скрипта интеграции со смотрешкой? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Wingman Posted July 16, 2016 · Report post Коллеги, есть пример скрипта интеграции со смотрешкой? <?php declare(strict_types = 1); /** * Created by * User: wingman * Date: 14.03.2016 * Time: 16:50 * * Класс для взаимодействия с API Смотрёшки. * Синглтон (средствами фасадов). */ namespace Iphome\Smotreshka; use Illuminate\Support\MessageBag; use Monolog\Handler\StreamHandler; use Monolog\Logger; use Unirest\Request; class SmApi { private $url; const REQ_TYPE_GET = 1; const REQ_TYPE_POST = 2; const REQ_TYPE_HEAD = 3; const REQ_TYPE_DELETE = 4; private $log; function __construct() { $this->url = \Config::get('smotreshka.api_url'); $this->log = new Logger('SM_LOG'); $this->log->pushHandler(new StreamHandler(storage_path('/logs/smotreshka/api.log'), Logger::DEBUG)); } /** * Установка тестового окружения: API URL заменяется на test url */ public function setTestEnv() { $this->url = \Config::get('smotreshka.test_url'); } /** * Список юзеров в БД смотрешки * @return MessageBag|object */ public function users() { return $this->request(self::REQ_TYPE_GET, 'v1/user'); } /** * Подписка абонента на пакет каналов * @param $user_id * @param $packet_id * @return array|MessageBag|mixed */ public function subscribe( $user_id, $packet_id ) { $body = [ 'id' => $packet_id, 'valid' => true ]; return $this->request(self::REQ_TYPE_POST, 'v1/'.$user_id.'/subscriptions', $body ); } /** * Удаление ВСЕХ подписок * @param $user_id * @return MessageBag|object */ public function unsubscribeAll( $user_id ) { return $this->request(self::REQ_TYPE_DELETE, 'v1/'.$user_id.'/subscriptions'); } /** * Удаление юзера из смотрёшки * @param $user_id * @return MessageBag|object */ public function userdel( $user_id ) { return $this->request(self::REQ_TYPE_DELETE, 'v1/'.$user_id.'/user'); } /** * Отписка от пакета каналов * * @param $user_id * @param $packet_id * @return array|MessageBag|mixed */ public function unsubscribe( $user_id, $packet_id ) { $body = [ 'id' => $packet_id, 'valid' => false ]; return $this->request(self::REQ_TYPE_POST, 'v1/'.$user_id.'/subscriptions', $body ); } /** * Все пакеты * @return array|MessageBag|mixed */ public function getOffers() { return $this->request(self::REQ_TYPE_GET, 'v1/offers'); } /** * Получение подписок юзера * @param $user_id * @return array|MessageBag|mixed */ public function getSubscriptions( $user_id ) { return $this->request(self::REQ_TYPE_GET, 'v1/'.$user_id.'/subscriptions'); } /** * Установка пароля юзеру * * @param $user_id * @param $password * @return MessageBag|object */ public function setPassword( $user_id, $password ) { $body = [ 'password' => $password ]; return $this->request(self::REQ_TYPE_POST, 'v1/'.$user_id.'/reset-password', $body); } /** * Получение пользователя * @param $user_id * @return array|MessageBag|mixed */ public function getUser($user_id) { return $this->request(self::REQ_TYPE_GET, 'v1/'.$user_id.'/user'); } #public function addUser( string $username, string $email, string $password, array $purchases = [ 'type' => 'array', 'items' => [] ] ) public function addUser(string $username, string $password, string $email, $info = NULL, array $purchases = ['',]) { $body = [ 'email' => $email, 'password' => $password, 'username' => $username, 'info' => $info # 'purchases' => $purchases ]; return $this->request(self::REQ_TYPE_POST, 'v1/user', $body); } /** * Отправка запроса и обработка ошибок * * @param int $method * @param string $url * @param string|NULL $body * @return MessageBag|object */ private function request(int $method, string $url, array $body = []) { $body = json_encode($body); $result_url = $this->url . $url; $result = NULL; try { switch ($method) { case self::REQ_TYPE_GET: $result = Request::get($result_url); break; case self::REQ_TYPE_POST: $result = Request::post($result_url, NULL, $body); break; case self::REQ_TYPE_DELETE: $result = Request::delete($result_url, NULL, $body); break; } } catch (\Exception $e) { # Непредвиденная ошибка, не обработанная API смотрёшки: могут быть, например, сетевые проблемы и т.д. $this->log->addCritical('Critical error while processing: "' . $method . '": "' . $url . '": ' . ":\n" . $e->getMessage()); return new MessageBag([$e->getMessage()]); } # Должен быть объектом: if (!is_object($result)) { $this->log->addCritical('Returned result is not object: "' . $method . '": "' . $url . '": ' . ":\n" . print_r($result, true)); return new MessageBag(['Получен неверный ответ от сервера: ответ не является объектом.']); } # Должен быть код if (!isset($result->code)) { $this->log->addCritical('No return code in result: "' . $method . '": "' . $url . '": ' . ":\n" . print_r($result, true)); return new MessageBag(['Получен неверный ответ от сервера: отсутствует код ответа.']); } # Должно быть тело if (!isset($result->body)) { $this->log->addCritical('No body in result: "' . $method . '": "' . $url . '": ' . ":\n" . print_r($result, true)); return new MessageBag(['Получен неверный ответ от сервера: отсутствует тело ответа.']); } ######################### # Если код != 200 if ($result->code != 200) { $error = "Отсутствует описание ошибки в ответе сервера!\n" . 'Код ответа от сервиса: ' . $result->code . "\nТело ответа: " . $result->raw_body . "\n"; if (isset($result->body->error)) { $error = "Код ответа сервиса: " . $result->code . "\nОшибка: " . $result->body->error . "\n"; } $this->log->addError($result->code . ": " . $error); $this->log->addError("Method: ".$method."; url: ".$url."; body: ".print_r($body,true)); return new MessageBag([$result->code . ": " . $error]); } # body должно быть массивом либо объектом if (!is_array($result->body) && !is_object($result->body)) { $this->log->addCritical('getOffers result is not an array nor object.' . "\n" . print_r($result, true)); return new MessageBag(['В результате запроса получен не объект.']); } return $result->body; } } Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
himikrzn Posted July 18, 2016 · Report post Коллеги, есть пример скрипта интеграции со смотрешкой? тыц там за доработанный вариант 2,5к просили. заплатил, выслали, все работает(13я версия) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
SyJet Posted July 18, 2016 · Report post Я за 10 тр внедрил Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Domingo Posted August 31, 2016 (edited) · Report post Собрал скрипты по смотрешке и IP-тв тут PS Ссылка отобразилась криво ... Edited August 31, 2016 by Domingo Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
lidia Posted September 13, 2016 · Report post Выпущен официальный поддерживаемый модуль интеграции АСР LANBilling с сервисом Смотрёшка. Внедрение модуля очень простое. Необходимо лишь установить пакет, прописать параметры доступа к сервису Смотёшка и настроить тарифный план. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Dmitry P. Posted September 13, 2016 · Report post Собрал скрипты по смотрешке и IP-тв тут PS Ссылка отобразилась криво ... Это как раз оригинальный скрипт на python-е, который ранее и предлагали в Смотрёшке. Однако, разработчик данного скрипта его не поддерживает, и лично мне не удалось его завести в продакшн на самой первой интеграции. Поэтому было принято решение разрабатывать своё решение, которое удалось популяризовать. http://forum.nag.ru/forum/index.php?showtopic=112732&st=0&p=1234373entry1234373 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...