20.11.2017 14:06
УКМ_эксплуатант_2
 
Ответ такой:
SQL код:
<?xml version="1.0" encoding="UTF-8"?><ArmResponse><ResponseBody><ProtocolLabel>OFDFNARMUKM</ProtocolLabel><ProtocolVersion>10.7</ProtocolVersion><RequestId>{993C603A-48A5-45F7-9C44-10E6A5CB81CA}</RequestId><Result>0</Result><ErrorCategory>0</ErrorCategory><ErrorSource>FN_CONTROLLER</ErrorSource><ErrorCode>0</ErrorCode><ErrorDescription></ErrorDescription><Command>3</Command></ResponseBody><ResponseData><![CDATA[<ArmGetStatus><LastCommand>4915262</LastCommand><LastCommandStatus>5505099</LastCommandStatus><LastCommandExecTime>2424864</LastCommandExecTime><NetworkInterface>eth0   MAC=B8:27:EB:70:97:22   IP=192.168.128.172</NetworkInterface><PaperWidth>40</PaperWidth><KKTFWVersion>008.16</KKTFWVersion><FNStatus><LifePhase>3</LifePhase><CurrentDocType>0</CurrentDocType><CurrentDocData>0</CurrentDocData><ShiftState>0</ShiftState><StatusNeedChange>0</StatusNeedChange><StatusEndingResource>0</StatusEndingResource><StatusOverflow>0</StatusOverflow><StatusOverdueSending>0</StatusOverdueSending><LastDocDateTime></LastDocDateTime><LastDocNumber>124</LastDocNumber><FactoryNum>9999078900007551</FactoryNum><ExpirationDate>2018-10-08 00:00:00</ExpirationDate><FWVersion>fn debug v 1.37</FWVersion></FNStatus><OFDStatus><ExchangeStatus>0</ExchangeStatus><MessageReadStarted>0</MessageReadStarted><QueueLength>0</QueueLength><FirstQueueDocNumber>0</FirstQueueDocNumber><FirstQueueDocDateTime></FirstQueueDocDateTime></OFDStatus></ArmGetStatus>]]></ResponseData></ArmResponse>
20.11.2017 14:14
student
 
Цитата:
УКМ_эксплуатант_2 Ответ такой:
там все данные есть - смотри где именно часть теряется
на всякий случай - внутри [CDATA[]] обычный хмл, только без заголовка
21.11.2017 11:38
УКМ_эксплуатант_2
 
