1

我是一位经验丰富的 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("
<soap:信封 xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\"
 xmlns:cis=\"http://dhl.de/webservice/cisbase\" xmlns:de=\"http://de.ws.intraship\">
<soap:标题>
<cis:Authentification><cis:user>bzalewski</cis:user>

(...)

");

$result=$client->send($msg, $endpoint);

回显$结果;

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

请帮忙。

4

2 回答 2

3

使用soap_client时不需要传递 raw XML。相反,您查看WSDL并决定要调用哪个 Web 服务函数,以及它需要哪些参数。然后通过传递 wsdl url 以及是否要跟踪(它有助于调试和填充)来创建一个肥皂客户端对象。然后使用这个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 Web 服务返回以下值:

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

)
于 2012-09-27T03:11:25.523 回答
1

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

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

顺便说一句,做两份工作和学习是好东西!保持。

于 2012-09-27T02:43:14.507 回答