Время ожидания шлюза - MS Navision - PHP - PullRequest
0 голосов
/ 10 января 2019

У меня есть интеграция с 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 - делать то же самое, но не повезло.

Что-то я не так делаю?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...