PHP SOAP 请求不适用于 WSDL
PHP SOAP request not working with WSDL
我正在尝试使用名为 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 ( )
非常感谢!
所以我直接做了一些测试,很简单:
在 WSDL 上返回无效登录。
http://phpfiddle.org/main/code/3pvp-8wi9
您可以在此处查看我的代码和测试。当您测试时,在 TestFunction() 中使用他们的 bulit 而不是您想要 运行 的函数,这样您就可以看到错误在哪里。让我知道如何提供更多帮助。
编辑前,这是我的回复:
您首先需要确保您上次发送的完成该功能的请求没有错误。还要检查是否收到了响应。这可能有助于调试为什么要开始这样做。只需添加这两行代码,让我们知道您看到了什么:
print_r($soapClient->__getLastRequest());
print_r($soapClient->__getLastResponse());
此处的关键是确保您正确接收到响应。 Post 此响应,我很乐意帮助您调试它。
仅供思考,这里是我将如何设置此请求(未测试),但您的 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;
}
希望这对您有所帮助!发送您的结果以获得进一步帮助:)
POST 为 SIMPLXML 测试编辑:
替换:
print_r($versionResponse->Get_Syn_ComsendSoapOut);
有了这个:
$data = simplexml_load_file($versionResponse->Get_Syn_ComsendSoapOut);
print_r($data);
看看它给你带来了什么,希望它要么抛出描述性错误,要么处理结果(非常罕见,但有可能)!
我正在尝试使用名为 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 ( ) 非常感谢!
所以我直接做了一些测试,很简单:
在 WSDL 上返回无效登录。
http://phpfiddle.org/main/code/3pvp-8wi9
您可以在此处查看我的代码和测试。当您测试时,在 TestFunction() 中使用他们的 bulit 而不是您想要 运行 的函数,这样您就可以看到错误在哪里。让我知道如何提供更多帮助。
编辑前,这是我的回复:
您首先需要确保您上次发送的完成该功能的请求没有错误。还要检查是否收到了响应。这可能有助于调试为什么要开始这样做。只需添加这两行代码,让我们知道您看到了什么:
print_r($soapClient->__getLastRequest());
print_r($soapClient->__getLastResponse());
此处的关键是确保您正确接收到响应。 Post 此响应,我很乐意帮助您调试它。
仅供思考,这里是我将如何设置此请求(未测试),但您的 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;
}
希望这对您有所帮助!发送您的结果以获得进一步帮助:)
POST 为 SIMPLXML 测试编辑: 替换:
print_r($versionResponse->Get_Syn_ComsendSoapOut);
有了这个:
$data = simplexml_load_file($versionResponse->Get_Syn_ComsendSoapOut);
print_r($data);
看看它给你带来了什么,希望它要么抛出描述性错误,要么处理结果(非常罕见,但有可能)!