15.11.2017 17:06
УКМ_эксплуатант_2
 
Пытаюсь опросить СП802-Ф и вытащить длину очереди неотправленных документов. Зацепляюсь, читаю - все ок. Но скрипт потом зависает: такое ощущение, что ожидает от ФР-а EOF, а его все нет и нет...
Что неправильно делаю?
SQL код:
<?php
/* посылает по адресу запрос статуса и получает ответ */
    
$Port 6667;  //порт кассы
    
$IpAddr '192.168.128.172'//адрес кассы
    
$fp fsockopen($IpAddr$Port$errno$errstr30);
    if (!
$fp) {
        echo 
"$errstr ($errno)<br>\n";
    } else {
        
        
socket_set_blocking($fp,FALSE);
        
$out '<?xml version="1.0" encoding="UTF-8"?> 
                <ArmRequest><RequestBody><ProtocolLabel>OFDFNARMUKM</ProtocolLabel><ProtocolVersion>10.7</ProtocolVersion><RequestId>{48b9bd0c-a368-4aab-83ec-ba393e90d194}</RequestId> 
                <DateTime>2017-01-19 11:46:20</DateTime><Command>2</Command></RequestBody><RequestData><![CDATA[]]></RequestData></ArmRequest>'
;
        
        
fwrite($fp$out);
        while (!
feof($fp)) {
            echo 
fgets($fp);
        }
        
fclose($fp);
    }    
?>
socket_set_blocking($fp,FALSE); - пробовал и TRUE - нет эффекта...
15.11.2017 17:10
OlegON
 
Я с сокетами не работал, там точно не через CURL надо делать?
15.11.2017 17:15
student
 
Цитата:
УКМ_эксплуатант_2 что ожидает от ФР-а EOF, а его все нет и нет.
а кто сказал что он там должен быть ?
проверяй в цикле на приход </ArmResponse>

просмотрел сейчас что с сокета приходит - там последние 2-а символа ">" и перевод строки (код 10)
15.11.2017 18:12
twix
 
Как правильно Олег спросил: зачем геморроиться, если можно курлом?
16.11.2017 11:09
УКМ_эксплуатант_2
 
Курл не сработал
SQL код:
<?php
    $url 
"http://192.168.128.172:6667";
    
$out '<?xml version="1.0" encoding="UTF-8"?> 
                <ArmRequest><RequestBody><ProtocolLabel>OFDFNARMUKM</ProtocolLabel><ProtocolVersion>10.7</ProtocolVersion><RequestId>{48b9bd0c-a368-4aab-83ec-ba393e90d194}</RequestId> 
                <DateTime>2017-01-19 11:46:20</DateTime><Command>2</Command></RequestBody><RequestData><![CDATA[]]></RequestData></ArmRequest>'
;
    
$ch curl_init(); 
    
curl_setopt($chCURLOPT_URL$url); 
    
$result curl_exec($ch);
    
$json=json_decode($result,true);
    
print_r($json);    
    
curl_close($ch);
?>
16.11.2017 12:20
OlegON
 
Что-то я не понял судьбу $out... Присвоил значение и?
16.11.2017 12:34
student
 
Цитата:
УКМ_эксплуатант_2 Курл не сработал
ну почему же :) все работает (проверял с командной строки)
надо только на него в опциях таймаут устанавливать на операцию иначе возврата не будет - почему так - х\з

