我是一名经验丰富的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,但也没有结果(没有错误)。
请帮忙。
答案 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个工作和学习是好东西!坚持下去。