PDA

Просмотр полной версии : Связь UCS-премьера (внешний протокол) с сайтом на php



ditas
10.10.2011, 16:17
Здравствуйте.

Такая задача:
есть сайт на php, есть UCS-премьера (внешний протокол).
В настройках внешнего протокола разрешены запросы с ip сервера, где расположен сайт. Связь с сервером есть, все пингуется. НО, при запросе из адресной строки браузера вида:
http://айпишник:порт/?0000000100&ServiceID=1234567890&QueryCode=Login&CardCode=1&CardPIN=1111&Encoding=Windows-1251&Version=3&Expect=
получаю ответ от сервера:
'Сделан не верный запрос'.

В логах запрос оказывается пустой:
10.10.2011 15:13:59.956> Accept: TCPSocket=224
10.10.2011 15:14:00.050> Receive: TCPSocket=704
10.10.2011 15:14:00.050> TClientList.FindBySocket(704)
10.10.2011 15:14:00.050> i=1 Socket=704
10.10.2011 15:14:00.050> [№49 192.168.200.2 704:52596 2] Receive Start
10.10.2011 15:14:00.065> Close: TCPSocket=704
10.10.2011 15:14:00.065> TClientList.FindBySocket(704)
10.10.2011 15:14:00.065> i=1 Socket=704
10.10.2011 15:14:00.065> [№49 192.168.200.2 704:52596 6] Close
10.10.2011 15:14:00.065> [№49 192.168.200.2 704:52596 6] Close: Query=
10.10.2011 15:14:00.065> [№49 192.168.200.2 704:52596 6] Close: Time=0:00.094 ReadBytes=470 WriteBytes=193
10.10.2011 15:14:06.065> [№48 192.168.200.2 728:52592 10] Close Socket: Time=0:00.047
10.10.2011 15:14:06.065> [№48 192.168.200.2 728:52592 10] Delete(0)

А вот пример работающего запроса:
10.10.2011 15:15:58.065> Accept: TCPSocket=224
10.10.2011 15:15:58.159> Receive: TCPSocket=728
10.10.2011 15:15:58.159> TClientList.FindBySocket(728)
10.10.2011 15:15:58.159> i=1 Socket=728
10.10.2011 15:15:58.159> [№51 192.168.200.2 728:52602 2] Receive Start
10.10.2011 15:15:58.190> Close: TCPSocket=728
10.10.2011 15:15:58.190> TClientList.FindBySocket(728)
10.10.2011 15:15:58.190> i=1 Socket=728
10.10.2011 15:15:58.190> [№51 192.168.200.2 728:52602 6] Close
10.10.2011 15:15:58.206> [№51 192.168.200.2 728:52602 6] Close: Query=0000000100&ServiceID=1234567890&QueryCode=Login&CardCode=1&CardPIN=1111&Encoding=Windows-1251&Version=3&Expect=
10.10.2011 15:15:58.206> [№51 192.168.200.2 728:52602 6] Close: Time=0:00.125 ReadBytes=111 WriteBytes=555

В чем может быть дело?
Заранее спасибо.

Mikkey O'Fish
10.10.2011, 17:38
10.10.2011 15:14:00.065> [№49 192.168.200.2 704:52596 6] Close: Time=0:00.094 ReadBytes=470 WriteBytes=193
10.10.2011 15:14:06.065> [№48 192.168.200.2 728:52592 10] Close Socket: Time=0:00.047

У тебя отвечающий сокет по разному прописан. Может все-таки 728?

ditas
11.10.2011, 11:06
О как...
А каким образом это можно исправить?

Mikkey O'Fish
11.10.2011, 11:38
Посмотри в настройках внешнего протокола. Посмотри инишники или конфиги в Премьеровском каталоге

ditas
11.10.2011, 12:36
А не может дело быть в изначальном подходе к передаче запроса?

Будет ли запрос, в принципе, работать из браузера, переданный, как обычный GET запрос?
Может быть нужно использовать для связи с сервером UCS-премьера сокеты (fsockopen) или cURL?
Непонятно как работает UCS-премьера внешний протокол. Иными словами, допустимо ли вообще обращаться к серверу таким образом:
http://192.168.200.1:9194/?0000000100&ServiceID=1234567890&QueryCode=Login&CardCode=1&CardPIN=1111&Encoding=Windows-1251&Version=3&Expect=

P.S. сервер в локальной сети.

count
16.11.2011, 04:14
У тебя отвечающий сокет по разному прописан. Может все-таки 728?
Где можно подробнее прочитать про "отвечающие сокеты" и их настройку? (:))
Может быть вы чего-то путаете (например номер сокета и номер порта)?



Будет ли запрос, в принципе, работать из браузера, переданный, как обычный GET запрос?

Нет. Это ж не Get...


Может быть нужно использовать для связи с сервером UCS-премьера сокеты (fsockopen) или cURL?

Верно, сокеты - основа интернетов.


Непонятно как работает UCS-премьера внешний протокол.

Документация с протоколом не предоставляется? Запросите у разработчиков.


Иными словами, допустимо ли вообще обращаться к серверу таким образом:
http://192.168.200.1:9194/?0000000100&ServiceID=1234567890&QueryCode=Login&CardCode=1&CardPIN=1111&Encoding=Windows-1251&Version=3&Expect=

Нет. Это ни разу не HTTP.

Зубр
15.11.2012, 16:07
Так как всё таки послать запрос к UCS-Преьера (внешний протокол) посредством PHP?
Напишите пример пожалуйста.

sibgaba
16.11.2012, 12:45
Если версия Премьеры 3.16 и ниже, то можно работать таким кодом



$fp = fsockopen($ip, $port, $en, $es, 15);
if(!$fp)
exit('Connection failed. Error #'.$en.': '.$es);
$str_query = 'тут текст запроса';
fwrite($fp, $str_query);

$ret = '';
while(!feof($fp)) {
$s = fgets($fp,256);
echo $s;
}
fclose($fp);


Т.е. открываем сокет и читали из него пока не конец потока feof($fp).


Для новых более свежих версий Премьеры надо пользовать вот такой, более правильный, код


$fp = fsockopen($ip, $port, $en, $es, 7);
if(!$fp)
exit('Connection failed. Error #'.$en.': '.$es);
$str_query = 'тут текст запроса';
fwrite($fp, $str_query);
$n = fgets($fp,11);
$s = fgets($fp,$n+1);
fclose($fp);