Преобразуйте PHP SOAP-вызов в Postman

#php #xml #soap #postman

Вопрос:

Я пытаюсь сделать звонок SOAP с помощью ПОЧТАЛЬОНА, который продублирует мой звонок с кодом PHP для тестирования, но я получаю сообщение об ошибке «Плохой запрос», поэтому я предполагаю, что мое преобразование неверно. PHP — код является:

 //Create xml string
                $xml=new DomDocument();
                $xml->createCDATASection('![CDATA[]]');
                $xml->encoding = 'utf-8';
                $xml->xmlVersion = '1.0';
                $xml->formatOutput = true;
                $xsd=$xml->createElement("xsd:schema");
                $xml->appendChild($xsd);
                $xsdattr=new DOMAttr("xmlns:xsd","http://www.w3.org/2001/XMLSchema");
                $xsd->setAttributeNode($xsdattr);
                $ZHT=$xml->createElement("ZHT",str_replace(" ","",$username));
                $xsd->appendChild($ZHT);
                $PASSWORD=$xml->createElement("PASSWORD",str_replace(" ","",$pwd));
                $xsd->appendChild($PASSWORD);
                $SNL=$xml->createElement("SNL",$date);
                $xsd->appendChild($SNL);
                $USERNAME=$xml->createElement("USERNAME","");
                $xsd->appendChild($USERNAME);
                $RETHASIMA=$xml->createElement("RETHASIMA","1");
                $xsd->appendChild($RETHASIMA);
                $LANG=$xml->createElement("LANG","");
                $xsd->appendChild($LANG);
                $ROLE=$xml->createElement("ROLE",$role);
                $xsd->appendChild($ROLE);
                $xmlstring=$xml->saveXML();
                
                //Set SOAP request
                    $baseURL=$url;
                    $arrContextOptions=array("ssl"=>array( "verify_peer"=>false, "verify_peer_name"=>false,'crypto_method' => STREAM_CRYPTO_METHOD_TLS_CLIENT));
               
                    $options = array(
                        'soap_version' => SOAP_1_1,
                        'trace'      => true,
                        'exceptions' => true,                // disable exceptions
                        'features' => SOAP_SINGLE_ELEMENT_ARRAYS,
                        'encoding' => 'UTF-8',
                        'cache_wsdl'=>WSDL_CACHE_NONE,
                    );
                    
                    $client  = new SoapClient($baseURL."?wsdl", $options); 
                    
                    $p=array(
                        "P_RequestParams" => array (
                                                                "RequestID"=>"48",
                                                                "InputData"=>$xmlstring
                                                            ) ,
                        "Authenticator" =>  array (
                                                            "Password"=>$authpass,
                                                            "UserName"=>$authuser
                                                        ),
                    );
                    
                    //SOAP call and response
                    $response=$client->ProcessRequestJSON($p);
 

И это тело, которое я создал в POSTMAN:

 <?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ProcessRequestJSON xmlns="****">
      <P_RequestParams>
        <RequestID>48</RequestID>
        <InputData>
            <?xml version="1.0" encoding="utf-8" ?>
                <schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
                    <PARAMS>
                        <ZHT>****</ZHT>
                        <PASSWORD>****</PASSWORD>
                        <SNL>***</SNL>
                        <USERNAME></USERNAME>
                        <RETHASIMA>1</RETHASIMA>
                        <LANG></LANG>
                        <ROLE>1</ROLE>
                    </PARAMS>
                </schema>
        </InputData>
      </P_RequestParams>
      <Authenticator>
        <UserName>****</UserName>
        <Password>****</Password>
      </Authenticator>
    </ProcessRequestJSON>
  </soap:Body>
</soap:Envelope>
 

Я не знаю, как установить определенные вещи на ПОЧТАЛЬОНА.
Например, следующая строка:

 $xsdattr=new DOMAttr("xmlns:xsd","http://www.w3.org/2001/XMLSchema");
 

Как мне установить DOMAttr в POSTMAN?
Или варианты?

Я настроил заголовки для XML: Тип содержимого: текст/xml Действие мыла: «*** * /ProcessRequestJSON» Тело: Raw (XML)

Я попытался поместить внутренний XML (внутри тега) в»», чтобы указать строку, но это тоже не сработало.

PHP-код работает правильно, вызов SOAP успешен и возвращает правильный ответ. Запрос ПОЧТАЛЬОНА возвращает сообщение об ошибке «Неверный запрос».

Комментарии:

1. Поскольку вы используете режим трассировки с SoapClient, вы можете получить последний запрос php.net/manual/en/soapclient.getlastrequest.php чтобы получить шаблон XML, который вы, возможно, могли бы просто поместить в postman (никогда не мылись с почтальоном, но ваш вопрос выглядит так, как будто вы хотите убедиться, что XML правильно перенесен, поэтому почему бы не скопировать его?)