Могу ли я включить WS-RM (версия 1.2) с клиентом NuSOAP, как показано ниже? Я пробовал это, но я не могу получить данные от API. Есть идеи? Благодарю.
$client = new nusoap_client($api_link, array('reliable' => 1.2 , 'useWSA' => TRUE) );
Полный код:
try {
include_once 'WebServiceSOAP/lib/nusoap.php';
$api_link = 'https://www.my-api.com/MYAPI.svc/SSL?wsdl';
$acode = '###';
$uname = '###';
$ttype = '###';
$ccode = '###';
$hpass = '###';
//setting xml request to api
$credentials = '<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/" xmlns:ezr="http://schemas.datacontract.org/2004/07/EzremitAPI.Entities">
<soapenv:Header/>
<soapenv:Body>
<tem:GetLocalRates>
<!--Optional:-->
<tem:credentials>
<!--Optional:-->
<ezr:AgentCode>'.$acode.'</ezr:AgentCode>
<!--Optional:-->
<ezr:HashedPassword>'.$hpass.'</ezr:HashedPassword>
<!--Optional:-->
<ezr:Username>'.$uname.'</ezr:Username>
</tem:credentials>
<!--Optional:-->
<tem:payincurcode>'.$ccode.'</tem:payincurcode>
<!--Optional:-->
<tem:transferType>'.$ttype.'</tem:transferType>
</tem:GetLocalRates>
</soapenv:Body>
</soapenv:Envelope>';
//creating soap object
$client = new nusoap_client($api_link, array('cache_wsdl' => WSDL_CACHE_NONE, 'soap_version' => SOAP_1_2) );
$client->soap_defencoding = 'UTF-8';
$soapaction = "http://tempuri.org/IRateAPI/GetLocalRates";
$xmlobjs = $client->send($credentials, $soapaction);
$err = $client->getError();
if ($err) {
echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
exit();
}
//print_r($client);
print_r($xmlobjs);
}
catch(Exception $e) {
echo $e->getMessage();
}
?>
Я не очень хорош в PHP и SOAP. Над кодом может быть ошибки. Не могли бы вы проверить код и дать мне свои комментарии. Я сделал некоторые поправки после поиска в Google.
Кроме того, я могу запустить это на PHP 5.4.42? Когда я запускаю код выше, я получаю ошибку ниже.
Ошибка конструктора
Ошибка HTTP: неподдерживаемое состояние ответа HTTP 415 Не удается обработать сообщение, так как тип содержимого ‘text / xml; charset = UTF-8 ‘не был ожидаемым типом’ application / soap + xml; кодировка = UTF-8′ . (soapclient-> response содержит содержимое ответа)
Если кто-то ищет ответ на мой вышеупомянутый вопрос, я нашел решение с помощью @Marcel.
Ответ на вопрос:
Этот код неверен, не используйте его.
$client = new nusoap_client($api_link, array('reliable' => 1.2 , 'useWSA' => TRUE) );
Клиент NuSoap устарел и не поддерживает WS-RM. Мне пришлось использовать встроенное PHP-расширение SOAP, чтобы мой проект работал.
Полный ответ здесь: Ошибка SOAP в PHP: OperationFormatter обнаружил недопустимое тело сообщения
Спасибо
Других решений пока нет …