PHP SOAP请求不使用WSDL

时间:2015-03-04 23:58:30

标签: php web-services soap 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() 非常感谢你!

1 个答案:

答案 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);

看看它给你的东西,希望它会抛出描述性的错误或处理结果(非常罕见,但可能)!