您好我是创建网络服务的开始,
我正在尝试使用soap协议创建一个Web服务,并且我不断收到以下错误:看起来我们没有XML文档。
以下是我的网络服务和响应输出。正如你会看到我在回应的开始时得到了bom字符(￿¿),我认为这是错误的根本原因,指定xml是无效的。请问有什么方法从我的客户端删除这些字符。所以我注意到我试图覆盖SoapClient的_doRequest方法,但没有成功。我的wsdl文件和服务器脚本都以UTF-8编码,没有BOM。
非常感谢任何解决此问题的帮助。
问候。
客户:
try{
ini_set("soap.wsdl_cache_enabled", "0");// disabling WSDL cache
libxml_disable_entity_loader(false);
if(!extension_loaded("soap")){ dl("php_soap.dll"); }
$client2 = new SoapClient("http://www.payafrik.com/PayAfrikAPI.wsdl",array("wsdl_cache"=>0,"trace"=>1,"exception"=>1));
$slabrequest["email"] = "tes@gmail.com";
$slabrequest["description"] = "test";
$slabrequest["montant"] = 50000;
$client2->slabAccount($slabrequest);
}catch(Exception $e){
var_dump( $e );
echo "<pre>"; echo "Request :<br/>", htmlentities($client2->__getLastRequest()), "<br/>";
echo "Response :<br/>", htmlentities($client2->__getLastResponse()), "<br/>";echo "</pre>";
}
.. 响应输出: 的 repSUCCESSuser4MonsieurGNACADJALoic 1RUE 1382LITTORAL1229COTONOU22921332680229972461401987-03-26loic.gnacadja@gmail.com646260ea6e66c61704c695e617f9b74alogin1309625000011242015-07-12 23:50:30
答案 0 :(得分:0)
这是一个有点老问题,但有同样的问题,所以我会解决这个问题,以防有人在这里被Google指示:)
不仅仅是BOM,而且在XML数据之前的任何额外数据(如新行)都会使 SoapClient 报告此错误。通常我们只是某些服务的客户,因此我们无法更改我们获得的消息或服务器配置。
通过将 SoapClient 跟踪设置为true,并调用SoapClient::__getLastResponse,我发现有趣的部分是从&lt; s:Envelope 开始 要删除额外的,不需要的数据,必须扩展 SoapClient ,仅删除所需信息,让 SoapClient 完成剩下的工作,并获得有效结果。
结束了像这样简单的事情:
class WSDLSoapClient extends SoapClient {
public function __doRequest($request, $location, $action, $version, $one_way = 0) {
$response = parent::__doRequest( $request, $location, $action, $version );
if (!$response) {
return $response;
}
// Cut only part that is a SOAP result
$matches = array();
preg_match('/<s:Envelope.*<\/s:Envelope>/s', $response, $matches);
return $matches[0];
}
}
希望它有所帮助, 干杯
答案 1 :(得分:0)
ob_start();
try(){
//
}catch(){
//
}finally(){
ob_end_clean();
}
//Use finally block with ob_end_clean() function to clean BOM characters