本文虽为译文,但是只是汲取了其它文章的部分,不过大部分是小编增添补充,为了让读者更清楚。如果自己调试不通过的话可能是使用的工具和soap版本造成的。可以到小编的资源中下载,资源名:php编写及调用webservice。
这两天一直在研究webservice soap是个什么东西,究竟怎么创建webservice,又如何用php调用webservice的接口,经过奋战,终于总算弄懂一点的。然后我做了一个webservice应用,然后使用php调用其接口,其功能只是简单的用户注册。
WSDL文件可以用工具生成的,推荐zeng studio。我下的是10.6.1版的,搞了半天都不知道在哪里生成WSDL文件,不过现在知道了,很简单,下面我就来演示一下如何生成这个WSDL文件。
下面我们就来生成WSDL文件了,new—>othor—>web service—>WSDL,这样就可以新建一个WSDL文件了,如图。
点击Finish就生成了。
然后我们就来修改WSDL文件,zeng studio为我们提供了可视化的操作,当然如果你牛的话,你当然是可以改文件代码的,其实关键也就几个东西,<portType><message><types><binding>弄懂了的话也不会太难。
本例中注册修改如下图所示:
登录的如下:
做完这一步,这个WSDL文件就基本可用了,但又两个问题需要注意:
- 做到这一步,有可能会测试失败,可能会因为没有进行binding,这个东西有时是需要手动来完成的,在binding上右键选择Generate Binding Content就行了。
- 第二个要注意的是php的WSDL缓存,在做测试时,一般要将WSDL缓存关闭,否则你使用的有可能是原来的WSDL文件,而不是更新过的。关闭缓存有两种方法,第一种就是直接到php.ini中设置soap.wsdl_cache_enabled = 0;第二种就是在php文件中添加一条语句,ini_set("soap.wsdl_cache_enabled", "0");
首先,肯定是要创建PHP工程的。然后我们来创建webservice服务器端的文件,新建一个Class,代码如下:ServerClass.php
<?php
class ServerClass {
private $username;
private $password;
private $email;
public function register($username,$password,$email) {
$this->username=$username;
$this->password=$password;
$this->email=$email;
$conn=mysql_connect("localhost","root","root");
if(!$conn) {
die("连接数据库失败".mysql_error());
}
mysql_select_db("manage_system") or die("选择数据库有误".mysql_error());
$db_username=mysql_query("select * from manage_member where username='$username'");
$num_username=mysql_num_rows($db_username);
$db_email=mysql_query("select * from manage_member where email='$email'");
$num_email=mysql_num_rows($db_email);
if($num_username==0 && $num_email==0) {
mysql_query("insert into manage_member (username,email,password) values ('$username','$email','$password')");
return true;
} else {
if($num_username!=0) {
echo "该用户已注册,请更改用户名重新注册";
return false;
}
if($num_email!=0) {
echo "该邮箱已注册,请更改邮箱重新注册";
return false;
}
}
}
}
?>
接着是server文件:server.php
<?php
include ("../service/ServerClass.php");
$Service = new SoapServer('http://localhost:86/wsdl/mysoap.wsdl');
$Service->setClass('ServerClass');
$Service->handle();
?>
客户端测试文件client.php
<?php
ini_set("soap.wsdl_cache_enabled", "0");
$username="zhangsan";
$password="789456";
$email="zhagnsan@qq.com";
$client=new SoapClient("http://localhost:86/wsdl/mysoap.wsdl");
//$param =array('username' =>$username,'password' =>$password,'email' =>$email);
$result=$client->register("$username","$password","$email");
if($result) {
echo "注册成功!用户名为:<font color='red'>{$username}</font>,
密码为:<font color='red'>{$password}</font>,
邮箱为:<font color='red'>{$email}</font>";
} else {
echo "注册失败!";
}
?>
做到这里,你就可以放心地测试,调用你的server程序了。顺便贴上WSDL的代码:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://localhost:86/wsdl/mysoap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="mysoap" targetNamespace="http://localhost:86/wsdl/mysoap/"> <wsdl:types> <xsd:schema targetNamespace="http://localhost:86/wsdl/mysoap/"> <xsd:element name="register"> <xsd:complexType> <xsd:sequence> <xsd:element name="username" type="xsd:string" /> <xsd:element name="password" type="xsd:string"></xsd:element> <xsd:element name="email" type="xsd:string"></xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="registerResponse"> <xsd:complexType> <xsd:sequence> <xsd:element name="registerResponse" type="xsd:boolean"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> </wsdl:types> <wsdl:message name="registerRequest"> <wsdl:part element="tns:register" name="parameters"/> </wsdl:message> <wsdl:message name="registerResponse"> <wsdl:part element="tns:registerResponse" name="parameters"/> </wsdl:message> <wsdl:portType name="mysoap"> <wsdl:operation name="register"> <wsdl:input message="tns:registerRequest"/> <wsdl:output message="tns:registerResponse"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="mysoapSOAP" type="tns:mysoap"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="register"> <soap:operation soapAction="http://localhost:86/wsdl/mysoap/register" /> <wsdl:input> <soap:body use="literal" /> </wsdl:input> <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="mysoap"> <wsdl:port binding="tns:mysoapSOAP" name="mysoapSOAP"> <soap:address location="http://localhost:86/service/server.php"/> </wsdl:port> </wsdl:service> </wsdl:definitions>
本文介绍如何使用PHP创建和调用WebService,并提供了一个简单的用户注册功能示例。包括WSDL文件生成、PHP代码实现及测试过程。





6595

被折叠的 条评论
为什么被折叠?