трассировка ответа
12:28:36.359000 == Info: Rebuilt URL to: 192.168.10.30:6667/
12:28:36.359000 == Info: Trying 192.168.10.30...
12:28:36.375000 == Info: Connected to 192.168.10.30 (192.168.10.30) port 6667 (#0)
12:28:36.437000 => Send header, 212 bytes (0xd4)
0000: POST / HTTP/1.1
0011: Host: 192.168.10.30:6667
002b: User-Agent: curl/7.45.0
0044: Accept: */*
0051: Content-Length: 594
0066: Expect: 100-continue
007c: Content-Type: multipart/form-data; boundary=--------------------
00bc: ----f46ae6990e41a956
00d2:
12:28:36.734000 <= Recv data, 531 bytes (0x213)
0000: <?xml version="1.0" encoding="UTF-8"?><ArmResponse><ResponseBody
0040: ><ProtocolLabel>OFDFNARMUKM</ProtocolLabel><ProtocolVersion>10.9
0080: </ProtocolVersion><RequestId>{3ed7bfee-f2fd-4c57-8462-271a32e2d0
00c0: 15}</RequestId><Result>1</Result><ErrorCategory>5</ErrorCategory
0100: ><ErrorSource>POS_CONTROLLER</ErrorSource><ErrorCode>5003</Error
0140: Code><ErrorDescription>Incorrect KKT command protocol data: Inc
0180: omplete data - start tag &quot;&lt;?xml version=&quot;1.0&quot;
01c0: encoding=&quot;UTF-8&quot;?&gt;&quot; not found . xml data:&quo
0200: t;POST / HTTP/1.1
12:28:36.734000 <= Recv data, 314 bytes (0x13a)
0000: Host: 192.168.10.30:6667
001a: User-Agent: curl/7.45.0
0033: Accept: */*
0040: Content-Length: 594
0055: Expect: 100-continue
006b: Content-Type: multipart/form-data; boundary=--------------------
00ab: ----f46ae6990e41a956
00c1:
00c3: &quot;</ErrorDescription><Command>1006</Command></ResponseBody><
0103: ResponseData><![CDATA[]]></ResponseData></ArmResponse>.
12:28:38.437000 == Info: Done waiting for 100-continue
12:28:38.453000 => Send data, 144 bytes (0x90)
0000: --------------------------f46ae6990e41a956
002c: Content-Disposition: form-data; name="xml_file"; filename="1.xml
006c: "
006f: Content-Type: application/xml
008e:
12:28:38.453000 => Send data, 402 bytes (0x192)
0000: ...<?xml version="1.0" encoding="UTF-8"?>
002c: <ArmRequest>
003b: <RequestBody>
004d: <ProtocolLabel>OFDFNARMUKM</ProtocolLabel>
007e: <ProtocolVersion>10.9</ProtocolVersion>
00ac: <RequestId>{48b9bd0c-a368-4aab-83ec-ba393e90d194}</RequestId
00ec: >
00f0: <DateTime>2017-01-19 11:46:20</DateTime>
011f: <Command>2</Command>
013a: </RequestBody>
014d: <RequestData>
015f: <![CDATA[]]>
0172: </RequestData>
0185: </ArmRequest>
12:28:38.453000 => Send data, 48 bytes (0x30)
0000:
0002: --------------------------f46ae6990e41a956--
12:28:38.859000 <= Recv data, 1475 bytes (0x5c3)
0000: <?xml version="1.0" encoding="UTF-8"?><ArmResponse><ResponseBody
0040: ><ProtocolLabel>OFDFNARMUKM</ProtocolLabel><ProtocolVersion>10.9
0080: </ProtocolVersion><RequestId>{48b9bd0c-a368-4aab-83ec-ba393e90d1
00c0: 94}</RequestId><Result>0</Result><ErrorCategory>0</ErrorCategory
0100: ><ErrorSource>FN_CONTROLLER</ErrorSource><ErrorCode>0</ErrorCode
0140: ><ErrorDescription></ErrorDescription><Command>3</Command></Resp
0180: onseBody><ResponseData><![CDATA[<ArmGetStatus><LastCommand>33423
01c0: 84</LastCommand><LastCommandStatus>55</LastCommandStatus><LastCo
0200: mmandExecTime>2687026</LastCommandExecTime><NetworkInterface>eth
0240: 0 MAC=B8:27:EB:11:62:AC IP=192.168.10.30</NetworkInterface><
0280: PaperWidth>63</PaperWidth><KKTFWVersion>008.18.262</KKTFWVersion
02c0: ><FNStatus><LifePhase>3</LifePhase><CurrentDocType>0</CurrentDoc
0300: Type><CurrentDocData>0</CurrentDocData><ShiftState>1</ShiftState
0340: ><StatusNeedChange>0</StatusNeedChange><StatusEndingResource>0</
0380: StatusEndingResource><StatusOverflow>0</StatusOverflow><StatusOv
03c0: erdueSending>0</StatusOverdueSending><LastDocDateTime></LastDocD
0400: ateTime><LastDocNumber>1322</LastDocNumber><FactoryNum>999907890
0440: 0005220</FactoryNum><ExpirationDate>2018-04-04 00:00:00</Expirat
0480: ionDate><FWVersion>fn debug v 1.33</FWVersion></FNStatus><OFDSta
04c0: tus><ExchangeStatus>1</ExchangeStatus><MessageReadStarted>0</Mes
0500: sageReadStarted><QueueLength>0</QueueLength><FirstQueueDocNumber
0540: >0</FirstQueueDocNumber><FirstQueueDocDateTime></FirstQueueDocDa
0580: teTime></OFDStatus></ArmGetStatus>]]></ResponseData></ArmRespons
05c0: e>.
12:29:16.359000 == Info: Operation timed out after 40000 milliseconds with 2320 bytes received
12:29:16.359000 == Info: Closing connection 0
20.11.2017 13:32
УКМ_эксплуатант_2
 
Сделал по рекомендации student:
SQL код:
проверяй в цикле на приход </ArmResponse
Теперь проблема с разбором ответа:
Делаю так:
SQL код:
//$Stroka - ответ, полученный от ФР-а
$xml simplexml_load_string($Stroka);
$json json_encode($xml);
$array json_decode($json,TRUE);
var_dump($array); print "\n\n\n"
Показывает:
SQL код:
array(2) {
  [
"ResponseBody"]=>
  array(
9) {
    [
"ProtocolLabel"]=>
    
string(11"OFDFNARMUKM"
    
["ProtocolVersion"]=>
    
string(4"10.7"
    
["RequestId"]=>
    
string(38"{993C603A-48A5-45F7-9C44-10E6A5CB81CA}"
    
["Result"]=>
    
string(1"0"
    
["ErrorCategory"]=>
    
string(1"0"
    
["ErrorSource"]=>
    
string(13"FN_CONTROLLER"
    
["ErrorCode"]=>
    
string(1"0"
    
["ErrorDescription"]=>
    array(
0) {
    }
    [
"Command"]=>
    
string(1"3"
  
}
  [
"ResponseData"]=>
  array(
0) {
  }

ResponseData - пустой, хотя данные точно есть.
Неужели придется "лапками" вырезать?

З.Ы. А тут есть возможность "сворачивать" длинные исходники под спойлер?
20.11.2017 13:59
student
 
ты не
Цитата:
УКМ_эксплуатант_2 $array
покажи а сам ответ целиком
Цитата:
УКМ_эксплуатант_2 //$Stroka - ответ, полученный от ФР-а
возможно что твои енкод и декод не так как надо отрабатывают :)
20.11.2017 14:06
KirillHome
 
Цитата:
УКМ_эксплуатант_2 ...
З.Ы. А тут есть возможность "сворачивать" длинные исходники под спойлер?
Минимум два варианта:

[spl=Опция]значение[/spl]
Пример [spl=End of the Game]Cloud kills Sepiroth[/spl]
End of the Game:
Cloud kills Sepiroth


[off]значение[/off]
Пример [off]Пример[/off]
скрытое
Часовой пояс GMT +3, время: 14:09.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.