Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中连接navweb服务_Php_Web Services_Nav - Fatal编程技术网

在php中连接navweb服务

在php中连接navweb服务,php,web-services,nav,Php,Web Services,Nav,我正在尝试用Php连接NAVWeb服务(后面是这个) 但它返回了一个错误: SOAP-ERROR:分析WSDL:无法从加载 '':开始标签 预期,我正在处理完全相同的问题,但没有找到解决方案,因为它们都返回到相同的脚本。您的问题是,由于401错误代码(无法验证),您没有得到任何结果,这正是我遇到的问题。脚本最终使用CURL进行连接,但不知怎的失败了。使用这个 $client = new NTLMSoapClient(null, $baseURL.'SystemService'); 您错误地提

我正在尝试用Php连接NAVWeb服务(后面是这个)

但它返回了一个错误:

SOAP-ERROR:分析WSDL:无法从加载 '':开始标签
预期,我正在处理完全相同的问题,但没有找到解决方案,因为它们都返回到相同的脚本。您的问题是,由于401错误代码(无法验证),您没有得到任何结果,这正是我遇到的问题。脚本最终使用CURL进行连接,但不知怎的失败了。

使用这个

$client = new NTLMSoapClient(null, $baseURL.'SystemService'); 
您错误地提供了被视为WSDL位置的baseURL。在代码中,似乎您正在尝试提供服务端点。试试看

您还可以使用类似“Wireshark”的数据包嗅探器来查看您得到的响应。预期的响应是一个xml,它似乎没有返回。也许它正在返回一个未经授权的401?这不是XML响应,也可能是原因之一

另外,其中是define('USERPWD','user:pass');在你的代码里?你没有使用身份验证吗?我有一种强烈的感觉,你只需要定义它。如果正在使用域,请确保在用户名字段中定义“域”部分。所以,“域\用户:通过”


这篇文章很好:

不要使用NTLM,尝试使用简单的基本身份验证,然后使用cURL。这很容易。有关简单的实现,请参见下面的代码。您可以使用SOAP或ODATA

您还应该使用一个名为

有关基本实现,请参见下面的示例代码

$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);
$curl=curl_init();
curl_setopt_数组($curl,数组(
CURLOPT_URL=>”https://navdynamicsip.com:port/WebService/WS/COMPANY 名称/页面/Web服务“,
CURLOPT_RETURNTRANSFER=>true,
CURLOPT_编码=>“”,
CURLOPT_MAXREDIRS=>10,
CULLOPT_超时=>0,
CURLOPT_FOLLOWLOCATION=>true,
CURLOPT_SSL_VERIFYPEER=>false,
CURLOPT_HTTP_VERSION=>CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST=>“获取”,
CURLOPT_POSTFIELDS=>“\n\n\n\n”,
CURLOPT_HTTPHEADER=>数组(
“内容类型:text/xml;字符集=utf-8”,
“SoapAction:urn:microsoft dynamics架构/page/webservice”,
“授权:基本”。base64_编码('用户名:密码')
),
));
$response=curl\u exec($curl);
$err=curl\u error($curl);
curl_close($curl);

Hi bernhard,我的域名错了,是y,它没有返回结果,现在运行正常。事实上,我在30号晚上已经解决了这个问题,但我没有在这里更新解决方案。无论如何,谢谢你的回复。
$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);