Я использую 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