Navision Web Serice xmlport使用PHP导入webservice

时间:2016-01-30 22:10:18

标签: php xml web-services navision

我正在尝试调用公开xmlport的WebService函数。我能够使用C#来实现这一点,但无法用PHP来解决这个问题。

当我在C#中执行此操作时,我添加了一个Web服务引用,它将我的xml端口公开给我的项目。我基本上填充了XML节点,我可以将它传递给我的Codeunit Web服务。我不确定如何在PHP中完成这项工作。

我是一名Nav Developer,正在与PHP开发人员一起开展Web集成项目。我对PHP知之甚少,他对Navision了解不多。

Top Screenshot是我的Codeunit函数,它已作为Web服务公开。底部的截图是我的.Net代码。突出显示的区域显示我使用Web服务的URL向我的项目添加了Web服务引用。

Nav Codeunit:

enter image description here

.Net代码:

enter image description here

2 个答案:

答案 0 :(得分:0)

您应该检查一些事项。 您是否将身份验证方法设置为NTLM?这是在Dynamics NAV服务的de CustomSettings.config文件中完成的,并且是PHP可以对NAV Web服务进行身份验证的唯一方法。

您应该设置此值:

 <add key="ServicesUseNTLMAuthentication" value="true" />

这里有一个工作示例: https://laravel.com/docs/5.1/eloquent#query-scopes

答案 1 :(得分:0)

如何从PHP

连接Navision的Web服务

第1步:检查配置

正如gbierkens已经指出的那样,您需要确保在 CustomSettings.config 文件中启用了NTLM:

<add key="ServicesUseNTLMAuthentication" value="true" />

第2步:发送HTTP请求:

就个人而言,我并不喜欢使用SoapClient或库来发送您的HTTP请求并处理您的回复。如果你知道如何在PHP中解析XML,你可以使用cURL并自己解析XML响应。

在这种情况下,向您的SOAP或Odata服务发送GET请求真的可以这么简单:

// Create curl handle
$ch = curl_init(); 

// Set HTTP options
curl_setopt($ch, CURLOPT_URL, $url);  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);   
curl_setopt($ch, CURLOPT_USERPWD, 'username:password'); 

// Get & output response (= XML string)
echo curl_exec($ch);

// Close handle
curl_close($ch);

第3步:解析您的回复:

解析SOAP响应可以这么简单:

$xml = simplexml_load_string(str_ireplace(['SOAP-ENV:', 'SOAP:'], '', $response));

注意:

如果您不喜欢阅读和编写原始SOAP消息,则可以使用Navision's Odata services代替。

我不仅发现Odata协议比SOAP协议更直观,它还具有支持Json而不是XML用于服务器和客户端之间通信的额外优势,这使得从标准PHP数组或对象的转换变得容易作为馅饼。