У меня есть интеграция с Microsoft Navision. Необходимо получать / отправлять данные оттуда, но в настоящее время возникают проблемы с подключением к сервисам через PHP. Вот что я попробовал:
<code><?php
require_once("NTLM/NTLMStream.php");
require_once("NTLM/NTLMSoapClient.php");
stream_wrapper_unregister('http');
stream_wrapper_register('http', 'NTLMStream') or die("Failed to register protocol");
$servicesURL = 'http://{IP}:{PORT}/TEST/WS/Services';
$baseURL = 'http://{IP}:{PORT}/TEST/WS/';
$CompanyName = "Company Name";
$pageURL = $baseURL.rawurlencode($CompanyName).'/Page/PolicyList';
echo "<br>URL of Item page: $pageURL<br><br>";
try{
$service = new NTLMSoapClient($pageURL);
var_dump($service);
}
catch (Exception $e) {
echo "<hr><b>ERROR: SoapException:</b> [".$e."]<hr>";
echo "<pre>".htmlentities(print_r($service->__getLastRequest(),1)).
";
}
stream_wrapper_restore ( 'HTTP');
?>
Дело в том, что ссылки на сервисы работают в браузере, но я не могу получить к ним доступ / подключиться через PHP. Я получаю следующую ошибку:
**Gateway Timeout**
The gateway did not receive a timely response from the upstream server or application.
PHP Fatal error: SOAP-ERROR: Parsing WSDL: Couldn't load from
'http://{IP}:{PORT}/TEST/WS/{Company Name}/Page/PolicyList' : Start tag expected,
'<' not found
NTLM включен в CustomSettings.config файл:
<add key="ServicesUseNTLMAuthentication" value="true" />
Я также добавил IP-адрес сервера и данные аутентификации (имя пользователя: пароль) в запросе:
class NTLMSoapClient extends SoapClient {
function __doRequest($request, $location, $action, $version, $one_way = 0) {
$headers = array(
'Method: POST',
'Connection: Keep-Alive',
'User-Agent: PHP-SOAP-CURL',
'Content-Type: text/xml; charset=utf-8',
'SOAPAction: "'.$action.'"',
);
$this->__last_request_headers = $headers;
$ch = curl_init($location);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
//curl_setopt($ch, CURLOPT_POST, true );
//curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);
curl_setopt($ch, CURLOPT_USERPWD, 'username:password');
curl_setopt($ch, CURLOPT_INTERFACE, '{server IP which was whitelisted}');
$response = curl_exec($ch);
return $response;
}
function __getLastRequestHeaders() {
return implode("\n", $this->__last_request_headers)."\n";
}
}
Я проверил сотни примеров, статей, следил за тем, что они делают, но все еще не могу получить никаких результатов от сервисов. Я также проверил следующий ответ , а также youtube video - делать то же самое, но не повезло.
Что-то я не так делаю?