Andrei Posted November 28, 2015 Ковыряю смотрёшкин 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 А через сокеты если? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Andrei Posted November 28, 2015 А через сокеты если? Не знаю как это Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
nphs Posted November 28, 2015 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 Там один из способов - как раз тот, что я описал выше. И я так понимаю, что они равноценные. Значит будем пинать саппорт смотрешки в понедельник. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Negator Posted November 29, 2015 метод не 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 метод не 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 Еще у них привязка по 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 То, что есть у Смотрешки - API сложно назвать, какая-то поделка, а не АПИ. Мы просто кучу граблей при интеграции вставляли, чтобы все нормально работало и так, как нам надо. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Andrei Posted December 1, 2015 Опытом бега по граблям не поделитесь? Чтоб нам все заново не проходить пробегать. :) Пока застрял на том, что при попытке создать/удалить пользователя у них через 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 То, что есть у Смотрешки - API сложно назвать, какая-то поделка, а не АПИ. Мы просто кучу граблей при интеграции вставляли, чтобы все нормально работало и так, как нам надо. А как вы приостановление сервиса реализовали? Смотрешка предлагает каждый раз при блокировке отписывать юзера от пакетов и потом подписывать по-новой. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
MaLblsH Posted July 11, 2016 То, что есть у Смотрешки - API сложно назвать, какая-то поделка, а не АПИ. Мы просто кучу граблей при интеграции вставляли, чтобы все нормально работало и так, как нам надо. А как вы приостановление сервиса реализовали? Смотрешка предлагает каждый раз при блокировке отписывать юзера от пакетов и потом подписывать по-новой. Тоже интересует данный момент. Ибо в API не нашёл функционала по приостановлению услуг. Приостанавливать списание в биллинге Агента нет смысла - пока услуги висят на Абоненте, Агенту будут идти начисление. Остаётся только реализовывать кнопку "Временно приостановить услугу" в личном кабинете, по которой производить реальную отписку от пакетов данного клиента, а себе куда-то в базу записывать эти пакеты. А по нажатию на кнопку "Возобновить" подключать ранее отключённые пакеты, делая т.о. видимость приостановки услуг для клиента. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
himikrzn Posted July 11, 2016 Тоже интересует данный момент. Ибо в API не нашёл функционала по приостановлению услуг. Приостанавливать списание в биллинге Агента нет смысла - пока услуги висят на Абоненте, Агенту будут идти начисление. Остаётся только реализовывать кнопку "Временно приостановить услугу" в личном кабинете, по которой производить реальную отписку от пакетов данного клиента, а себе куда-то в базу записывать эти пакеты. А по нажатию на кнопку "Возобновить" подключать ранее отключённые пакеты, делая т.о. видимость приостановки услуг для клиента. денег на счету недостаточно - учетная запись заблокирована - в смотрёшку скрптом отправляется отписка от всех пакетов. клиент денег положил - учетная запись разблокировалась - пакеты в смотрёшки восстановились. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Andrei Posted July 12, 2016 денег на счету недостаточно - учетная запись заблокирована - в смотрёшку скрптом отправляется отписка от всех пакетов. клиент денег положил - учетная запись разблокировалась - пакеты в смотрёшки восстановились. Если в смотрешке клиент отписался от всех пакетов, то как они потом восстановятся? Смотрешка помнит что было подписано? ИМХО смотрешка не различает - отписался клиент от пакетов добровольно или его отписали принудительно из-за отсутствия денег Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
himikrzn Posted July 12, 2016 Если в смотрешке клиент отписался от всех пакетов, то как они потом восстановятся? Смотрешка помнит что было подписано? ИМХО смотрешка не различает - отписался клиент от пакетов добровольно или его отписали принудительно из-за отсутствия денег ну в биллинге же есть эти пакеты, они тупо заблокированы. при блокировки биллинг присылает отключение их в смотрёшку, но в биллинге они остаются. при оплате они разблокируются, и пакеты снова "прилетают" в смотрёшку. хз как у вас, но я такое проверял, у меня пакеты востанавливались. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
mrlexus Posted July 12, 2016 Коллеги, кто-то делал отслеживание и обработку события отвязки оборудования от УЗ? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Negator Posted July 12, 2016 Тоже интересует данный момент. Ибо в API не нашёл функционала по приостановлению услуг. Приостанавливать списание в биллинге Агента нет смысла - пока услуги висят на Абоненте, Агенту будут идти начисление. Остаётся только реализовывать кнопку "Временно приостановить услугу" в личном кабинете, по которой производить реальную отписку от пакетов данного клиента, а себе куда-то в базу записывать эти пакеты. А по нажатию на кнопку "Возобновить" подключать ранее отключённые пакеты, делая т.о. видимость приостановки услуг для клиента. денег на счету недостаточно - учетная запись заблокирована - в смотрёшку скрптом отправляется отписка от всех пакетов. клиент денег положил - учетная запись разблокировалась - пакеты в смотрёшки восстановились. Да, мы так и делаем. Не очень удобно конечно, но работает. Вообще желательно коллективно допинать Смотрешку чтобы реализовали приостановку услуг. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
himikrzn Posted July 12, 2016 Тоже интересует данный момент. Ибо в API не нашёл функционала по приостановлению услуг. Приостанавливать списание в биллинге Агента нет смысла - пока услуги висят на Абоненте, Агенту будут идти начисление. Остаётся только реализовывать кнопку "Временно приостановить услугу" в личном кабинете, по которой производить реальную отписку от пакетов данного клиента, а себе куда-то в базу записывать эти пакеты. А по нажатию на кнопку "Возобновить" подключать ранее отключённые пакеты, делая т.о. видимость приостановки услуг для клиента. денег на счету недостаточно - учетная запись заблокирована - в смотрёшку скрптом отправляется отписка от всех пакетов. клиент денег положил - учетная запись разблокировалась - пакеты в смотрёшки восстановились. Да, мы так и делаем. Не очень удобно конечно, но работает. Вообще желательно коллективно допинать Смотрешку чтобы реализовали приостановку услуг. связь односторонняя биллинг -> смотрешка если и сделают двухстороннюю связь, то очень не скоро в принципе, я проблем не вижу, биллинг занимается списаниями, балансом и прочим. такой односторонней связи более чем достаточно. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Gubanov Posted July 16, 2016 Коллеги, есть пример скрипта интеграции со смотрешкой? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Wingman Posted July 16, 2016 Коллеги, есть пример скрипта интеграции со смотрешкой? <?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 Коллеги, есть пример скрипта интеграции со смотрешкой? тыц там за доработанный вариант 2,5к просили. заплатил, выслали, все работает(13я версия) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
SyJet Posted July 18, 2016 Я за 10 тр внедрил Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Domingo Posted August 31, 2016 (edited) Собрал скрипты по смотрешке и 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 Выпущен официальный поддерживаемый модуль интеграции АСР LANBilling с сервисом Смотрёшка. Внедрение модуля очень простое. Необходимо лишь установить пакет, прописать параметры доступа к сервису Смотёшка и настроить тарифный план. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Dmitry P. Posted September 13, 2016 Собрал скрипты по смотрешке и 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...