如何使用带有XML主体的PHP来调用SOAP调用

时间:2017-08-21 19:26:54

标签: php soap

我正在尝试使用SOAP调用PHP方法。

以下是我的代码:

$wsdl = 'LINK/RHOWS_RS_REQUISICAO?wsdl';
$options = array('login' => 'MYLOGIN','password' => 'MYPASS');

$xml = <<<EOT
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:rhow="http://xmlns.oracle.com/orawsv/RHOWS/RHOWS_RS_REQUISICAO">
   <soapenv:Header/>
   <soapenv:Body>
      <rhow:RHOWS_RS_REQUISICAOInput>
         <rhow:P_IDENTIFICACAO-VARCHAR2-IN>ASDASDADASDA</rhow:P_IDENTIFICACAO-VARCHAR2-IN>
         <rhow:P_RESULT-XMLTYPE-OUT/>
      </rhow:RHOWS_RS_REQUISICAOInput>
   </soapenv:Body>
</soapenv:Envelope>
EOT;

//echo $wsdl;   
$client = new SoapClient($wsdl, $options);

现在我想打印请求,但没有显示任何内容:

    $body = new SoapVar($xml,XSD_ANYXML);
    **$result = $client->RHOWS_RS_REQUISICAO($body);**
    print $client->__getLastRequest()."\n";
    print $client->__getLastResponse()."\n";

我把

var_dump($client->__getFunctions());  

结束它返回:

array(1) { [0]=> string(83) "RHOWS_RS_REQUISICAOOutput **RHOWS_RS_REQUISICAO**(RHOWS_RS_REQUISICAOInput $parameters)" } 

所以使用了

$result = $client->RHOWS_RS_REQUISICAO($body); 

但北上..

1 个答案:

答案 0 :(得分:0)

在您的代码中,您没有调用SOAP Web服务,您使用特定的wsdl定义配置SOAP客户端(您可以将wsdl的url复制到浏览器中,也可以看到结构。试试这个:

$client->__getFunctions();

列出此wsdl定义的所有功能

然后通过这种方式调用一个函数

$response = $client->someFunction($foo, $bar);

之后你应该返回这个函数,因为你的soap客户端真的发起了一个请求

print $client->__getLastRequest()."\n";
print $client->__getLastResponse()."\n";