【问题标题】:Navision Web Serice xmlport import webservice using PHPNavision Web Serice xmlport 使用 PHP 导入 webservice
【发布时间】:2016-01-30 22:10:17
【问题描述】:

我正在尝试调用公开 xmlport 的 WebService 函数。我可以使用 C# 使其工作,但无法使用 PHP 解决。

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

我是一名导航开发人员,正在与一名 PHP 开发人员一起开发一个 Web 集成项目。我对PHP不太了解,他对Navision也不太了解。

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

导航代码单元:

.Net 代码:

【问题讨论】:

    标签: php xml web-services navision


    【解决方案1】:

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

    你应该设置这个值:

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

    这里有一个工作示例: http://blogs.msdn.com/b/freddyk/archive/2010/01/19/connecting-to-nav-web-services-from-php.aspx

    【讨论】:

    • 嗨 gbierkens,感谢您的回复。他正在使用某种包装类来使用 NTLM,因此该部分有效。我看过你放在上面的文章,甚至给作者发了电子邮件。我发现它与传递的 XML 中使用的名称空间有关。事实证明,Nav 无法处理某些命名空间。
    • 啊,好的。我遇到过同样的问题。在 PHP 中,您可以删除以下代码:blog.artea.info/…
    【解决方案2】:

    如何通过 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 数组或对象之间的转换变得容易作为馅饼。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多