PHP SOAP-клиент с аутентификацией, необходимой при вызове функции - PullRequest
0 голосов
/ 05 июля 2018

Я совершенно новичок в использовании SOAP и ищу создание клиентского программного обеспечения, подключающегося к существующему сервису, который не предоставляет никаких ресурсов / демоверсий для PHP. Я хотел бы определить, что я делаю что-то не так с моим кодом, или, возможно, это системная проблема (я создал Apache2.4 / PHP7.2.7 в среде Windows Server 2008 R2).

Я уже потратил часы на то, чтобы протестировать вещи и просмотреть многочисленные другие темы, посвященные SOAP / PHP, здесь, и суть того, что я делаю в своем собственном потоке, заключается в том, что в SoapClient требуется аутентификация вызов, а скорее вызов $ client -> __ soapCall (function, params).

Во-первых, это то, что у меня есть в PHP.

$customerArray = array( $cust1 , $cust2, $cust3 );
$credentials = array(
 'login' => $login,
 'password' => $password,
);  

try{
    $client = new SoapClient($soaplink);//, $credentials);
} catch (Exception $e) {
    echo "<h2>Exception Error in SoapClient</h2>";
    echo $e->getMessage();
}   
var_dump($client->__getFunctions());

try{
    $response = $client->__soapCall("getCustomers", array($customerArray, $credentials));
}catch (Exception $e) {
    echo "<h2>Exception Error in soapCall</h2>";
    echo $e->getMessage();
}   
var_dump($response());

Первый блок try завершается с массивом учетных данных или без него. Второй блок try при попытке вызвать функцию возвращает исключение «похоже, у нас нет XML-документа».

Сервис SOAP предоставил демонстрационные XML-файлы, один из которых для этой функции выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope 
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Body>
        <ns1:getCustomers 
            soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
            xmlns:ns1="http://ws.praxedo.com/2008_07_01/customermodel/service"
        >
            <in0 
                soapenc:arrayType="soapenc:string[3]" 
                xsi:type="soapenc:Array" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
            >
                <in0 xsi:type="soapenc:string">CUSTOMER001</in0>
                <in0 xsi:type="soapenc:string">CUSTOMER002</in0>
                <in0 xsi:type="soapenc:string">CUSTOMER003</in0>
            </in0>
            <in1 
                xsi:type="soapenc:string" 
                xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
            >
                login|password
            </in1>
        </ns1:getCustomers>
    </soapenv:Body>
</soapenv:Envelope>

Также были предоставлены файлы WSDL, возможно, мне нужно загрузить их, но после демонстрации это не дало результатов. Я мог бы включить некоторые из WSDL сюда, но я считаю, что XML предоставляет все соответствующие детали?

Так может ли кто-нибудь узнать, что я не так делаю здесь, в своем PHP, или что я делаю, и мне нужно посмотреть на клиентскую сторону сервера Apache / SOAP?

1 Ответ

0 голосов
/ 06 июля 2018

Я настоятельно советую вам использовать генератор WSDL to PHP, так как он позволит вам без особых сложностей сконструировать запрос (в зависимости, как минимум, от вашего уровня знаний PHP).

Попробуйте проект PackageGenerator . Вы должны установить его, а затем сгенерировать PHP SDK. Сгенерированный SDK использует composer и содержит все классы и методы, необходимые для отправки любого запроса. Взгляните на автоматически созданный файл tutorial.php, который является хорошей отправной точкой.

...