`

php soapClient证书调用https开头的webservice失败问题解决方案

阅读更多

这几天做了服务器的php版本升级,由5.4升级到5.6.19,其他部分都没问题,结果发现https的webservice证书调用失败,报:failed to load external entity错误,代码都没动过,初步判断升级后导致的,于是本地还原到5.4 果然又好使了。

以前调用代码为:

$params = array('id' => '2');

	$local_cert = "./client-cer.pem";
 	set_time_limit(0);
 	try{
 		//ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache
 		$wsdl='https://192.168.1.146:8443/pro/ws/getInfoService?wsdl';
 	//	echo file_get_contents($wsdl);
 		
 		$soap=new SoapClient($wsdl, 
	 				array(
	 					'trace'=>true,
		 				'cache_wsdl'=>WSDL_CACHE_NONE, 
		 				'soap_version'   => SOAP_1_1, 
		 				'local_cert' => $local_cert, //client证书信息
		                'passphrase'=> 'client', //密码
		               // 'allow_self_signed'=> true
	                )
				);
 		$result=$soap->sayHello($params);
 		$result_json= json_encode($result);
 		$result= json_decode($result_json,true);
 		echo '结果为:' . json_decode($result['return'],true);
 	}catch(Exception $e) {
 		$result['success'] = '0';
 		$result['msg'] = '请求超时';
 		echo $e->getMessage();
 	}
	echo '>>>>>>>>>>>';

 

根据官方解释如下:

After migrating to PHP 5.6.5, the soap 1.2 did not work anymore. So I solved the problem by adding optional parameters SSL.
My error: failed to load external entity
How to solve:
        // options for ssl in php 5.6.5
        $opts = array(
            'ssl' => array('ciphers'=>'RC4-SHA', 'verify_peer'=>false, 'verify_peer_name'=>false)
        );
        // SOAP 1.2 client
        $params = array ('encoding' => 'UTF-8', 'verifypeer' => false, 'verifyhost' => false, 'soap_version' => SOAP_1_2, 'trace' => 1, 'exceptions' => 1, "connection_timeout" => 180, 'stream_context' => stream_context_create($opts) );
        $oSoapClient = new SoapClient ( $url . "?WSDL", $params );

 所以更改代码为:

$opts = array (
			'ssl' => array (
					'ciphers' => 'RC4-SHA',
					'verify_peer' => false,
					'verify_peer_name' => false 
			) 
	);
	// SOAP 1.2 client
	$params = array (
			'encoding' => 'UTF-8',
			'verifypeer' => false,
			'verifyhost' => false,
			'soap_version' => SOAP_1_1,
			'trace' => 1,
			'exceptions' => 1,
			"connection_timeout" => 180,
			'stream_context' => stream_context_create ( $opts ),
			'local_cert' => $local_cert, // client证书信息
			'passphrase' => 'client'  // 密码
		);

	;
	$soap = new SoapClient ( $wsdl, $params );

  开始按这个做也报错,后来把soap_1_2更改为soap_1_1 好使了

 

分享到:
评论

相关推荐

    C#实现SOAP调用WebService

    最近写了一个SOA服务,开始觉得别人拿到我的服务地址,然后直接添加引用就可以使用了,结果"大牛"告知不行。...让我写一个SOAP调用服务的样例,我有点愣了,因为没做过这方面的,于是搞到了一个Demo,然后学习了下。

    调用https协议的webservice,以及证书手动加载

    调用https协议的webservice,以及证书手动加载。

    java 调用https webservice实例及axis包

    4. **调用Web Service**:使用生成的客户端代理类,通过其方法调用Web Service。注意,由于是HTTPS,所以在调用前可能需要建立SSL连接,处理身份验证等安全操作。 5. **处理异常**:在调用过程中,可能会遇到SSL...

    JAVA 调用SAP SOAP webservice.docx

    JAVA 调用 SAP SOAP webservice 详解 在本文中,我们将详细介绍如何使用 JAVA 调用 SAP SOAP webservice,包括配置 SAP 登录信息、创建 java 项目、添加 web 服务客户端、生成 JAVA 类、调用接口等步骤。 配置 SAP...

    webservice、soap等接口调用参考

    在标题和描述中提到的"webservice,soap调用",这是指使用SOAP协议来调用Web服务的过程。SOAP消息通常以HTTP或HTTPS作为传输协议,其结构主要由三个部分组成:Header、Body和Envelope。Header部分包含了关于消息处理...

    java+soap+webservice 调用模拟

    通过阅读提供的"java-soap-webservice"文档,你可以进一步了解具体的实现步骤,包括如何设置项目、配置JAX-WS、生成客户端代码、编写调用服务的代码,以及如何解析响应。实践中,不断动手操作和调试是掌握这一技术的...

    客户端调用webservice方式一(soap请求)

    本教程将详细讲解客户端如何通过SOAP(Simple Object Access Protocol)请求调用WebService,以实现根据订单号获取订单的物流信息。 **SOAP请求详解** SOAP是一种XML(eXtensible Markup Language)格式的消息协议...

    php调用webservice及myeclipse创建webservice实例

    在上述代码中,`__soapCall`是SoapClient类的一个特殊方法,用于调用Web服务的特定方法。'serviceName'是你要调用的服务方法名,参数是一个数组,包含传递给该方法的值。 接下来,我们探讨MyEclipse创建Web服务的...

    C#调用JavaWebService

    调用WebService,最简单的办法当然是直接添加WEB引用,然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,通过C#添加Web引用方式访问JavaWebService的方法,除了string...

    PHP使用SOAP调用WEBSERVICE接口

    PHP使用SOAP调用WEBSERVICE接口

    PB9-soap-WEBSERVICE例子.rar

    标题中的“PB9-soap-WEBSERVICE例子.rar”表明这是一个关于PowerBuilder 9(简称PB9)使用SOAP(简单对象访问协议)调用Web服务的示例压缩包。这个例子可能包含完整的代码、配置文件以及相关的说明文档,用于演示...

    Web Service SOAP Client set SOAP Header

    在Web服务领域,SOAP(Simple Object Access Protocol)是一种基于XML的协议,用于交换结构化和类型化的信息。当涉及到Web Service客户端与服务器之间的交互时,有时需要在SOAP消息中添加额外的信息,例如身份验证或...

    Java调用php的webservice

    ### Java调用PHP的Webservice知识点详解 #### 一、Webservice简介 Webservice是一种用于不同应用程序之间进行通信的技术标准,通常使用XML作为数据交换格式。它可以被部署在不同的平台上,并且可以使用不同的编程...

    SOAP调用webservice例子

    SOAP(Simple Object Access Protocol)是一种基于XML的协议,用于在Web服务中交换结构化和类型化信息。它允许不同系统间进行远程过程调用,即使它们运行在不同的操作系统或使用不同的编程语言。SOAP消息通常通过...

    PHP调用C#的webservice

    C# WebService,即基于.NET框架的ASMX(Advanced Services for Microsoft)或WCF(Windows Communication Foundation)服务,可以通过SOAP(Simple Object Access Protocol)协议提供远程方法调用。 **WebService**...

    C#调用使用java的带soaphead的webservice

    最后,`C#调用使用java的带saophead的webservice-说明书.docx`应该是详细的步骤指南,包含了如何配置和调用Web服务的具体细节。确保按照说明书的指示操作,以确保正确地设置了SOAP Header和调用了Web服务。 总的来...

    webservice调用终极解决方案_webservice_源码

    "webservice调用终极解决方案.docx"很可能包含了详细的步骤、示例代码和常见问题解答,它可以帮助开发者快速理解和应用这些解决方案。文档中可能涵盖了如何创建WSDL文件、如何生成客户端代理类、如何调试和测试Web ...

    C#通过SOAP使用HttpWebRequest调用带有身份验证的WebService示例

    本示例使用C#构造SOAP信息,通过HttpWebRequest调用java编写的带有Windows身份验证的WebService,代码中详细注释了每行代码的功能与作用; 对应文章:http://blog.csdn.net/cgs_______/article/details/77894599

    PHP利用SoapClient调用WCF服务

    SoapClient调用WCF服务,自己碰到的一些问题,特来分享

    Titanium中SOAPClient访问SOAP协议的WebService

    在IT行业中,Web服务是应用程序之间进行通信的一种标准方法,SOAP(Simple Object Access Protocol)是其中一种基于XML的协议,常用于远程调用和数据交换。Titanium是一个跨平台的JavaScript开发框架,允许开发者...

Global site tag (gtag.js) - Google Analytics