Получилось вот так корявенько, на уровне бейсика, но работает.
Иногда "подвисает" в момент УЖЕ ПОДКЛЮЧИЛИСЬ (нет варнинга что fsockopen не подключилась) , но все еще читает (вероятно касса занята и не может ответить). Как отловить сию беду?
Ну и результат "завернул" в XML - не хотелось делать класс под это дело...
Текст файлика:
SQL код:
<?php        
function GetInfoOneKKM($parAdr){
    
//функция по айпишнику цепляется к фискальнику и выдает длину очереди неотправленных документов и 
    //дату первого неотправленного документа
    
$Port 6667;  //порт кассы
    
$IpAddr    =    $parAdr;
     
$RRR "</ArmResponse>\n";
    
$fp fsockopen($IpAddr$Port$errno$errstr5);
    if (!
$fp) {        
        return 
'<?xml version="1.0" encoding="UTF-8"?><Otvet><KodV>' $errno '</KodV><KolvoDok></KolvoDok><DataDok></DataDok><Dt_Stop></Dt_Stop></Otvet>';
    } else {
        
socket_set_blocking($fp,FALSE);
        
$strGUID    =    com_create_guid();
        
$strDt date "Y-m-d G:i:s" );
        
$out '<?xml version="1.0" encoding="UTF-8"?> 
                <ArmRequest><RequestBody><ProtocolLabel>OFDFNARMUKM</ProtocolLabel><ProtocolVersion>10.7</ProtocolVersion><RequestId>' 
$strGUID '</RequestId> 
                <DateTime>' 
$strDt '</DateTime><Command>2</Command></RequestBody><RequestData><![CDATA[]]></RequestData></ArmRequest>';
        
fwrite($fp$out);
        
$Priznak=1;
        
$Stroka "";
        while (
$Priznak) {
            
$char fgetc($fp);            
            
$Stroka $Stroka $char;
            if (
iconv_strlen($Stroka)>13){
                
$Str_temp iconv_substr($Stroka, -15); 
                if (
$Str_temp==$RRR)
                    
$Priznak 0;
            }
        };
        
fclose($fp);
        
$intPosB    =    strpos ($Stroka,"<QueueLength>");
        
$intPosE    =    strpos ($Stroka,"</QueueLength>");
        
$KolvoDok    =    mb_substr($Stroka,$intPosB+13,$intPosE-$intPosB-13);
        
$intPosB    =    strpos ($Stroka,"<FirstQueueDocDateTime>");
        
$intPosE    =    strpos ($Stroka,"</FirstQueueDocDateTime>");
        
$DataDok    =    mb_substr($Stroka,$intPosB+23,$intPosE-$intPosB-23);
        
$intPosB    =    strpos ($Stroka,"<ExpirationDate>");
        
$intPosE    =    strpos ($Stroka,"</ExpirationDate>");
        
$DataIok    =    mb_substr($Stroka,$intPosB+16,$intPosE-$intPosB-16);
        return 
'<?xml version="1.0" encoding="UTF-8"?><Otvet><KodV>0</KodV><KolvoDok>' $KolvoDok 
                
'</KolvoDok><DataDok>' $DataDok '</DataDok><Dt_Stop>' $DataIok '</Dt_Stop></Otvet>';
    };
};
?>
19.12.2017 11:11
ctarosta
 
Цитата:
student ну почему же :) все работает (проверял с командной строки)
надо только на него в опциях таймаут устанавливать на операцию иначе возврата не будет - почему так - х\з
Можно попросить команду CURL которую отправляете? у меня почему-то не получается
19.12.2017 12:50
student
 
Цитата:
ctarosta Можно попросить команду CURL которую отправляете
в архиве батник на отправку, файл s1.xml - что отправляем, r1.xml - что приходит в ответ и e1.txt - детализация (возможные ошибки)
Вложения
Тип файла: rar 000.rar (2.3 Кб, 35 просмотров)
20.12.2017 07:27
ctarosta
 
так и не получилось
ФР подключен к кассе по PPP. Его адрес: 192.168.250.2
Касса на линуксе.

Код:
ppp0      Link encap:Point-to-Point Protocol
          inet addr:192.168.250.1  P-t-P:192.168.250.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:17 errors:0 dropped:0 overruns:0 frame:0
          TX packets:21 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:2823 (2.7 Kb)  TX bytes:2344 (2.2 Kb)
