Chinaunix首页 | 论坛 | 博客
  • 博客访问: 333464
  • 博文数量: 68
  • 博客积分: 405
  • 博客等级: 一等列兵
  • 技术积分: 1288
  • 用 户 组: 普通用户
  • 注册时间: 2013-01-09 15:39
个人简介

本人从事 Linux Nginx Mysql PHP 开发多年,联系v:luhuang2003 ,希望接触到更新的web开发软件,开此博客希望能把自己的经验和接触的东西与大家进行共享。

文章分类

全部博文(68)

文章存档

2024年(1)

2013年(67)

我的朋友

分类: PHP

2013-05-18 16:55:27

SOAP 是一种基于 XML 的简易协议,允许应用程序通过 HTTP 来交换信息。或者更简单地讲,SOAP 是用于访问 web 服务的协议。
WSDL是一种用于描述Web Service的XML语言。它是一种机读格式,把所有的访问服务所必须的信息提供给Web Service客户端。NuSOAP专门提供一个类进行WDSL文件的解析,并且从中提取信息。soapclient对象使用wsdl类来减轻开发者调用服务的难度。通过WSDL信息的帮助来创建报文,程序员仅仅需要知道操作的名字和参数就能调用它。

下载文件:
1、

2、webservice 服务器端代码:
require(‘lib/nusoap.php’);

$server = new soap_server();
$server->configureWSDL(‘ynzywsdl’, ‘urn:ynzywsdl’);
$server->wsdl->schemaTargetNamespace = ‘urn:ynzywsdl’;
$server->wsdl->addComplexType(
‘Return’,
‘complexType’,
‘struct’,
‘sequence’,
”,
array(
‘action’ => array(‘name’=>’action’, ‘type’=>’xsd:string’),
‘result’ => array(‘name’=>’result’, ‘type’=>’xsd:string’),
‘uid’ => array(‘name’=>’uid’, ‘type’=>’xsd:string’),
‘error’ => array(‘name’=>’error’, ‘type’=>’xsd:string’)
)
);

############################################# Might And Hero ###################################################
$server->register(
‘Register’, // method name
array(‘username’ => ‘xsd:string’, ‘password’=>’xsd:string’, ‘email’=>’xsd:string’, ‘sign’=>’xsd:string’, ‘website’=>’xsd:string’, ‘customer_ip’=>’xsd:string’), // input parameters
array(‘return’ => ‘tns:Return’), // output parameters
‘urn:ynzywsdl’, // namespace
‘urn:ynzywsdl#Register’, // soapaction
‘rpc’, // style
‘encoded’, // use
‘Register’ // documentation
);

function Register($username, $password, $email, $sign, $website, $customer_ip){
global $db;
writefile(array(“username”=>$username,”password”=>md5($password),”email”=>$email, “sign”=>$sign, “website”=>$website, “ip”=>$customer_ip));

$ret = array(‘action’=>’Register’,'result’=>0, ‘uid’=>0, ‘error’=>”");

if(md5($username.”@$##Register e”)!=$sign){
writefile(array(“sign Erro\n”));
$ret['result'] = -3;
$ret['error'] = json_encode(array(“sign error!”));
return $ret;
}
return $ret;
}
############################################# Might And Hero ###################################################

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ”;

$server->service($HTTP_RAW_POST_DATA);

客户端代码:

require_once “lib/nusoap.php”;

/**
*
* snpclient – Lords Online WebService客户端访问类封装
*
*/
class LordsOnlineClient {
/**
* 英雄之城的WebService端URL
*
* @var string
* @access public
*/
public $url = ‘’;
private $baseGameUrl = ‘′;

/**
* soapclient实例
*
* @var Object
* @access private
*/
private $client = NULL;
private $error_str = ”;

/**
* 构造函数
*/
public function __construct ($p_url=”) {
if(!empty($p_url))
$this->url = $p_url;

$this->open();
}
/**
* 打开服务器,实际上是创建SOAP Client对象实例,并初始化一些参数
*
* @access public
*/
public function open() {
$this->close(); // 尝试关闭之前打开的服务器连接

$this->client = new nusoap_client( $this->url, ‘wsdl’ ); // 使用WSDL
$this->error_str = $this->client->getError();
if ($this->error_str) {
$this->close();
return false;
}

$this->client->soap_defencoding = ‘UTF-8′;
// 当 xml_encoding 设置为 UTF-8 时,NuSOAP 会检测 decode_utf8 的设置,如果为 true,
// 会执行 PHP 里面的 utf8_decode 函数,而 NuSOAP 默认为 true,因此,我们需要设置:
$this->client->decode_utf8 = false;
$this->client->xml_encoding = ‘UTF-8′;

return true;
}

/**
* 关闭服务器,实际上是释放SOAP Client对象实例
*
* @access public
*/
public function close() {
if ($this->client) {
unset($this->client);
$this->client = NULL;
$this->error_str = ”;
}
}

/**
* 获取Webservice连接错误信息
*
* @access public
*/
public function getError() {
if($this->error_str != ”){
return $this->error_str;
}
return false;
}

/**
* 是否打开服务器
*
* @return boolean 如果为true,则表示SOAP Client对象实例已经被创建,否则未被创建
* @access public
*/
public function isOpen() {
return ($this->client != NULL);
}
/**
* xmlToData()使用的XML解析递归函数
*
* @return array
* @access private
*/
private function RecurseXML($xml, &$vals, $parent=”") {
$child_count = 0;
foreach($xml as $key=>$value)
{
$child_count++;
$k = ($parent == “”) ? (string)$key : $parent . “.” . (string)$key;
if($this->RecurseXML($value, $vals, $k) == 0)
$vals[$k] = (string)$value['value'];
}
return $child_count;
}

/**
* 将WebService返回的XML结果转换成PHP数据变量,一般为一个数组
* 需要PHP 5.0的 SimpleXML 支持
*
* @$xml string XML文本
* @return array
* @access private
*/
private function xmlToData($xmlstr) {
$xml = new SimpleXMLElement($xmlstr);
$data = array();
$this->RecurseXML($xml, $data);

return $data;
}
/**
* 调用WebService函数并返回结果数组
*
* @$func string WebService函数名
* @$params string WebService函数调用参数
* @return array
* @access private
*/
private function call($func, $params) {
$result = $this->client->call($func, $params, ”, ”, false, true);
//echo $this->client->debug_str;
if ($this->client->fault)
{
return array(‘return’ => 100, ‘error’ => $this->client->faultstring);
}

$this->error_str = $this->client->getError();
if (!$this->error_str) // 成功
{
return $result;
}
else {
return array(‘return’ => 100, ‘error’ => $this->error_str);
}
}
/**
* 游戏币充值
*/
public function DoAddMoney($username, $password, $email,$sign) {
if ($this->client)
{
$params = array(‘username’ =>$username,
‘password’ =>$password,
‘email’=>$email,
‘sign’ => $sign
);

return $this->call(‘Register’, $params);
}
else {
return array(‘return’ => 100, ‘error’ => ‘Network communication error’);
}
}
}

$lordsClient = new LordsOnlineClient();
print_R($lordsClient->DoAddMoney(“Kaliyeweweddddd”,’222222′,”,’e53f65739d69147bc87220410e66b903′));

阅读(1920) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~