Я все еще очень новичок в использовании php для вызова SoapClient. Недавно у меня есть проект, который мне нужно вызвать API из .net с помощью веб-службы SOAP.
Я не смогу увидеть фактический XML-код URL-адреса веб-службы, поскольку для доступа к нему требуется заголовок, поэтому протестируйте его через POSTMAN, он работает хорошо.
Тем не менее, он не работает при использовании php для вызова их веб-службы на локальном сервере (XAMPP) (другой адрес веб-службы работает нормально в приведенном ниже коде), но не уверен, что это не так:
$Auth = array(
'Content-Type' => 'text/xml',
'X-RW-Auth-Token' => '4f931e62-d8c8-439b-a4d7-0c29fc0e3dbe'
);
$client = new SoapClient("https://licensed-ws.ricewarnerdigital.com/process/RiskEngine/v1.0/EndPoint.asmx?wsdl");
$header = new SoapHeader(url,null, $Auth,false);
$client->__setSoapHeaders($header);
$param = array(
'RR_AgeNext' => '30',
'RR_TermSI' => '1000000',
'RR_TPDSI' => '3000000',
'RR_AnyOwn' => 'A'
);
$GetResponse = $client->GetQuotationsForParameters($param);
Неустранимая ошибка: необработанное исключение SoapFault: [WSDL] SOAP-ERROR: синтаксический анализ WSDL: невозможно загрузить из ‘…’: не удалось загрузить внешний объект «…» в / Applications / XAMPP / xamppfiles / htdocs / quote- tool / ricewarner_api.php: 11 Трассировка стека: # 0 /Applications/XAMPP/xamppfiles/htdocs/quote-tool/ricewarner_api.php(11): SoapClient-> SoapClient (‘https: // лицензия…’) # 1 {main} добавлено в /Applications/XAMPP/xamppfiles/htdocs/quote-tool/ricewarner_api.php в строке 11
Я наконец заставил его работать, в конце концов SoapClient не смог работать с веб-сервисом, который содержит слой лицензирования, поэтому мне пришлось использовать CURl для вызова. Ниже приведен код:
class GetPremiumData {
public function doXMLCurl($url,$postXML){
$CURL = curl_init();
curl_setopt($CURL, CURLOPT_URL, $url);
curl_setopt($CURL, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($CURL, CURLOPT_POST, 1);
curl_setopt($CURL, CURLOPT_POSTFIELDS, $postXML);
curl_setopt($CURL, CURLOPT_HEADER, false);
curl_setopt($CURL, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($CURL, CURLOPT_HTTPHEADER, array('Content-Type: text/xml','X-RW-Auth-Token: apiToken'));
curl_setopt($CURL, CURLOPT_RETURNTRANSFER, true);
$xmlResponse = curl_exec($CURL);
return $xmlResponse;
}
}
Других решений пока нет …