При выполнении команды:
Код:
curl --connect-timeout 10 --max-time 20 --trace-ascii "/tmp/000/e1.TXT" -F "xml_file=@/tmp/000/fr.xml" http://192.168.250.2:6667 -o "/tmp/000/r1.XML"
операция вылетает по таймауту, ответа CURL не получает:
Код:
curl: (28) Operation timed out with 0 out of -1 bytes received
В логах ФР:
Код:
20-12-2017 12:19:03.744: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:03.772: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:03.800: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:03.827: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:03.855: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:03.883: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:03.911: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:03.939: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:03.967: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:03.994: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:04.022: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:04.050: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:04.078: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:04.106: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:04.133: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:04.161: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:04.188: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:04.216: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:04.244: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:04.272: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:04.300: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:04.327: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:04.355: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:04.383: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:04.411: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:04.438: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:04.466: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:04.494: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:04.522: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:04.549: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:04.577: 0x730ff410: WARNING: transport_tcp: read() failed
20-12-2017 12:19:04.578: 0x730ff410: WARNING: transport_tcp: CListenServer::handleReadyReadTransportExtMode() - read timeout exceeded
20-12-2017 12:19:04.590: 0x730ff410:  INFO:     POS_CONTROLLER: POS=>KKT "<?xml version="1.0" encoding="UTF-8"?> <ArmRequest> <RequestBody> <ProtocolLabel>OFDFNARMUKM</ProtocolLabel> <ProtocolVersion>10.10</ProtocolVersion> <RequestId>{48b9bd0c-a368-4aab-83ec-ba393e90d194}</RequestId> <DateTime>2017-12-20 08:37:20</DateTime> <Command>2</Command> </RequestBody> <RequestData> <![CDATA[]]> </RequestData> </ArmRequest> --curlHqU53MphNa9v0ffsT4F8uj21Fwj--"
20-12-2017 12:19:04.601: 0x730ff410:  INFO:     POS_CONTROLLER: POS=>KKT {48b9bd0c-a368-4aab-83ec-ba393e90d194} EXTCMD_POS_GETSTATUS(0x2) - processing started
20-12-2017 12:19:04.602: 0x730ff410:  INFO:     POS_CONTROLLER: POS=>KKT {48b9bd0c-a368-4aab-83ec-ba393e90d194} EXTCMD_POS_GETSTATUS(0x2) - processing finished
20-12-2017 12:19:04.610: 0x738ff410:  INFO:   MACRO_CONTROLLER: --- cmd[646] m_cmdCode="ARMCMD_MACRO_GETSTATUS(0x6008)" m_params="" process begin
20-12-2017 12:19:04.623: 0x74aff410:  INFO:      FN_CONTROLLER: --- CFNController::cmdProcess() - cmd[647] m_cmdCode="ARMCMD_FN_STATUS(0x2008)" m_params="" process begin
20-12-2017 12:19:04.650: 0x74aff410:  INFO:      FN_CONTROLLER: fnstatus = 3
20-12-2017 12:19:04.650: 0x74aff410:  INFO:      FN_CONTROLLER: --- CFNController::cmdProcess() cmd[647] m_cmdCode="ARMCMD_FN_STATUS(0x2008)" m_params="" process end
20-12-2017 12:19:04.662: 0x738ff410:  INFO:   MACRO_CONTROLLER: --- cmd[646] m_cmdCode="ARMCMD_MACRO_GETSTATUS(0x6008)" m_params="" process end
20-12-2017 12:19:04.674: 0x730ff410:  INFO:     POS_CONTROLLER: --- cmd[649=>646] m_cmdCode="ARMCMD_MACRO_GETSTATUS_RESPONSE(0x6009)" m_params="" CPOSController::cmdProcess() begin
20-12-2017 12:19:04.676: 0x730ff410:  INFO:     POS_CONTROLLER: KKT=>POS {48b9bd0c-a368-4aab-83ec-ba393e90d194} EXTCMD_POS_GETSTATUS_RESPONSE(0x3) - response to send(str): size(str)=1475 size(bin)=1475 data(str)="<?xml version="1.0" encoding="UTF-8"?><ArmResponse><ResponseBody><ProtocolLabel>OFDFNARMUKM</ProtocolLabel><ProtocolVersion>10.10</ProtocolVersion><RequestId>{48b9bd0c-a368-4aab-83ec-ba393e90d194}</RequestId><Result>0</Result><ErrorCategory>0</ErrorCategory><ErrorSource>FN_CONTROLLER</ErrorSource><ErrorCode>0</ErrorCode><ErrorDescription></ErrorDescription><Command>3</Command></ResponseBody><ResponseData><![CDATA[<ArmGetStatus><LastCommand>0</LastCommand><LastCommandStatus>0</LastCommandStatus><LastCommandExecTime>5</LastCommandExecTime><NetworkInterface>eth0 MAC=B8:27:EB:92:4B:07 IP=,ppp0 MAC= IP=192.168.250.2</NetworkInterface><PaperWidth>54</PaperWidth><KKTFWVersion>008.19.308</KKTFWVersion><FNStatus><LifePhase>3</LifePhase><CurrentDocType>0</CurrentDocType><CurrentDocData>0</CurrentDocData><ShiftState>0</ShiftState><StatusNeedChange>0</StatusNeedChange><StatusEndingResource>0</StatusEndingResource><StatusOverflow>0</StatusOverflow><StatusOverdueSending>0</StatusOverdueSending><LastDocDateTime></LastDocDateTime><LastDocNumber>82824</LastDocNumber><FactoryNum>8710000100447708</FactoryNum><ExpirationDate>2018-06-27 00:00:00</ExpirationDate><FWVersion>fn_v_1_0</FWVersion></FNStatus><OFDStatus><ExchangeStatus>0</ExchangeStatus><MessageReadStarted>0</MessageReadStarted><QueueLength>0</QueueLength><FirstQueueDocNumber>0</FirstQueueDocNumber><FirstQueueDocDateTime></FirstQueueDocDateTime></OFDStatus></ArmGetStatus>]]></ResponseData></ArmResponse>"
20-12-2017 12:19:04.678: 0x730ff410:  INFO:     POS_CONTROLLER: KKT=>POS {48b9bd0c-a368-4aab-83ec-ba393e90d194} EXTCMD_POS_GETSTATUS_RESPONSE(0x3) - SUCCESS: response sent
20-12-2017 12:19:04.679: 0x730ff410:  INFO:     POS_CONTROLLER: --- cmd[649=>646] m_cmdCode="ARMCMD_MACRO_GETSTATUS_RESPONSE(0x6009)" m_params="" CPOSController::cmdProcess() end
Возникают какие-то ошибки чтения, затем команда обрабатывается успешно. ФР генерит ответ, но CURL его не получает.

