PHP - 使用标头调用SoapClient,并返回致命错误

时间:2015-08-13 06:51:00

标签: php soap wsdl soapheader

我仍然很新兴使用php来调用SoapClient。最近我有一个项目,我需要使用Web服务SOAP从.net调用API。

我无法看到提供的Web服务URL的实际XML代码,因为它需要标头才能访问,因此通过POSTMAN进行测试,它运行良好。

但是,当使用php在localhost服务器(XAMPP)上调用他们的Web服务时,它不起作用,(其他Web服务地址在下面的代码上正常工作),不确定它出错的地方:

  $Auth = array(

    'Content-Type' => 'text/xml',
    'X-RW-Auth-Token' => '4f931e62-d8c8-439b-a4d7-0c29fc0e3dbe'

);

$client = new SoapClient("https://licensed-ws.ricewarnerdigital.com/process/RiskEngine/v1.0/EndPoint.asmx?wsdl");

$header = new SoapHeader(url,null, $Auth,false);

$client->__setSoapHeaders($header);

$param = array(
    'RR_AgeNext' => '30',
    'RR_TermSI' => '1000000',
    'RR_TPDSI' => '3000000',
    'RR_AnyOwn' => 'A'
);

$GetResponse = $client->GetQuotationsForParameters($param);

错误:

  

致命错误:未捕获的SoapFault异常:[WSDL] SOAP-ERROR:解析WSDL:无法从'...'加载:无法在/ Applications / XAMPP / xamppfiles / htdocs中加载外部实体“...” /quote-tool/ricewarner_api.php:11堆栈跟踪:#0 /Applications/XAMPP/xamppfiles/htdocs/quote-tool/ricewarner_api.php(11):SoapClient-> SoapClient('https://license ... ')在第11行的/Applications/XAMPP/xamppfiles/htdocs/quote-tool/ricewarner_api.php中抛出#1 {main}

1 个答案:

答案 0 :(得分:0)

我终于开始工作,最终SoapClient无法使用包含许可层的Web服务,所以我必须使用CURl来调用。以下是代码:

类GetPremiumData {

        public function doXMLCurl($url,$postXML){

        $CURL = curl_init();

        curl_setopt($CURL, CURLOPT_URL, $url); 
        curl_setopt($CURL, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
        curl_setopt($CURL, CURLOPT_POST, 1); 
        curl_setopt($CURL, CURLOPT_POSTFIELDS, $postXML); 
        curl_setopt($CURL, CURLOPT_HEADER, false); 
        curl_setopt($CURL, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($CURL, CURLOPT_HTTPHEADER, array('Content-Type: text/xml','X-RW-Auth-Token: apiToken'));
        curl_setopt($CURL, CURLOPT_RETURNTRANSFER, true);

        $xmlResponse = curl_exec($CURL);

        return $xmlResponse;
    }

}