我正在尝试连接Php中的Nav Web Services(后跟此Blog)。
但是它返回了一个错误:
SOAP-ERROR:解析WSDL:无法加载 'http://NavIP.com:7047/DynamicsNAV/WS/SystemService':开始标记 预期,'<'没找到。
你能告诉我哪里出错了吗?
提前感谢..
我的代码是:
// client.php
<?php
require_once("NTLMStream.php");
require_once("NTLMSoapClient.php");
try
{
// we unregister the current HTTP wrapper
stream_wrapper_unregister('http');
// we register the new HTTP wrapper
stream_wrapper_register('http', 'NTLMStream') or die("Failed to register protocol");
// Initialize Soap Client
$baseURL = 'http://NavIp.Com:7047/DynamicsNAVPMS/WS/';
$client = new NTLMSoapClient($baseURL.'SystemService');
// Find the first Company in the Companies
$result = $client->Companies();
$companies = $result->return_value;
echo "Companies:<br>";
if (is_array($companies)) {
foreach($companies as $company) {
echo "$company<br>";
}
$cur = $companies[0];
}
else {
echo "$companies<br>";
$cur = $companies;
}
}
catch(Exception $ex)
{
echo $ex->getMessage();
}
?>
答案 0 :(得分:0)
我正在处理完全相同的问题,但是没有找到解决方案,因为它们都回到了同一个脚本。您的问题是由于401错误代码(无法进行身份验证)而导致您没有得到任何结果,这正是我被困的地方。该脚本最终使用CURL进行连接,但不知何故失败了。
答案 1 :(得分:0)
使用此
$client = new NTLMSoapClient(null, $baseURL.'SystemService');
您错误地提供 baseURL ,其被视为 WSDL位置。在您的代码中,您似乎正在尝试提供服务端点。试试吧。
您还可以使用像“Wireshark”这样的数据包嗅探器。看看你得到了什么回应。预期的响应是一个xml,看起来好像没有返回。也许它是未经授权的返回401?这不是XML响应,也可能是原因。
此外,在哪里定义(&#39; USERPWD&#39;,&#39; user:pass&#39;);在你的代码?你没有使用身份验证吗?我有一种强烈的感觉,你只需要定义它。确保您定义了&#39;域名&#39;如果您使用的是域名,请在用户名字段中输入。所以,&#39;域\用户:传递&#39;。
这篇文章很好:http://blogs.msdn.com/b/freddyk/archive/2010/01/19/connecting-to-nav-web-services-from-php.aspx
答案 2 :(得分:0)
代替使用NTLM,请尝试使用非常简单的基本身份验证,然后使用cURL。这很容易。请参阅下面的代码以获取简单的实现。您可以使用SOAP或ODATA
您还应该使用称为Wizdler的Chrome扩展程序
有关基本实现,请参见下面的示例代码
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://navdynamicsip.com:port/WebService/WS/COMPANY NAME/Page/webservice",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_POSTFIELDS =>"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Envelope xmlns=\"http://schemas.xmlsoap.org/soap/envelope/\">\n<Body>\n<Read xmlns=\"urn:microsoft-dynamics-schemas/page/webservice\"></Read>\n</Body>\n</Envelope>",
CURLOPT_HTTPHEADER => array(
"Content-Type: text/xml; charset=utf-8",
"SoapAction: urn:microsoft-dynamics-schemas/page/webservice",
"Authorization: Basic " .base64_encode('username:password')
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);