Ответ PHP SOAP Server в формате XML - PullRequest
0 голосов
/ 03 декабря 2018

Я создаю веб-сервис SOAP с использованием PHP.

Вот мой код ..

SoapServer.php

    class server{

        public function RegisterComplaint($strInputXml){
            $str = "<RESULT><complaintNo>09865678</complaintNo></RESULT>";
            $arr['RegisterComplaintResult'] = trim($str);
            return $arr;
        }

    }

    $custom_wsdl = 'custom.wsdl';
    $server = new SoapServer($custom_wsdl);


    $server->setClass('server');
    $server->handle();

Когда я звоню RegisterComplaint используя Wizdler (расширение chrome), я получаю следующий результат:

    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.Insurer.com/webservices/">
        <SOAP-ENV:Body>
            <ns1:RegisterComplaintResponse>
                <ns1:RegisterComplaintResult>&lt;RESULT&gt;&lt;complaintNo&gt;09865678&lt;/complaintNo&gt;&lt;/RESULT&gt;</ns1:RegisterComplaintResult>
            </ns1:RegisterComplaintResponse>
        </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

Здесь я хочу получить результат в формате ниже (специальные символы для сущностей HTML):

    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.Insurer.com/webservices/">
        <SOAP-ENV:Body>
            <ns1:RegisterComplaintResponse>
                <ns1:RegisterComplaintResult><RESULT><complaintNo>09865678</complaintNo></RESULT></ns1:RegisterComplaintResult>
            </ns1:RegisterComplaintResponse>
        </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

Делает ли что-нибудьзнаете, что мне нужно изменить для получения требуемого результата?

Я пытался html_entity_decode () & htmlspecialchars () в переменной $ str, но она не работает.

1 Ответ

0 голосов
/ 04 декабря 2018

Решение как ответ.(Уже цитируется в комментариях)

Класс SoapServer ожидает объект в качестве возвращаемого значения.Этот объект будет автоматически закодирован сервером с использованием определений из используемого файла wsdl.Если строка возвращается, ее сущности всегда будут закодированы.

class Server
{
    public function registerComplaint()
    {
        $registerComplaintResponse = new stdClass();
        $registerComplaintResult = new stdClass();
        $result = new \stdClass();

        $result->complaintNo = '09865678';
        $registerComplaintResult->RESULT = $result;
        $registerComplaintResponse->RegisterComplaintResult = $registerComplaintResult;

        return $registerComplaintResponse;
    }
}

Все определения возвращаемых типов (сложных типов) определены в файле wsdl.

...