【问题标题】:Sending commands to Navision SOAP Service向 Navision SOAP 服务发送命令
【发布时间】:2017-11-03 14:41:25
【问题描述】:

我尝试向 Navision 网络服务发送命令。为了尽可能地了解整个连接,我想首先使用简单的 cURL 命令。

我在 URL https://IP:PORT/.../Codeunit/Webservices 上尝试了简单的 GET 请求。在那里,我得到了一个包含所有命令的很长的 XML 结构。列表的一部分是一个简单的 echo 命令,我可以在其中发送一个字符串并将其取回。

这是它的描述:

<schema elementFormDefault="qualified" targetNamespace="urn:microsoft-dynamics-schemas/codeunit/Webservices" xmlns="http://www.w3.org/2001/XMLSchema">
  <element name="SoundCheck">
    <complexType>
      <sequence>
        <element minOccurs="1" maxOccurs="1" name="p_Text" type="string"/>
      </sequence>
    </complexType>
  </element>
  <element name="SoundCheck_Result">
    <complexType>
      <sequence>
        <element minOccurs="1" maxOccurs="1" name="return_value" type="string"/>
      </sequence>
    </complexType>
  </element>
...

现在我的问题是我不知道如何发送命令。我查看了这两个特殊的 SOAP 库:

我尝试了他们的方法,但没有任何效果。我的代码 sn-p 现在看起来像这样:

$headers = [
    'Method: GET',
    'Connection: Keep-Alive',
    'User-Agent: PHP-SOAP-CURL',
    'Content-Type: text/xml; charset=utf-8',
    'SOAPAction: "' . $action . '"',
];

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, $username . ':' . $password);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

$response = curl_exec($ch);

return $response;

我尝试发送$action 的各种值,但总是收到此错误:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><s:Fault>
    <faultcode xmlns:a="urn:microsoft-dynamics-schemas/error">a:System.ArgumentNullParametername: input</faultstring>
    <detail><string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">Der Wert darf nicht NULL sein.\nParametername: input</string></detail>
</s:Fault></s:Body></s:Envelope>

也许我误解了 navision 的整个 SOAP 流程,但我也没有在网络上找到任何真正好的教程。我究竟做错了什么?感谢您的帮助!

【问题讨论】:

    标签: php curl soap navision


    【解决方案1】:

    您应该尝试使用真正的 WSDL 到 PHP 生成器,因为它会真正减轻您对 SOAP Web 服务的使用。想了解它是如何工作的很好,但您应该从使用正确的类开始。

    首先,您不应该直接使用 curl,而应该使用原生 PHP SoapClient 类。这是使用 WSDL url 的起点,然后尝试在您的 SoapClient 实例上调用 __getTypes 和 __getFunctions 以了解 SOAP Web 服务的预期。

    然后尝试使用 WSDL 到 PHP 生成器,例如 PackageGenerator 项目。它基本上加载了 WSDL 声明的“类型”和“函数”,并将它们包装成基本的类和方法,然后您可以轻松地使用它们来发送请求和接收响应。

    【讨论】:

      猜你喜欢
      • 2016-04-27
      • 2016-01-23
      • 2023-04-05
      • 1970-01-01
      • 2017-01-01
      • 1970-01-01
      • 2018-01-03
      • 2019-01-15
      • 2013-08-22
      相关资源
      最近更新 更多