【问题标题】:PHP - Call SoapClient with header, and returns fatal errorPHP - 使用标头调用 SoapClient,并返回致命错误
【发布时间】:2015-11-06 00:21:12
【问题描述】:

我对使用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...') # 1 {main} 在第 11 行的 /Applications/XAMPP/xamppfiles/htdocs/quote-tool/ricewarner_api.php 中抛出

【问题讨论】:

  • 请发布您的 WSDL 的相关部分。我无法访问您代码中的 URL。
  • 这是API公司提供的唯一URL,支持人员说它必须发送标题信息才能访问...如果您使用邮递员,提供标题,它将起作用但不在php上。谢谢
  • 我的第一个猜测是您的 SOAP 信封有问题。这就是我要求 WSDL 的原因。
  • SOAP 信封本身没有问题,因为在它响应的邮递员上进行了测试。它与需要与信封相关联的标头 X-RW-Auth-Token 和 Content-Type 一起发布请求有关。但不确定为什么代码不起作用...
  • 请张贴您的<soapenv:Header> 标签。恐怕没有这个,我们无法帮助您。

标签: php soap wsdl soapheader


【解决方案1】:

我终于让它工作了,最终 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;
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 2021-04-14
    • 2016-09-16
    • 2011-10-09
    • 1970-01-01
    相关资源
    最近更新 更多