mr.Dream 164 Posted 2011-03-25 10:20:38 Share Posted 2011-03-25 10:20:38 Намагаюсь стикувати свою білінгову систему з платіжними терміналами І стикнувся з проблемою. Весь білінг веб-орієнтований (самописний). Мені потрібно отримати строку в чистому виді, проаналізувати її, і відправити відповідь. Буду працювати з системою УкрНет. Може хтось вже робив аналогічне. Тобто, коли клієнт вводить свій ІД в терміналі, він шле мені запит 01;ІДклієнта; Отримати цю строку через $_SERVER['QUERY_STRING'] не можу, так як для цього потрібно передвати заголовки ґет хттп/1.1 і т.д. Мені потрібно земулювати тупе сокетне з'єднання, через запит якого передається тільки одна строка, і отримується одна у відповідь. Але з допомогою веб Link to post Share on other sites
emon 9 Posted 2011-03-25 10:35:54 Share Posted 2011-03-25 10:35:54 ну так нехай шле запит у вигляді http://bla-bla-bla.com.ua/getclientnamebyid.php?id=15512 і вже в самому скрипті буде отойво айді. Чи я шось недозрозумів ? Link to post Share on other sites
mr.Dream 164 Posted 2011-03-25 10:46:18 Author Share Posted 2011-03-25 10:46:18 ну так нехай шле запит у вигляді http://bla-bla-bla.c...id.php?id=15512 і вже в самому скрипті буде отойво айді. Чи я шось недозрозумів ? Не зовсім так. Як би було так просто... )) з їхнього сервера відкривається звичайне сокетне з'єднання на певний порт. запит у втгляді http://....?id=... формує інтернет-оглядач, відкриваючи з'єднання з сервером і формуючи всі хттп -заголовки запиту. На рівні візуальному це так, а на рівні обміну даними між клієнтом і сервером виглядає трохи кучерявіше. Просто для того, щоби сервак захавав такий запит, йому треба передати хост, тип запиту, адресу скрипта, протокол і його вервсю.... без того він запит не опрацьовує. А потрібно якось зробити так, щоби він міг отримувати одну строку запиту без купи заголовків. Але здається мені, сам протокол не позволяє... Потрібно якийсь костиль... Link to post Share on other sites
emon 9 Posted 2011-03-25 10:57:27 Share Posted 2011-03-25 10:57:27 (edited) тоді тре "костиль", який виконає таких запит через php_cli, або має бути якийсь сервіс, який виконує дану операцію. або "копати" в сторону fsockopen Edited 2011-03-25 10:59:48 by emon Link to post Share on other sites
morfey 82 Posted 2011-03-25 11:00:40 Share Posted 2011-03-25 11:00:40 Намагаюсь стикувати свою білінгову систему з платіжними терміналами І стикнувся з проблемою. Весь білінг веб-орієнтований (самописний). Мені потрібно отримати строку в чистому виді, проаналізувати її, і відправити відповідь. Буду працювати з системою УкрНет. Може хтось вже робив аналогічне. Тобто, коли клієнт вводить свій ІД в терміналі, він шле мені запит 01;ІДклієнта; Отримати цю строку через $_SERVER['QUERY_STRING'] не можу, так як для цього потрібно передвати заголовки ґет хттп/1.1 і т.д. Мені потрібно земулювати тупе сокетне з'єднання, через запит якого передається тільки одна строка, і отримується одна у відповідь. Але з допомогою веб Робив саме для укрнета через сокети, тупо повісив демона, він собі крутиться і приймає запити Link to post Share on other sites
morfey 82 Posted 2011-03-25 11:05:00 Share Posted 2011-03-25 11:05:00 (edited) На, я не жадний <?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 & До речі. Ми чекаємо більше ніж пів року, а нас годують "завтраками" Так що можете не поспішати З.І. З допомогою веб не вийде. Вони по впн на кастомний порт будуть конектиться до твого серверу Edited 2011-03-25 11:13:26 by hsasha Link to post Share on other sites
mr.Dream 164 Posted 2011-03-25 11:15:38 Author Share Posted 2011-03-25 11:15:38 Блін)) тепер я поняв, що багато чого не знаю ))) А так все ніби просто. А над самим демоном не потрібно наглядача, щоби часом сокет не закрився? До речі. Ми чекаємо більше ніж пів року, а нас годують "завтраками" Так що можете не поспішати А що не так, якщо не секрет? Link to post Share on other sites
morfey 82 Posted 2011-03-25 11:19:51 Share Posted 2011-03-25 11:19:51 Якщо помилок не буде, то не закриється, вони проведуть тести. Але можна написати, щоб запустив в разі чого. А що не так, якщо не секрет? Аби ж я знав. То одне то інше. Аськи немає, переписка тільки через мило... Кака вобщим, але надії не втрачаємо , ждемо)) Казали в кінці березня, але так кожен місяць Link to post Share on other sites
mlevel 52 Posted 2011-03-25 11:23:24 Share Posted 2011-03-25 11:23:24 хм..всі нормальні системи обмінються POST/GETзапитами та XML відповідями. Link to post Share on other sites
morfey 82 Posted 2011-03-25 11:27:28 Share Posted 2011-03-25 11:27:28 Отожбо, POST/GET xml робить ukrpays.com. Там взагалі проблем не було Link to post Share on other sites
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now