在 PHP 中使用 SOAP 协议调用 Web服务(WebService)

使用 PHP 中调用 WebService,听上去有些高深莫测啊。

其实这是很简单的一件事。由于 Web服务完全是基于 XML 这种平台无关性的标记语言来实现的,所以在 PHP中实现访问 WebService 是可能的。本例我们来完成这样一个 Web服务的调用:获取手机号信息。在互联网上找到这样一个 Web服务是比较容易的,这里我为大家提供一个现成的:http://www.webxml.com.cn/zh_cn/web_services_item.aspx?id=776756327947797A706B413D

该网站提供了一系列的 Web服务,其中有收费的,也有可以免费使用的。在您打开上述网址后,将会列出“通讯和通信”分类下的所有可用 Web服务。如果网站内容没发生改变,那么您在右侧看到的第一条即为“国内手机号码归属地查询WEB服务”。每个 Web服务下面,包括了三项地址:EndPoint、Disco和 Wsdl。至于这三项各代码什么含义,您可查询相关资料。这里我们要用到的是 EndPoint 和 Wsdl。

通过 EndPoint 我们可以了解如何使用该服务。打开 "EndPoint" 后面的地址:http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx

在新打开的页面中显示出来该服务下所包括的方法。这个服务有两个公有方法,分别是 getDatabaseInfo 获得国内手机号码归属地数据库信息 getMobileCodeInfo 获得国内手机号码归属地省份、地区和手机卡类型信息。

并且,需要注意的是两个方法的参数问题(如是否需要、需要几个参数)和它的返回结果。第一个方法 getDatabaseInfo 不需要参数,返回的结果是一个一维数组;而第二个方法 getMobileCodeInfo 则需要两个参数:mobileCode 和 userID,在实际使用中,这两个参数的值分别是需要查询地区的手机号和空字符串(免费用户),它返回结果是一个字符串。

而 Wsdl 这个地址,是我们在 php 程序中需要使用的地址,现在返回对 PHP 的介绍。

在目前的 PHP5 中,已经提供了对 SOAP 协议的支持(至于 SOAP 协议的解释,您可查询相关资料了解),它作为一种扩展存在于 PHP 中。在默认情况下,这个扩展是没有被开启的。开启该扩展的方法:打开 PHP.ini 文件,找到 ;extension=php_soap.dll 一行,将其前面的注释符“;”去掉,保存并重启 Apache 服务。现在开始代码编写,页面代码如下:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
   body{font-size:12px;}
</style>
</head>
<body>
<!-- 这里我随意指定一个手机号码,在下面的 PHP 代码中它会作为参数的一部分 -->
<h1>A phone No: 13973738080</h1>
<?php
//这里是该服务的 WSDL 地址
$wsdl="http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl";
//实例化 SoapClient,即 Soap 客户端
$client=new SoapClient($wsdl);
//使用 getMobileCodeInfo 方法,需要传递两次参数,需要注意的是,这两个参数须放到一个数组中
$onePhone=$client->getMobileCodeInfo(
      array(‘mobileCode‘=>‘13973738080‘,
       ‘userID‘=>‘‘
      )
);
//显示返回信息
print_r($onePhone);
?>
<hr />
<h1>All Information</h1>
<?php 
//调用另外一个方法,该方法不需要参数
$result=$client->getDatabaseInfo();
//显示其返回结果
print_r($result);
?>
</body>

看起来是很简单吧,是的,就这么简单。由于代码中给出了比较详细的注释,所以就不再作过多解释,但仍需要向读者说明以下几个问题:

1. SoapClient 是存在于 Soap.dll 扩展中的一个对象,用来“扮演” Soap 访问过程中的客户端,并为其提供相关功能。相应的,该扩展中同样存在一个用于提供(或创建) Web服务的 Soap 服务端,它的任务由 SoapServer 来完成。至于 SoapServer 对象,我将在后续的讲解中来说明它的用法。

2. SoapClient 的实例化:它的构造函数包括两处参数,一个是 WSDL 文件(即 WSDL 地址),一个是选项列表,后面这个参数是可选的,它用来完成更复杂的访问,如使用代理访问,或者提供服务器需要验证的用户名和密码,等等。这里不再详述,读者可参考相关资料。

3. SoapClient 实例化之后,就可以通过该实例化对象来调用该 WebService 的公有方法。

如果您对本文中介绍的方法有何意见或建议,请留下您的高见,欢迎交流。本文由 NBWD 原创,请放心转载。

原文地址:https://www.cnblogs.com/liquan1/p/11215535.html

时间: 2024-10-09 06:04:41

在 PHP 中使用 SOAP 协议调用 Web服务(WebService)的相关文章

TCP协议与Web服务基础

