广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php调用webservice失败怎么解决
  • 755
分享到

php调用webservice失败怎么解决

2023-06-26 04:06:49 755人浏览 独家记忆
摘要

这篇“PHP调用WEBservice失败怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php调用webservice

这篇“PHP调用WEBservice失败怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php调用webservice失败怎么解决”文章吧。

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文件

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

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

<?phpclass ServiceTest{public function firstHandle($name){return "你的名字是:".$name;    }        public function dbInsert($text){        $db=new mysqli("localhost","root","","test");if(Mysqli_connect_error()){    return '数据库连接失败。';    exit;}        $result=$db->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 ('<pre>');    var_dump ( $x->__getFunctions () );//获取服务器上提供的方法    echo ('</pre>');    echo ('<pre>');    var_dump ( $x->__getTypes () );//获取服务器上数据类型    echo ('</pre>');}catch (SoapFault $f){    echo "Error Message: {$f->getMessage()}";}

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

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

注意!如果是在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类:

<?php   class SoapDiscovery {private $class_name = '';private $service_name = '';public function __construct($class_name = '', $service_name = '') {$this->class_name = $class_name;$this->service_name = $service_name;}public function getWSDL() {if (empty($this->service_name)) {throw new Exception('No service name.');}$headerWSDL = "<?xml version=\"1.0\" ?>\n";$headerWSDL.= "<definitions name=\"$this->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.= "<types xmlns=\"http://schemas.xmlsoap.org/wsdl/\" />\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 = '<portType name="'.$this->service_name.'Port">';$bindingWSDL = '<binding name="'.$this->service_name.'Binding" type="tns:'.$this->service_name."Port\">\n<soap:binding style=\"rpc\" transport=\"http://schemas.xmlsoap.org/soap/http\" />\n";$serviceWSDL = '<service name="'.$this->service_name."\">\n<documentation />\n<port name=\"".$this->service_name.'Port" binding="tns:'.$this->service_name."Binding\"><soap:address location=\"http://".$_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].$_SERVER['PHP_SELF']."\" />\n</port>\n</service>\n";$messageWSDL = '';foreach ($methods as $method) {if ($method->isPublic() && !$method->isConstructor()) {$portTypeWSDL.= '<operation name="'.$method->getName()."\">\n".'<input message="tns:'.$method->getName()."Request\" />\n<output message=\"tns:".$method->getName()."Response\" />\n</operation>\n";$bindingWSDL.= '<operation name="'.$method->getName()."\">\n".'<soap:operation soapAction="urn:'.$this->service_name.'#'.$this->class_name.'#'.$method->getName()."\" />\n<input><soap:body use=\"encoded\" namespace=\"urn:$this->service_name\" encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" />\n</input>\n<output>\n<soap:body use=\"encoded\" namespace=\"urn:$this->service_name\" encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" />\n</output>\n</operation>\n";    $messageWSDL.= '<message name="'.$method->getName()."Request\">\n";$parameters = $method->getParameters();foreach ($parameters as $parameter) {$messageWSDL.= '<part name="'.$parameter->getName()."\" type=\"xsd:string\" />\n";}$messageWSDL.= "</message>\n";$messageWSDL.= '<message name="'.$method->getName()."Response\">\n";$messageWSDL.= '<part name="'.$method->getName()."\" type=\"xsd:string\" />\n";$messageWSDL.= "</message>\n";}}$portTypeWSDL.= "</portType>\n";$bindingWSDL.= "</binding>\n";//return sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '</definitions>');    $fso = fopen($this->class_name . ".wsdl" , "w");         fwrite($fso, sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '</definitions>'));         exit; }public function getDiscovery() {return "<?xml version=\"1.0\" ?>\n<disco:discovery xmlns:disco=\"http://schemas.xmlsoap.org/disco/\" xmlns:scl=\"http://schemas.xmlsoap.org/disco/scl/\">\n<scl:contractRef ref=\"http://".$_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].$_SERVER['PHP_SELF']."?wsdl\" />\n</disco:discovery>";}} ?>

以上就是关于“php调用webservice失败怎么解决”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网PHP编程频道。

--结束END--

本文标题: php调用webservice失败怎么解决

本文链接: https://www.lsjlt.com/news/306837.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • php调用webservice失败怎么解决
    这篇“php调用webservice失败怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php调用webservice...
    99+
    2023-06-26
  • php调用webservice失败怎么办
    本文操作环境:windows7系统、PHP7.1版、DELL G3电脑php调用webservice失败怎么办?php编写webservice案例、webservice调用失败作为开发者来讲,要想写webservice接口或者调用别人的we...
    99+
    2014-12-17
    php webservice
  • 怎么解决php中调用time失败问题
    这篇文章主要讲解了“怎么解决php中调用time失败问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决php中调用time失败问题”吧!php中调用time失败是因为时区没有设置正确...
    99+
    2023-06-25
  • ajax调用php失败如何解决
    这篇文章主要讲解了“ajax调用php失败如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ajax调用php失败如何解决”吧!ajax调用php失败是因为ajax只能发起GET请求,而...
    99+
    2023-07-04
  • golang调用shell命令失败怎么解决
    如果在Golang中调用shell命令失败,可以尝试以下几种解决办法: 检查命令是否正确:确保调用的shell命令是正确的,可以...
    99+
    2023-10-26
    golang shell
  • ajax调用php失败怎么办
    本教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。ajax调用php失败怎么办?ajax请求php报500错误,ajax只能发起GET请求,而不能发POST请求,否则报500错误我是大标题1abc $.ajax({ ...
    99+
    2022-11-01
  • Java调用webservice出错怎么解决
    在Java中调用Web服务时出现错误可能是由于以下几个常见原因导致的: URL错误:请确保提供的Web服务URL是正确的,并且可...
    99+
    2023-10-21
    Java webservice
  • 怎么解决win7系统调用失败问题
    今天小编给大家分享一下怎么解决win7系统调用失败问题的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。解决方案一:使用IE浏览...
    99+
    2023-06-28
  • php中的unserialize失败怎么解决
    本篇内容介绍了“php中的unserialize失败怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php unserialize失败...
    99+
    2023-06-20
  • php连接mysql失败怎么解决
    如果PHP连接MySQL失败,可以尝试以下解决方法:1. 检查MySQL服务器是否正在运行,并确保MySQL服务器的主机名、用户名和...
    99+
    2023-08-14
    php mysql
  • php 中调用 time失败怎么办
    本文操作环境:windows7系统、PHP7.1版、DELL G3电脑php 中调用 time失败怎么办?php中使用time获取到当前小时数不对解决办法:通常是php.ini中的时区timezone设定没有设成中国Asia/Shangha...
    99+
    2016-04-01
    php time
  • php中session写入失败怎么解决
    本篇内容主要讲解“php中session写入失败怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php中session写入失败怎么解决”吧!php session写入失败是因为把sessi...
    99+
    2023-06-20
  • php压缩图片失败怎么解决
    PHP是一种流行的Web编程语言,其在图像处理领域也占有重要地位。尽管PHP自带了很多图像处理函数,但在我最近的项目中,我遇到了一个令人沮丧的问题 - 图片压缩失败。在这个项目中,我需要将用户上传的图片压缩到指定的尺寸和质量,以便在Web应...
    99+
    2023-05-14
    php
  • 怎么解决php unlink失败的情况
    这篇文章主要讲解了“怎么解决php unlink失败的情况”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决php unlink失败的情况”吧!php unlink失败的解决办法:首先打...
    99+
    2023-06-07
  • php移动文件失败怎么解决
    今天小编给大家分享一下php移动文件失败怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。php移动文件失败的解决办法:...
    99+
    2023-06-26
  • php api安全验证失败怎么解决
    这篇文章主要介绍“php api安全验证失败怎么解决”,在日常操作中,相信很多人在php api安全验证失败怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php api安全验证失败怎么解决”的疑惑有所...
    99+
    2023-06-21
  • 怎么解决owncloud php语言失败问题
    本篇内容主要讲解“怎么解决owncloud php语言失败问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么解决owncloud php语言失败问题”吧!owncloud php语言失败的解...
    99+
    2023-06-21
  • 怎么解决php curl请求失败问题
    本篇内容介绍了“怎么解决php curl请求失败问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php curl请求失败的解决办法:1、打...
    99+
    2023-06-22
  • php 163邮件发送失败怎么解决
    本篇内容介绍了“php 163邮件发送失败怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php 163邮件发送失败是因为163邮箱第...
    99+
    2023-06-22
  • 怎么解决php weixin配置失败问题
    小编给大家分享一下怎么解决php weixin配置失败问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!php weixin配置失败的解决办法:1、创建一个PHP...
    99+
    2023-06-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作