【问题标题】:php soap empty outputphp 肥皂空输出
【发布时间】:2012-09-18 18:17:08
【问题描述】:

我是一位经验丰富的 PHP 程序员,但我实际上对 SOAP 一无所知。现在我必须使用它,因为我的客户需要自动生成 DHL 批次标签。我需要一些简单有效的帮助。

所以我向 DHL 发送了一个原始 XML 请求,我从他们的示例程序中复制了消息,但我总是得到一个空结果(没有错误)。我的 PHP 代码如下:

require_once('nusoap/lib/nusoap.php'); $endpoint = "https://test-intraship.dhl.com/intraship.57/jsp/Login_WS.jsp"; $client = new nusoap_client($endpoint, false); $msg = $client->serializeEnvelope(" bzalewski (...) "); $result=$client->send($msg, $endpoint); 回显$结果;

如前所述,消息只是被复制了,所以它一定没问题。 我也尝试了另一个端点:http://test-intraship.dhl.com/ws/1_0/ISService/DE.wsdl,但也没有结果(没有错误)。

请帮忙。

【问题讨论】:

  • 您需要使用 nusoap 吗?如果没有,并且如果您使用的是 php 5,请尝试使用 php 的内置 soap 函数(soap_client)。它具有更好的错误报告,并且比用于 php 4 的 nusoap 稳定得多。
  • @Raidenace:如何使用 PHP5 发送原始 XML?我试过但它没有用,因为我不知道我应该写成“位置”和“URI”。在我的问题中,您可以看到这两个地址是什么。但是命名空间呢? DHL 文档非常糟糕。
  • 我添加了一个答案,其中包含针对您发布的 WDL 的示例工作代码。看看..希望对您有所帮助!

标签: php soap


【解决方案1】:

Web 服务器是否以状态 200 响应?你说你得到一个空洞的回应吧?

使用这个免费的 GUI 工具 (http://webservicestudio.codeplex.com/) 进行 web 服务调用和可视化。您可以轻松加载 WSDL 并开始调用。

顺便说一句,打两份工作和学习是个好东西!坚持下去。

【讨论】:

    【解决方案2】:

    使用soap_client 时,您不需要传递原始XML。相反,您查看WSDL 并决定您要调用哪个Web 服务函数,以及它需要哪些参数。然后,通过传递 wsdl url 以及是否要跟踪(它有助于调试和填充)来创建一个 soap 客户端对象。然后使用这个soap客户端对象来调用你想要调用的任何web服务函数。如果函数调用需要参数,请将它们作为数组传递。我在下面发布了一个示例代码,它使用您提供的WSDL 并调用它的getVersion 函数。请注意,这个函数不需要参数,所以我没有传递任何东西。希望这可以帮助您入门..

    <?
    $client = new SoapClient('http://test-intraship.dhl.com/ws/1_0/ISService/DE.wsdl', array('trace' => 1));
    $res = $client->getVersion();
    print_r($res); 
    ?>
    

    这会从 DHL 网络服务返回以下值:

    stdClass Object
    (
        [Version] => stdClass Object
            (
                [majorRelease] => 1
                [minorRelease] => 0
                [build] => 14
            )
    
    )
    

    【讨论】:

    • 还有一个问题:如何发送我的 XML 请求?
    • 你的意思是你如何将请求提交给网络服务?如果您有 web 服务的 wsdl,您只需将其传递给soap_client。 soap_client 将自动从正确的 WSDL url 中找出端点和所有其他详细信息
    • 您知道生成批处理标签的函数名称以及包含该函数的 Web 服务的 wsdl url 吗?
    • createShipmentDD,我想
    • 使用我上面的代码,将$client-&gt;getVersion();替换为$client-&gt;createShipmentDD();。由于它的参数传递了一个包含您需要提供给 web 服务的所有字段的数组
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多