`

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 调用SAP SOAP webservice.docx

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

    java 调用https webservice实例及axis包

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

    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服务。 总的来...

    CFX构建webservice实例,与Spring整合;以及调用https协议的webservice,附带源码,及其证书

    - `源码`文件夹中可能包含了服务端的实现、Spring配置文件、客户端调用示例以及证书文件。 - 服务端代码会展示如何定义接口、实现接口并配置CXF发布服务。 - 客户端代码则展示了如何通过CXF客户端API调用HTTPS...

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

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

    金蝶调用Webservice接口-SOAP

    本文主要介绍如何使用SOAP(Simple Object Access Protocol)方式来调用Webservice接口,以金蝶为例进行详细讲解。 首先,了解SOAP。SOAP是一种基于XML的协议,用于在Web上交换结构化的和类型化的信息。它通过HTTP...

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

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

Global site tag (gtag.js) - Google Analytics