Я попытался создать запрос для SOAP wsdl, запрос и ответ на запрос:
SOAP-запрос:
<soap:Envelope xmlns:soap = "http://www.w3.org/2003/05/soap-envelope" xmlns:sub = "http://subscriberprovisioning.ws.nvsmx.domain.com/">
<soap:Header/><soap:Body>
<sub:wsGetSubscriberProfileByID><subscriberID>123456789</subscriberID><alternateID></alternateID><parameter1></parameter1><parameter2></parameter2>
</sub:wsGetSubscriberProfileByID></soap:Body></soap:Envelope>
Ответ
<soap:Envelope xmlns:soap = "http://www.w3.org/2003/05/soap-envelope"><soap:Body><ns2:wsGetSubscriberProfileByIDResponse xmlns:ns2 = "http://subscriberprovisioning.ws.nvsmx.domain.com/">
<return><responseCode>200</responseCode><responseMessage>SUCCESS</responseMessage><subscriberProfile>
<entry><key>SUBSCRIBER_IDENTITY</key><value>123456789</value></entry>
</subscriberProfile></return></ns2:wsGetSubscriberProfileByIDResponse></soap:Body></soap:Envelope>
Я использую php для создания запроса, код выглядит следующим образом:
запрос.php
<?php
$client = new SoapClient("http://ipnumber:1988/services/Subscriber?wsdl");
$param = array('subscriberId' => '123456789');
$response = $client->wsGetSubscriberProfileByID ($param);
var_dump($response);
в приведенном выше коде 'subscriberId' => '123456789'
не передается в wsdl, и я получил ответ с отсутствующим параметром. Я также тестировал с использованием пользовательского интерфейса SOAP, и он работает. Любое предложение для моего php-кода.
Спасибо
Привет @KIKOSoftware, спасибо за ответ, можно подробнее?
Вам нужен только 1 SoapClient
, а не 2. Первый $soapclient->wsGetSubscriberProfileByID()
, похоже, не используется и имеет неопределенный аргумент. Это вполне очевидные недочеты в коде. Если вы их не видите, создание SOAP-запроса может оказаться для вас слишком сложной задачей.
Привет, @KIKOSoftware, я уже пытаюсь использовать только один SoapClient $client
, прежде чем спрашивать здесь, и сразу же позвонил $client->wsGetSubscriberProfileByID()
Я отредактировал свой код, о котором идет речь, в коде без двойного soapclient
Что ж, так лучше выглядит. Есть ли какая-либо документация для этого запроса SOAP? Очевидно, вам не хватает параметра, документация может сказать вам, какими они должны быть.
Я не уверен, но я буду просить. Но когда я попытался использовать SOAPUI, он работает хорошо, и я думаю, что $param = array('subscriberId' => '123456789');
это не переходит в wsdl. Спасибо @KIKOSoftware
Другими словами: что работает на вашем локальном хосте, порт 1988?
На самом деле это не локальный хост, это IP-адрес SOAP-сервера.
Ах, это сбивало с толку. Да, «ipnumber» лучше, чем «127.0.0.1».
Наконец, он заработал в этом коде:
try{
$soapclient = new SoapClient('http://ipnumber:1988//services/Subscriber?wsdl');
$param=array('subscriberID'=>'123456789');
$response =$soapclient->wsGetSubscriberProfileByID($param);
var_dump($response);
echo '<br><br><br>';
$array = json_decode(json_encode($response), true);
print_r($array);
echo '<br><br><br>';
echo '<br><br><br>';
foreach($array as $item) {
echo '<pre>'; var_dump($item);
}
}catch(Exception $e){
echo $e->getMessage();
}
Ваши строки кода кажутся удвоенными и в неправильном порядке. Начните с удаления двойников и расставьте строки в правильном порядке.