0

0

php调用webservice失败怎么办

藏色散人

藏色散人

发布时间:2022-01-11 09:45:01

|

2875人浏览过

|

来源于php中文网

原创

php调用webservice失败的解决办法:1、去掉“;extension=php_soap.dll”前的分号并重启apache;2、创建WSDL文件并运行creatService.php文件;3、关闭WSDL缓存。

php调用webservice失败怎么办

本文操作环境:windows7系统、PHP7.1版、DELL G3电脑

php调用webservice失败怎么办?

php编写webservice案例、webservice调用失败

作为开发者来讲,要想写webservice接口或者调用别人的webservice接口,首先需要了解什么是webservice。

简单说, WebService就是一些站点开放一些服务出来, 也可以是你自己开发的Service, 也就是一些方法, 通过URL,指定某一个方法名,发出请求,站点里的这个服务(方法),接到你的请求,根据传过来的参数,做一些处理,然后把处理后的结果以XML形式返回来给你,你的程序就解析这些XML数据,然后显示出来或做其它操作。

在开始编写之前需要对php环境做一些配置:

打开php安装目录下的php.ini文件

立即学习PHP免费学习笔记(深入)”;

找到 ;extension=php_soap.dll ,去掉前面的分号,保存,然后重启apache。

配置好环境就可以编写php了,先创建creatService.php文件,复制下面代码:

query("insert into test_soap (text) values('".$text."')");
        
		if($result){
			return $result;
		}else{
			return "插入失败";
		}
    }
}

if(file_exists('ServiceTest.wsdl')){ //只有当ServiceTest.wsdl文件存在时才进行注册类
    $objSoapServer = new SoapServer("ServiceTest.wsdl");
    //注册ServiceTest类的所有方法 
    $objSoapServer->setClass("ServiceTest");
    //处理请求 
    $objSoapServer->handle();
}

require_once "SoapDiscovery.class.php";
$dis=new SoapDiscovery("ServiceTest","WebService"); //第一个参数为类名也是生成wsdl的文件名
$dis->getWSDL();



?>

第一次运行creatService.php文件时要创建wsdl文件,创建WSDL文件需要用到一个辅助类SoapDiscovery.class.php。在文章末尾可以得到。

创建完成之后便是测试调用,创建client.php文件,复制以下代码:

ini_set('soap.wsdl_cache_enabled','0');//关闭缓存

$x = new SoapClient("http://localhost/webServiceTest/ServiceTest.wsdl"); //这里的链接换成你自己的访问链接

try {
    echo $x->firstHandle('qweqrwergwe');

    echo ('
');
    var_dump ( $x->__getFunctions () );//获取服务器上提供的方法
    echo ('
');     echo ('
');
    var_dump ( $x->__getTypes () );//获取服务器上数据类型
    echo ('
'); }catch (SoapFault $f){     echo "Error Message: {$f->getMessage()}"; }

注意! ini_set('soap.wsdl_cache_enabled','0');    //关闭WSDL缓存

如果不关闭缓存,会造成测试无效,缓存数据会扰乱测试准确性。

Munch
Munch

AI营销分析工具,长视频中提取出最具吸引力的短片

下载

注意!如果是在thinkphp5中使用SoapClient函数应当如下使用:

$client = new \SoapClient ('http://www.baidu.com/ids/terminal/terminalWs.wsdl');

重要点:

使用https访问webservice的话会出现访问异常,博主就遇到这个问题的,本地创建和调用webservice都通过了,但是一放到线上就无法调用了,然后各种google、baidu。最后才发现线上的环境是http强制转了https。

我的解决办法是取消了http强制转换https的功能:

找到httpd-vhost.conf,注释掉一下代码:

##    RewriteEngine on
##    RewriteCond   %{HTTPS} !=on
##    RewriteRule   ^(.*)  https://%{SERVER_NAME}$1 [L,R]

注释掉上面的代码后我发现我的网站不是https了,呜呜呜~,真的是拆了东墙补西墙啊,赶紧想办法,因为网站必须使用https才行,还好我使用的是thinkphp框架,找到了一个方法,在入口文件index.php最下面加入下面的代码就行了:

if (empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] === "off") {
    $location = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    header('HTTP/1.1 301 Moved Permanently');
    header('Location: ' . $location);
    exit;
}

 

SoapDiscovery.class.php类:

class_name = $class_name;
		$this->service_name = $service_name;
	}
	
	/**
	 * SoapDiscovery::getWSDL() Returns the WSDL of a class if the class is instantiable.
	 * 
	 * @return string
	 **/
	public function getWSDL() {
		if (empty($this->service_name)) {
			throw new Exception('No service name.');
		}
		$headerWSDL = "\n";
		$headerWSDL.= "service_name\" targetNamespace=\"urn:$this->service_name\" xmlns:wsdl=\"http://schemas.xmlsoap.org/wsdl/\" xmlns:soap=\"http://schemas.xmlsoap.org/wsdl/soap/\" xmlns:tns=\"urn:$this->service_name\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns=\"http://schemas.xmlsoap.org/wsdl/\">\n";
		$headerWSDL.= "\n";
 
		if (empty($this->class_name)) {
			throw new Exception('No class name.');
		}
		
		$class = new ReflectionClass($this->class_name);
		
		if (!$class->isInstantiable()) {
			throw new Exception('Class is not instantiable.');
		}
		
		$methods = $class->getMethods();
		
		$portTypeWSDL = '';
		$bindingWSDL = '\n\n";
		$serviceWSDL = '\n\nservice_name.'Port" binding="tns:'.$this->service_name."Binding\">\n\n\n";
		$messageWSDL = '';
		foreach ($methods as $method) {
			if ($method->isPublic() && !$method->isConstructor()) {
				$portTypeWSDL.= '\n".'\ngetName()."Response\" />\n\n";
				$bindingWSDL.= '\n".'\nservice_name\" encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" />\n\n\nservice_name\" encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" />\n\n\n";
			    $messageWSDL.= '\n";
				$parameters = $method->getParameters();
				foreach ($parameters as $parameter) {
					$messageWSDL.= '\n";
				}
				$messageWSDL.= "\n";
				$messageWSDL.= '\n";
				$messageWSDL.= '\n";
				$messageWSDL.= "\n";
			}
		}
		$portTypeWSDL.= "\n";
		$bindingWSDL.= "\n";
		//return sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '');
	    $fso = fopen($this->class_name . ".wsdl" , "w"); 
        fwrite($fso, sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '')); 
        exit; 
	}
	
	/**
	 * SoapDiscovery::getDiscovery() Returns discovery of WSDL.
	 * 
	 * @return string
	 **/
	public function getDiscovery() {
		return "\n\n\n";
	}
}
 
?>

 推荐学习:《PHP视频教程

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2488

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1584

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1481

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

952

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1414

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1234

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1445

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1305

2023.11.13

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.6万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号