Показано с 1 по 10 из 15

Тема: Подключение к Премьере через PHP. Возвращает ошибку 10061

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Новичок
    Регистрация
    27.12.2012
    Адрес
    Волгоград
    Сообщений
    16
    Поблагодарил(а)
    0
    Благодарностей: 0 (сообщений: 0)

    Question Подключение к Премьере через PHP. Возвращает ошибку 10061

    Пытаюсь подключить к Премьере согласно документации (в целях конспирации ip и port заменил нулями):
    PHP код:
    $IP "00.00.0.000";
    $port 0000;

    $arError = Array();
            
    $fp fsockopen($IP$port$arError["N"], $arError["TEXT"], 7);
            
    if (!
    $fp) {
        return 
    "Connection failed. Error #".$arError["N"].": ".$arError["TEXT"];

    Возвращает:
    Код:
    Connection failed. Error #10061: Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.
    В чем может быть проблема?

    P.S. http://www.bravica.net/ru/net-port.html - показывает, что указываемый порт открыт у данного IP
    P.P.S. Скрипт запускаю на локальной машине в Denwer. Интернет доступен
    Последний раз редактировалось Dok; 27.12.2012 в 17:36. Причина: Проверил net-port

  2. #2
    Разбирающийся
    Регистрация
    18.10.2012
    Адрес
    Новосибирск, Омск
    Сообщений
    5,362
    Поблагодарил(а)
    188
    Благодарностей: 461 (сообщений: 364)
    Попробуйте, для начала, через sockettest.exe со своей машины выполнить запрос на нужный IP и порт. Например простейший GetHalls. Если вам вернется какая то XML-ка, то это ответил шлюз, если не вернется ничего - значит либо не тот IP, либо не тот порт, либо что то со стороны сервера вас не пускает (Антивирь, файрвол, роутер)

    Та ошибка которая у вас есть, говорит о том что на вызываемой стороне никто не отозвался.

  3. #3
    Новичок
    Регистрация
    27.12.2012
    Адрес
    Волгоград
    Сообщений
    16
    Поблагодарил(а)
    0
    Благодарностей: 0 (сообщений: 0)
    Цитата Сообщение от sibgaba Посмотреть сообщение
    Попробуйте, для начала, через sockettest.exe со своей машины выполнить запрос на нужный IP и порт. Например простейший GetHalls. Если вам вернется какая то XML-ка, то это ответил шлюз, если не вернется ничего - значит либо не тот IP, либо не тот порт, либо что то со стороны сервера вас не пускает (Антивирь, файрвол, роутер)

    Та ошибка которая у вас есть, говорит о том что на вызываемой стороне никто не отозвался.
    Спасибо за скорый ответ! Однако, найти такую программу совсем не получилось. Есть возможность загрузить её на форум или дать ссылку?

  4. #4
    Разбирающийся
    Регистрация
    18.10.2012
    Адрес
    Новосибирск, Омск
    Сообщений
    5,362
    Поблагодарил(а)
    188
    Благодарностей: 461 (сообщений: 364)

  5. #5
    Новичок
    Регистрация
    27.12.2012
    Адрес
    Волгоград
    Сообщений
    16
    Поблагодарил(а)
    0
    Благодарностей: 0 (сообщений: 0)
    Благодарю! Порт действительно открыт, и подключиться к нему не удавалось только с денвера. На реальном сервере происходит подключение.
    PHP код:
        function getXML($ip, $port, $request, $in1251 = false) {        // Функция отправляет запрос к Премьере
            $arError = Array();
            
            $fp = fsockopen($ip, $port, $arError["N"], $arError["TEXT"], 7);
            
            if (!$fp) {
                return "Connection failed. Error #".$arError["N"].": ".$arError["TEXT"];
            } else {
                fwrite($fp, $request);
                $result    = '';
                while (!feof($fp)) {
                    $temp = fread($fp, 256);
                    $result .= $temp;
                }
                fclose($fp);
                
                $result = substr($result, strpos($result, "<?xml version='1.0'"));
                if (
    $in1251 and $result) {
                    
    $result = preg_replace("/<PN>.*?<\/PN>/", "<PN></PN>", $result);
                    
                    return 
    $result;
                } elseif(
    $result) {
                    
    $result = str_replace("<?xml version='1.0' encoding='CP-866' standalone='yes'?>", "<?xml version='1.0' encoding='windows-1251' standalone='yes'?>", $result);
                    $result = preg_replace("/<PN>.*?<\/PN>/", "<PN></PN>", $result);
                    $result = iconv("cp866", "windows-1251", $result);

                    return $result;
                }
                
                return "Error";
            }
        }
    При передаче правильных IP и Port (по крайней мере этот порт у машины с указанным IP открыт) функция возвращает Error.
    Значит соединиться удалось... может я не верно составил формат запроса? Проверьте, поажлуйста
    PHP код:
    echo Premiere::getXML(
    "255.255.255.255",
    9194,
    "0000000118&ServiceID=548387668&QueryCode=GetLevelsPlans&Halls=1&ListType=Image&Encoding=Windows-1251&Version=3&Expect="); 
    P.S.
    На такой запрос возвращается Error:
    Код:
    "0000000046&QueryCode=1&CardCode=1&CardPIN=1111"
    А на такой "QueryCode=1&CardCode=1&CardPIN=1111":
    Код:
    0000000183&ErrorCEE-008
    На такой "0000000035&QueryCode=1&CardCode=1&CardPIN=111 1":
    Код:
    0000000205&ErrorCEE-063
    На такой "0000000045&QueryCode=1&CardCode=1&CardPIN=1111&Ve rsion=3":
    Код:
    0000000212&ErrorCEE-072
    На такой "0000000065&QueryCode=1&CardCode=1&CardPIN=1111&Ve rsion=3&ServiceID=548387668":
    Код:
    0000000205&ErrorCEE-079
    Я что-то неправильно делаю?

    P.P.S. Наверное через все ошибки пройти придется)))
    Последний раз редактировалось Dok; 27.12.2012 в 21:19.

  6. #6
    Разбирающийся
    Регистрация
    18.10.2012
    Адрес
    Новосибирск, Омск
    Сообщений
    5,362
    Поблагодарил(а)
    188
    Благодарностей: 461 (сообщений: 364)
    Во первых: Какая версия Премьеры?
    До 3,16 включительно конструкция
    Код:
    while (!feof($fp)) {
                    $temp = fread($fp, 256);
                    $result .= $temp;
                }
    Работала нормально.
    На версиях выше 3,16 она не работала т.к. внешний протокол перестал слать feof в конце ответа. В этом случае лучше пользовать более строгий код типа вот такого:
    Код:
    $n = fgets($fp,11);         
    $s = fgets($fp,$n+1);
    Т.е. читать не пока конец потока, а ровно столько байт, сколько в ответе. По формату ответа первые 10 байт как раз содержат длину пакета. Более подробно обсуждалось тут http://www.carbis.ru/forum/ucs-Премь...-на-php.html

    Что касается ошибок № 8 и 63 сейчас доки под рукой нету. Завтра посмотрю их расшифровку.

    Далее не совсем понял вот такой момент: Если через СокетТест сделать запрос GetHalls то что он показывает? Я всегда тестирую через GetHalls т.к. он не требует Login и либо вернет перечень залов (значит external на стороне сервера настроен нормально, порты прокинуты и если что то не работает то надо смотреть php код) либо вернет ошибку и тогда php тут не причем и крутить надо external.

    ---------- Добавлено в 19:39 ---------- Предыдущее сообщение было размещено в 19:29 ----------

    Чета вы в запросах хрень какую то шлете...
    Я так понимаю что вы не инсталятор, а разработчик сайта. Верно?

    В любом случае дока по запросам внешнего протокола у вас есть?

    По формату протокола обмена, в любом запросе, ВСЕГДА должен присутствовать ServiceID. И он должен всегда идти первым (вот тут могу ошибаться, но кажется так).

    Далее: параметр QueryCode не должен принимать числовое значение. Он должен содержать имя запроса который вы выполняете. Например GetHalls

    Попробуйте вот такой запрос прогнать через свой скрипт:
    0000000108&ServiceID=548387668&QueryCode=GetHalls& CardCode=&DateList=&Theatres=&Encoding=Windows-1251&Version=3&Expect=

    Должна вернуться xml-ка с перечнем залов, для которых разрешены внешние продажи.

    Прогоните тот же запрос с помощью SocketTest, только допишите правильный ServiceID
    Последний раз редактировалось sibgaba; 28.12.2012 в 12:57.

Похожие темы

  1. Оплата картами в Премьере
    от Paanur в разделе UCS-Премьера
    Ответов: 14
    Последнее сообщение: 18.09.2012, 10:43
  2. при списании расхода выдает ошибку 46
    от Grey888 в разделе SH: Технические вопросы
    Ответов: 3
    Последнее сообщение: 14.10.2011, 17:42
  3. Ошибка 10061 при подключении к серверу
    от Макс в разделе SH: Технические вопросы
    Ответов: 3
    Последнее сообщение: 28.09.2009, 14:00
  4. importRK выдает такую ошибку...
    от Barsss в разделе Импорт в Shouse из R-Keeper 6
    Ответов: 3
    Последнее сообщение: 28.08.2009, 14:37

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •