mr.Dream 164 Опубликовано: 2011-03-25 10:20:38 Share Опубликовано: 2011-03-25 10:20:38 Намагаюсь стикувати свою білінгову систему з платіжними терміналами І стикнувся з проблемою. Весь білінг веб-орієнтований (самописний). Мені потрібно отримати строку в чистому виді, проаналізувати її, і відправити відповідь. Буду працювати з системою УкрНет. Може хтось вже робив аналогічне. Тобто, коли клієнт вводить свій ІД в терміналі, він шле мені запит 01;ІДклієнта; Отримати цю строку через $_SERVER['QUERY_STRING'] не можу, так як для цього потрібно передвати заголовки ґет хттп/1.1 і т.д. Мені потрібно земулювати тупе сокетне з'єднання, через запит якого передається тільки одна строка, і отримується одна у відповідь. Але з допомогою веб Ссылка на сообщение Поделиться на других сайтах
emon 9 Опубліковано: 2011-03-25 10:35:54 Share Опубліковано: 2011-03-25 10:35:54 ну так нехай шле запит у вигляді http://bla-bla-bla.com.ua/getclientnamebyid.php?id=15512 і вже в самому скрипті буде отойво айді. Чи я шось недозрозумів ? Ссылка на сообщение Поделиться на других сайтах
mr.Dream 164 Опубліковано: 2011-03-25 10:46:18 Автор Share Опубліковано: 2011-03-25 10:46:18 ну так нехай шле запит у вигляді http://bla-bla-bla.c...id.php?id=15512 і вже в самому скрипті буде отойво айді. Чи я шось недозрозумів ? Не зовсім так. Як би було так просто... )) з їхнього сервера відкривається звичайне сокетне з'єднання на певний порт. запит у втгляді http://....?id=... формує інтернет-оглядач, відкриваючи з'єднання з сервером і формуючи всі хттп -заголовки запиту. На рівні візуальному це так, а на рівні обміну даними між клієнтом і сервером виглядає трохи кучерявіше. Просто для того, щоби сервак захавав такий запит, йому треба передати хост, тип запиту, адресу скрипта, протокол і його вервсю.... без того він запит не опрацьовує. А потрібно якось зробити так, щоби він міг отримувати одну строку запиту без купи заголовків. Але здається мені, сам протокол не позволяє... Потрібно якийсь костиль... Ссылка на сообщение Поделиться на других сайтах
emon 9 Опубліковано: 2011-03-25 10:57:27 Share Опубліковано: 2011-03-25 10:57:27 (відредаговано) тоді тре "костиль", який виконає таких запит через php_cli, або має бути якийсь сервіс, який виконує дану операцію. або "копати" в сторону fsockopen Відредаговано 2011-03-25 10:59:48 emon Ссылка на сообщение Поделиться на других сайтах
morfey 82 Опубліковано: 2011-03-25 11:00:40 Share Опубліковано: 2011-03-25 11:00:40 Намагаюсь стикувати свою білінгову систему з платіжними терміналами І стикнувся з проблемою. Весь білінг веб-орієнтований (самописний). Мені потрібно отримати строку в чистому виді, проаналізувати її, і відправити відповідь. Буду працювати з системою УкрНет. Може хтось вже робив аналогічне. Тобто, коли клієнт вводить свій ІД в терміналі, він шле мені запит 01;ІДклієнта; Отримати цю строку через $_SERVER['QUERY_STRING'] не можу, так як для цього потрібно передвати заголовки ґет хттп/1.1 і т.д. Мені потрібно земулювати тупе сокетне з'єднання, через запит якого передається тільки одна строка, і отримується одна у відповідь. Але з допомогою веб Робив саме для укрнета через сокети, тупо повісив демона, він собі крутиться і приймає запити Ссылка на сообщение Поделиться на других сайтах
morfey 82 Опубліковано: 2011-03-25 11:05:00 Share Опубліковано: 2011-03-25 11:05:00 (відредаговано) На, я не жадний <?php error_reporting(E_ALL); //error_reporting(E_ALL ^ ~E_NOTICE); header('Content-Type: text/plain;'); set_time_limit(0); ob_implicit_flush(); $port = 9000; $address = "xxx.xxx.xxx.xxx"; $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_bind($sock, $address, $port); socket_set_option($sock, SOL_SOCKET, SO_KEEPALIVE, 1); socket_set_nonblock($sock); socket_listen($sock, 1000); $clients = array($sock); $tarr = array(); while (true) { $read = $clients; if (count($tarr) > 0) foreach ($tarr as $ind => $tim) { if ((time() - $tim) > 60) { socket_close($read[$ind + 1]); $key = array_search($read[$ind + 1], $clients); unset($clients[$key]); unset($iparr[$key - 1]); unset($tarr[$ind]); continue; } } if (socket_select($read, $write, $except, 1) < 1) continue; if (in_array($sock, $read)) { $clients[] = $newsock = socket_accept($sock); socket_getpeername($newsock, $ip); $key = array_search($sock, $read); $iparr[] = $ip; $tarr[] = time(); unset($read[$key]); $read[] = $newsock; continue; } foreach ($read as $index => $read_sock) { $data = socket_read($read_sock, 1024); if ($data === false) { $key = array_search($read_sock, $clients); unset($clients[$key]); unset($iparr[$key - 1]); unset($tarr[$key - 1]); continue; } $data = trim($data); if (!empty($data)) { // тут обробка запиту!!! $tarr[$index - 1] = time(); switch ($data) { case "<KILLMY>": socket_close($read_sock); $key = array_search($read_sock, $clients); unset($clients[$key]); unset($iparr[$key - 1]); unset($tarr[$key - 1]); break; case "<PING>": socket_write($read_sock, "<PONG>"); break; } if ($data === "<KILL>") { socket_close($sock); break(2); } } } } socket_close($sock); ?> Запускаєш, та й хай собі висить /usr/bin/nohup /usr/local/bin/php -f /patch/to/ukrnet/socket.php >> /var/log/ukrnet.log & До речі. Ми чекаємо більше ніж пів року, а нас годують "завтраками" Так що можете не поспішати З.І. З допомогою веб не вийде. Вони по впн на кастомний порт будуть конектиться до твого серверу Відредаговано 2011-03-25 11:13:26 hsasha Ссылка на сообщение Поделиться на других сайтах
mr.Dream 164 Опубліковано: 2011-03-25 11:15:38 Автор Share Опубліковано: 2011-03-25 11:15:38 Блін)) тепер я поняв, що багато чого не знаю ))) А так все ніби просто. А над самим демоном не потрібно наглядача, щоби часом сокет не закрився? До речі. Ми чекаємо більше ніж пів року, а нас годують "завтраками" Так що можете не поспішати А що не так, якщо не секрет? Ссылка на сообщение Поделиться на других сайтах
morfey 82 Опубліковано: 2011-03-25 11:19:51 Share Опубліковано: 2011-03-25 11:19:51 Якщо помилок не буде, то не закриється, вони проведуть тести. Але можна написати, щоб запустив в разі чого. А що не так, якщо не секрет? Аби ж я знав. То одне то інше. Аськи немає, переписка тільки через мило... Кака вобщим, але надії не втрачаємо , ждемо)) Казали в кінці березня, але так кожен місяць Ссылка на сообщение Поделиться на других сайтах
mlevel 52 Опубліковано: 2011-03-25 11:23:24 Share Опубліковано: 2011-03-25 11:23:24 хм..всі нормальні системи обмінються POST/GETзапитами та XML відповідями. Ссылка на сообщение Поделиться на других сайтах
morfey 82 Опубліковано: 2011-03-25 11:27:28 Share Опубліковано: 2011-03-25 11:27:28 Отожбо, POST/GET xml робить ukrpays.com. Там взагалі проблем не було Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВхід
Уже зарегистрированы? Войдите здесь.
Войти сейчас