如何在PHP中获取SOAP帖子?

时间:2009-09-04 14:54:56

标签: php soap wsdl

使用SOAP确定n00b,

想要了解如何使用SOAP。

问题:

我有一个Java JSP,它将WSDL(看起来像XML格式)发布到我的PHP脚本中,但是如何在PHP脚本中获取它?每次WSDL的URL都不同。

我确定这很简单,但是我看不出我是怎么理解这个?

3 个答案:

答案 0 :(得分:6)

您可以尝试这样的事情:

try {                                                                                                                                                                           
  if (!($xml = file_get_contents('php://input'))) {
    throw new Exception('Could not read POST data.');
  }
} catch (Exception $e) {
  print('Did not successfully process HTTP request: '.$e->getMessage());
  exit;
}

这将读取$ xml变量的POST请求的主体,如果有,则打印错误。

答案 1 :(得分:0)

你的意思是JSP将POST请求中的WSDL发送到PHP脚本吗? 如果是这样,请查看$ _POST数组。如果您确切地指定JSP如何发送它,我可能会帮助您更多。

无论如何,一旦你在PHP脚本的变量中有了WSDL url,就可以使用SoapClient类。

答案 2 :(得分:0)

假设最佳方案:

$soapClient = new SoapClient($wsdlUrl, $soapOptions);
$soapClient->callYourMethod();

但是在使用SOAP时你可能会遇到很多砖墙。这是documentation for SoapClient

修改

因此,WSDL是POST。然后,如果XML字符串作为HTTP主体发送,则可以使用$HTTP_RAW_POST_DATA访问它,如果XML字符串作为多部分请求的一部分发送,则可以使用$_FILES超全局访问它。 / p>

这样的事情:

$wsdl = $HTTP_RAW_POST_DATA;
$wsdlUrl = 'data:text/xml;base64,' . base64_encode($wsdl);
$soapClient = new SoapClient($wsdlUrl);

无论如何,$HTTP_RAW_POST_DATA仅在php.ini设置always_populate_raw_post_data开启时可用。此外,如果请求是多部分,则会忽略此设置,但未填充$HTTP_RAW_POST_DATA,但您可以使用$_FILES访问已发布的部分。实际上,您可以使用php://input代替$HTTP_RAW_POST_DATA

此外,data URIs只能在php.ini中启用allow_url_fopen时使用。