我正在尝试使用名为Chaverweb的SOAP服务。我有他们的WSDL;它是here。
当我尝试发出像GetCWVersion
之类的简单请求时,它正在运行,但每当我尝试请求需要某种身份验证的函数时,例如Get_Syn_Comsend
(获取机构的详细信息),它不起作用。
我尝试按照WSDL中的规定设置AuthHeader
,但它不起作用。
这是我的代码。我希望有一些显而易见的事情我没有做,因为这是我第一次使用SOAP:
try {
$soapClient = new SoapClient('https://www.chaverweb.net/Synagogue.asmx?WSDL');
$header = new SoapHeader('https://www.chaverweb.net/webservices/', 'AuthHeader', array("Username"=>"xx@yy.com", "Password"=>"...", "SynKey"=>"..."), false);
$header2 = new SoapHeader('https://www.chaverweb.net/webservices/', 'SFHeader', array("sf"=>""), false);
$soapClient->__setSoapHeaders(array($header, $header2));
$versionResponse = $soapClient->Get_Syn_Comsend();
print_r($versionResponse);
} catch (SoapFault $exception) {
echo "Exception: " . $exception->getMessage();
}
顺便说一下,这给了我:stdClass Object() 非常感谢你!
答案 0 :(得分:4)
所以我做了一些直接测试,这非常简单:
在WSDL上返回INVALID LOGIN。
http://phpfiddle.org/main/code/3pvp-8wi9
您可以在此处查看我的代码并进行测试。在测试时,在TestFunction()中使用它们的bulit而不是你想要运行的函数,这样你就可以看到错误的位置。让我知道如何能获得更多帮助。
在编辑之前,这是我的回应:
首先需要确保为完成该功能而发送的最后一个请求没有错误。还要检查是否收到了回复。这可能有助于调试您开始使用它的原因。只需添加这两行代码,让我们知道您的看法:
print_r($soapClient->__getLastRequest());
print_r($soapClient->__getLastResponse());
这里的关键是确保您正确收到回复。发布此回复,我很乐意帮助您调试它。
只是值得深思,以下是我将如何设置此请求(这未经过测试)但是wsdl中的定义显示您需要使用文字,而SoapClient在解释响应时并不总是使用正确的文档类型:
ini_set("soap.wsdl_cache_enabled", "0");
try {
$options = array('trace'=>1,
'exceptions'=> 1,
'style'=> SOAP_DOCUMENT,
'use'=> SOAP_LITERAL
);
$soapClient = new SoapClient('https://www.chaverweb.net/Synagogue.asmx?WSDL',$options);
$header = new SoapHeader('https://www.chaverweb.net/webservices/', 'AuthHeader', array("Username"=>"ofer.ungar@gmail.com", "Password"=>"demo1234!", "SynKey"=>"T21982011213"), false);
$header2 = new SoapHeader('https://www.chaverweb.net/webservices/', 'SFHeader', array("sf"=>""), false);
$soapClient->__setSoapHeaders(array($header, $header2));
$versionResponse = $soapClient->Get_Syn_Comsend();
print_r($versionResponse->Get_Syn_ComsendSoapOut);
} catch (SOAPFault $f) {
print $f;
}
希望这在某种程度上有所帮助!发送您的结果以获得进一步的帮助:)
SIMPLEXML TEST的POST编辑: 替换:
print_r($versionResponse->Get_Syn_ComsendSoapOut);
用这个:
$data = simplexml_load_file($versionResponse->Get_Syn_ComsendSoapOut);
print_r($data);
看看它给你的东西,希望它会抛出描述性的错误或处理结果(非常罕见,但可能)!