как правильно использовать OTRS GenericTicketConnectorSOAP в PHP

Я использую PHP версии 5.6. Я сделал форму PHP, которая имеет 3 поля, имя пользователя, пароль и загрузку файла CSV. Файл CSV содержит в каждой строке два числовых кода: номер билета и номер счета, разделенные на ; , поэтому в CSV есть два столбца. В коде обработки, который я написал, я сделал код для чтения CSV-файла построчно и разбиения номера билета и номера счета на две переменные. После этого код создает XML-данные, которые необходимо отправить через GenericTicketConnectorSOAP, и выполняет обновление Ticket. Мой php-код следующий:

$URL = 'http://localhost/otrs/nphgenericinterface.pl/Webservice/GenericTicketConnectorSOAP';
$NameSpace = 'http://www.otrs.org/TicketConnector/';
         // SOAP parameters 
$parameters = [
'proxy_host'     => $URL,
'proxy_port'     => 8080,
'stream_context' => stream_context_create(
array(
'ssl' => array(
'verify_peer'       => false,
'verify_peer_name'  => false,
)
)
)
];
// More code that it is not necessary to post it
//Posting the code that the problem starts
    if(move_uploaded_file($_FILES['file']['tmp_name'],($path . $newfilename))){
echo '<div class="alert alert-primary" role="alert"><p>Success: File uploaded.</p></div>';
                                                     $fn = fopen($path . $newfilename,"r");
  
                                                    while(! feof($fn) )  {
                                                        
                                                    $content = fgets($fn);
                                                    // Divide the ticket number and the invoice number into two variables
                                                    list($ticketnumber,$invoicenumber) = explode(";", $content);
                                                    
                                                    echo "TicketNumber: ".$ticketnumber." Invoicenumber: ".$invoicenumber;
                                                    
                                                
                                                            // Making XMLData 
                                                    
                                                            $XMLData = '<UserLogin>'.$user.'</UserLogin><Password>'.$password.'</Password>';
                                                            $XMLData .= '<TicketNumber>'.$ticketnumber.'</TicketNumber>
                                                            <DynamicField><Name>'.$invoicefield.'</Name>
                                                            <Value>'.$invoicenumber.'</Value></DynamicField>'; 
                                                             // SOAP client
                                                            // extension of php soap NEED TO BE ENABLED ON php.ini
                                                    
                                                            $client = new SoapClient($NameSpace,$parameters);
                                                            $result = $client -> TicketUpdate($XMLData);
                                                                
                                                                if (is_soap_fault($result)) {
                                                                    print_r("SOAP Fault: (faultcode: {$result->faultcode}, faultstring: {$result->faultstring})", E_USER_ERROR);
                                                                    $scarti.=",".$ticketnumber;
                                                                    echo '<div class="alert alert-danger" role="alert"><p>Ticket fault: '.$scarti.'</p></div>';
                                                                }else{
                                                                    echo '<div class="alert alert-success" role="alert"> Success ticket number:'.$ticketnumber.'</div>';
                                                                } 


                                                    } // while ends

Моя проблема проявляется в цикле while, где останавливается на первой строке CSV-файла, не получая сообщения об ошибке для клиента SOAP или вызова функции SOAP. Что здесь может пойти не так? Если я удаляю код SOAP, цикл останавливается на последнем номере билета, так что это должно быть ошибкой клиента или функции SOAP. Кроме того, я проверил соединение SOAP с помощью этого фрагмента кода:

         $handle = curl_init($URL);
                                  curl_setopt($handle,  CURLOPT_RETURNTRANSFER, TRUE);
                                  $response = curl_exec($handle);
                                  $httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
                                  if($httpCode == 404) {
                                       echo "Connection failed";
                                  }else {
                                        echo "Connection OK";
                                  }  

и результат был Соединение OK.

ОБНОВИТЬ:

Я написал этот фрагмент кода, чтобы напечатать любую ошибку:

    $parameters = [
    'stream_context' => stream_context_create(
    array(
    'ssl' => array(
    'verify_peer => false,
 'verify_peer_name'  => false,
    )
)
)
try{
                                                                   
$client = new SoapClient($URL,$parameters); 
                                    
}catch(Exception $e){
    echo $e->getMessage();
}   

Результат был: SOAP-ERROR: анализ WSDL: не удалось загрузить с «http://localhost/otrs/nph-genericinterface.pl/Webservice/GenericTicketConnectorSOAP»: не удалось загрузить внешний объект http://localhost/otrs/nph -genericinterface.pl/Webservice/GenericTicketConnectorSOAP


person Ioannis Pantelidis    schedule 20.07.2020    source источник
comment
«Что здесь может пойти не так?» — включены ли у вас правильные отчеты об ошибках PHP, вы проверяли журнал ошибок?   -  person CBroe    schedule 20.07.2020
comment
К сожалению, я работаю на другом сервере, который не принадлежит мне, чтобы проверить журналы Apache. Я надеялся увидеть ошибку на текущей странице. Хотя расширение мыла было включено.   -  person Ioannis Pantelidis    schedule 20.07.2020
comment
Настройка среды, в которой вы действительно можете правильно развиваться, является вашей ответственностью, и надлежащее сообщение об ошибках является частью этого. Если у вас нет доступа к центральной конфигурации PHP, пытались ли вы включить ее хотя бы из своего скрипта?   -  person CBroe    schedule 20.07.2020
comment
как вы можете видеть в коде, я пытался напечатать ошибку в операторе if, print_r(Ошибка SOAP: (код ошибки: {$result->faultcode}, ошибка: {$result->faultstring}), E_USER_ERROR);   -  person Ioannis Pantelidis    schedule 20.07.2020


Ответы (1)


Проблема была решена добавлением в файл php.ini следующих строк:

ini_set('soap.wsdl_cache_enabled', '0'); 
ini_set('soap.wsdl_cache_ttl', '0');
person Ioannis Pantelidis    schedule 18.08.2020