我要开始这样做,说我对此一无所知。我已经看了几天的代码,我无法围绕SOAP Feeds。我查阅了文档和视频以及其他堆栈溢出问题,但没有基本的了解,我只是没有拿起任何东西。
我有一份来自公司的文件,我正试图抓住他们的Feed,我希望将这些信息放入数据库中。他们给了我一些示例数据和PHP代码来启动我,但我无法让它工作。
<?php
require_once('../lib/nusoap.php'); // includes nusoap class
// Create object
$client = new nusoap_client('https://services.ironsolutions.com/SearchDataService/SearchDataService.asmx?wsdl', true);
$client->setHeaders("<AuthHeader><Email>webservice@ironsolutions.com</UserName><Password>IRON123</Password></AuthHeader>");
// Call method -- for all equip use null instead of Array(...)
$result = $client->call('GetInventoryList', Array('type' => "TR", 'make' => "CIH"));
if ($client->fault) { // fault if any
echo 'Fault'; print_r($result);
} else {
// Check for errors
$err = $client->getError();
if ($err) { // Display the error
echo 'Error' . $err ; }
else { // Display the result echo 'Result';
print_r($result); }
}
?>
现在我注意到在AuthHeader中它有一个Email开头和一个UserName关闭,我不确定它实际应该是哪一个。无论我做什么,我的屏幕都显示为空白,因此很难排除故障。
这是获取信息的方式吗?有更简单的方法吗?这里发生什么只返回一个空白页面?任何信息都会有所帮助。
答案 0 :(得分:0)
如果您不熟悉SOAP,那么找出Web服务的最佳方法是使用已知良好的客户端实现来访问Web服务。通过这种方式,您可以知道问题是否可能在服务器端出现问题。
SOAP UI很适合这种事情。使用SOAP UI,在您的示例中从WSDL创建了以下有效内容:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://services.ironsolutions.com">
<soapenv:Header>
<ser:AuthHeader>
<ser:Password>IRON123</ser:Password>
<ser:Email>webservice@ironsolutions.com</ser:Email>
</ser:AuthHeader>
</soapenv:Header>
<soapenv:Body>
<ser:GetInventoryList>
<ser:p_type>TR</ser:p_type>
<ser:p_make>CIH</ser:p_make>
</ser:GetInventoryList>
</soapenv:Body>
</soapenv:Envelope>
这显示了您的示例中的2个问题:
Email
是要使用的正确标记。type
和make
,但根据WSDL,它应为p_type
和p_make
。如果我不得不猜测,产生的空白屏幕是由于服务器端由于标头中的XML错误而无法反序列化SOAP消息而导致异常。如果您查看HTTP响应,则可能是500错误,表示服务器已关闭,但关闭了错误页面/堆栈跟踪。
尝试使用SOAP UI,让它工作,然后在PHP代码中重新创建SOAP UI消息。如果要调试PHP客户端如何形成SOAP消息,SOAP UI将允许您模拟服务,以便您可以拦截和查看PHP生成的SOAP消息。