php soap空输出

时间:2012-09-27 02:38:27

标签: php soap

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

(...) 

");

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

echo $result;

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

请帮忙。

2 个答案:

答案 0 :(得分:3)

使用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 Web服务返回以下值:

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

)

答案 1 :(得分:1)

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

使用此免费GUI工具(http://webservicestudio.codeplex.com/)进行Web服务调用和可视化。您可以轻松加载WSDL并开始拨打电话。

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