Помогите, куда копать?
20.12.2017 07:33
student
 
Цитата:
ctarosta операция вылетает по таймауту, ответа CURL не получает:
судя по логам ответ есть, м.б. просто стоит увеличить таймаут в 2 раза ?
20.12.2017 11:29
ctarosta
 
не получилось. пробовал таймаут выставить до 10 минут:

Код:
curl --connect-timeout 10 --max-time 600 -F "xml_file=@/tmp/000/fr.xml" http://192.168.250.2:6667 -o "/tmp/000/r1.XML" -v
* About to connect() to 192.168.250.2:6667
* Connected to 192.168.250.2 (192.168.250.2) port 6667
> POST / HTTP/1.1
User-Agent: curl/7.9.8 (i386-redhat-linux-gnu) libcurl 7.9.8 (OpenSSL 0.9.7a) (ipv6 enabled)
Host: 192.168.250.2:6667
Pragma: no-cache
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
Content-Length: 523
Expect: 100-continue
Content-Type: multipart/form-data; boundary=curlSDJ1PR29h6vDnB5NB0OPYwxv16f

  % Total    % Received % Xferd  Average Speed          Time             Curr.
                                 Dload  Upload Total    Current  Left    Speed
100   523    0     0  100   523      0      0  0:10:00  0:10:00  0:00:00     0
* Connection #0 left intact
curl: (28) Operation timed out with 0 out of -1 bytes received
* Closing connection #0
20.12.2017 11:57
student
 
Цитата:
ctarosta таймаут выставить до 10 минут:
ты выставил общий таймаут на операцию, а попробуй на коннект и возможно надо под линуксом какими либо опциями курла поиграться - может ипв6 или ссл не нравится - я все из под винды 10-ки х64 делал
20.12.2017 22:00
OlegON
 
сдается мне, что связи вообще нет
попробуй
Код:
telnet 192.168.250.2 6667
оно вообще зацепится?
Часовой пояс GMT +3, время: 10:21.

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