php调用webservice soap 实例代码-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 331566
  • 博文数量: 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′));

阅读(1914) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图