TCP协议工作在OSI模型的传输层,提供一个可靠的面向连接的服务,其可靠性在于,通信的双方要建立一个端到端的虚电路,通过三次握手建立通信,断开通信需要四次握手.其连接模型如下: 1.建立连接协议(三次握手) (1)客户端发送一个带SYN标志的TCP报文到服务器.(报文1) (2) 服务器端回应客户端的一个同时带ACK标志和SYN标志的TCP报文.(报文2).表示对刚才客户端SYN报文的回应:同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯. (3) 客户再次回应服务器端一个带ACK标志

使用ASP.NET AJAX 从脚本中调用Web 服务的应用方法

技能点:通过编写WebService,在页面js中调用WebService来进行数据查询. 网站开发,有些时候需要使用js在页面动态生成一些内容,但还有些数据要通过查询数据库才能获取的. 但由于诸如主键id等一些关键数据在后台不易获取,或在后台获取数据后不易直接在前台通过js使用. 这种情况下,使用js+ajax的方式来实现,效果也是不错的. 1.编写webservice: 1 using System; 2 using System.Collections.Generic; 3 using S

在 SQL Server 的存储过程中调用 Web 服务

介绍 一个老朋友计划开发一个应用,基于 .NET 和 Socket,但需要在存储过程中调用 Web 服务. 在这篇文章中我们将分享这个应用的经验,讲述如何在存储过程中调用 Web 服务,并传递参数. Step 1 首先我们在 Visual Studio 中创建一个 Web 服务项目: Step 2 接下来在服务中添加我们需要的方法,在这里我们创建 6 个方法,分别是 Greet (string Param1) ,HelloWord() , Add, subtract, 和 Divide (Num

CXF调用web服务

1.进入apache-cxf-2.7.6\bin目录,按住shift键,鼠标右键点击选择:  在此处打开命令窗口 2.输入 wsdl2java url ,url是对外发布的端口  ,    发布web服务示例: http://www.cnblogs.com/taobd/p/6691871.html 3.把生成的java文件复制到项目,示例如下: 1 package cn.bd.client; 2 import java.util.Date; 3 import javax.xml.bind.ann

asp.net(c#)用Ajax调用web 服务实现省市县三级联动

1.先说说硬件配置,我最开始是在Win7(I7 4770,8G RAM,2T硬盘)里装ubuntu10.10 64位系统(4G RAM,200G 硬盘)进行源码编译,大概花了3个多小时.而且还多次出现outofmemoryerror 错误.最后将硬件升级为I7 4770.16G内存.2T硬盘,不装虚拟机,直接跑Ubuntu 10.10系统,Swap分区为16G,编译一次大概花了40分钟,没有报任何错误. 所以不推荐在虚拟机里面跑. 2.根据官方文档配置编译环境: 官方文档说的是在"发布包/Sof

第二十天 TCP 及socket通信原理、http协议及web服务、httpd核心配置详解

一.TCP及socket通信原理详解 二.http协议及web服务原理(一) 三.http协议及web服务原理(二) 四.httpd核心配置详解 1.tcp.udp是一种传输协议,实现进程地址标记,套接字是一个虚拟设备,用来表明主机上的某个进程      众所周知:0-1023:管理员才有权限使用,永久地分配给某应用使用(由IANA分配)      注册端口:1024-41951:只有一部分被注册,分配原则上非特别严格.      动态端口或私有端口:41952-65535:由内核分配临时端口,

VS2013创建和调用Web服务

说到Web服务,我们主要有两种途径去创建和调用它,一种是基于Java的web服务,主要是JAX为主的:另一种是ASP.NET的方式去实现:相比之下,笔者更喜欢后者的实现方式,所以推出了Visual Studio的webservice教程. 第一步:先创建一个工程 第二步:选择Visual C#下面的Web项目,基于.NET4.5 第三步:创建服务方法 第四步:发布这个项目 第五步:配置发布选项 第六步:发布选项配置完成之后点击Finish 第七步:配置IIS,一般人的电脑上都没有预先配置这个,所

mvc路由引起异步调用web服务的问题

从一篇blog得知使用脚本可以异步调用Web服务,觉得很新鲜,因为自己很少用到Web服务,所以决定写一写看看什么效果. 首先在UI项目(我使用的是MVC4.0)里创建一个Web服务. 添加Web服务后,默认有一个HelloWorld方法.调用该方法有两种形式,一是服务端通过实例化对象调用,二是前端脚本异步 调用.代码分别是: 1.服务端调用 public ActionResult Index() { WebService1 ws = new WebService1(); var str = ws

动态调用web服务,当有实体类的时候 (只用于一个)

public class CCBWebSeviceHelper { public static int rowCount = 0; /// < summary> /// 动态调用web服务,当有实体类的时候 (只用于一个) /// < /summary> /// < param name="url">WSDL服务地址< /param> /// < param name="classname">类名<