【问题标题】:PHP SOAP request not working with WSDLPHP SOAP 请求不适用于 WSDL
【发布时间】:2015-03-04 23:58:29
【问题描述】:

我正在尝试使用名为 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 ( ) 非常感谢!

【问题讨论】:

  • 你能解释一下“不工作”是什么意思吗?你有错误吗?如果是,那是什么错误。
  • 它返回一个空白的stdClass-页面显示stdClass Object ()
  • 格式和语法修复。
  • 您问题中的凭据是实际凭据吗?

标签: php web-services soap wsdl


【解决方案1】:

所以我做了一些直接测试,很简单:

在 WSDL 上返回无效登录。

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 测试的后期编辑: 替换:

print_r($versionResponse->Get_Syn_ComsendSoapOut);

用这个:

$data = simplexml_load_file($versionResponse->Get_Syn_ComsendSoapOut);
print_r($data);

看看它给了你什么,希望它要么抛出描述性错误,要么处理结果(非常罕见,但可能)!

【讨论】:

  • 尝试在你的两行中添加,这就是我得到的结果:stdClass Object () Exception: Function ("_getLastRequest") is not a valid method for this service
  • 那么它似乎正在将其转换为类似 xml 的格式。你试过一个simplexml_load_string吗?这种情况并不常见。它不再将其视为肥皂电话。
  • 你有你正在测试的实际页面来查看响应吗?
  • 我不明白你尝试 simplexml_load_string 的意思...抱歉,我对 SOAP 很陌生
猜你喜欢
  • 2017-01-17
  • 1970-01-01
  • 2019-04-01
  • 2013-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多