最近对一个中型网站进行二次开中,碰到关于nusoap的使用。本人有幸参考原来前辈写的案例:特此拿出来分享。
基础问题直接跳过,下面有
NuSOAP webservice接口使用详解
的网址。好了。上代码。
服务端的代码如下:
<?php
/**
* Created by JetBrains PhpStorm.
* User: Administrator
* Date: 16-3-11
* Time: 下午1:52
* To change this template use File | Settings | File Templates.
* OLOCrm 会员信息yuCRM系统同步,内容包括,人员,订单等信息同步,发送站内信三个功能
*/
// add some library - start
require_once("../../index_service.php");
// - end
require_once("../lib/nusoap.php");
//订单信息参数
function order_info($data){
// $dbConnection = new PDO('mysql:dbname= ;host=localhost;charset=utf8', 'root', 'yang');
// $dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
// $dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//
// $stmt = $dbConnection->prepare('select order_sn,store_name,buyer_name,add_time,order_amount,shipping_fee,payment_name,order_state,store_id,seller_id,buyer_id,buyer_email from derytech_order where add_time >= :sku');
// $stmt->execute(array('data' => $data));
// $row= $stmt->fetchAll();
$row =Model()->query("select * from derytech_order where add_time >= {$data}");
return $row;
}
//参数方法
function OrderDataToCrm($data){
$OrderData = array();
try{
$list= order_info($data);
$index = 0 ;
foreach($list as $val){
$OrderData[$index]=array(
//订单号
'order_sn' => $val['order_sn'],
//店铺
'store_name' => $val['store_name'],
//买家
'buyer_name' => $val['buyer_name'],
//下单时间
'add_time' => $val['add_time'],
//订单总额
'order_amount' => $val['order_amount'],
//运费
'shipping_fee' => $val['shipping_fee'],
//支付方式
'payment_name' => $val['payment_name'],
//订单状态
'order_state' => $val['order_state'],
//店铺ID
'store_id' => $val['store_id'],
//卖家ID
'seller_id' => $val['seller_id'],
//买家ID
'buyer_id' => $val['buyer_id'],
//买家Email
'buyer_email'=>$val['buyer_email'],
);
$index++;
}
}catch(Exception $ex){
return null;
}
return $OrderData;
}
//初始化服务对象
//AppsBrandCarInfo('30');
$server = new nusoap_server();
$server->soap_defencoding = 'UTF-8';
$server->decode_utf8 = false;
$server->xml_encoding = 'UTF-8';
$server->configureWSDL('OrderDataToCrmwsdl');
$server->wsdl->addComplexType(
'orderInfo',
'complexType',
'struct',
'all',
'',
array(
'order_sn'=>array('name'=>'order_sn', 'type'=>'xsd:string'),
'store_name'=>array('name'=>'store_name', 'type'=>'xsd:string'),
'buyer_name'=>array('name'=>'buyer_name', 'type'=>'xsd:string'),
'add_time'=>array('name'=>'add_time', 'type'=>'xsd:string'),
'youhao'=>array('goods_name'=>'youhao', 'type'=>'xsd:string'),
'order_amount'=>array('name'=>'order_amount', 'type'=>'xsd:float'),
'shipping_fee'=>array('name'=>'shipping_fee', 'type'=>'xsd:float'),
'payment_name'=>array('name'=>'payment_name', 'type'=>'xsd:string'),
'order_state'=>array('name'=>'order_state', 'type'=>'xsd:int'),
'store_id'=>array('name'=>'store_id', 'type'=>'xsd:int'),
'seller_id'=>array('name'=>'seller_id', 'type'=>'xsd:int'),
'buyer_id'=>array('name'=>'buyer_id', 'type'=>'xsd:int'),
'buyer_email'=>array('name'=>'buyer_email', 'type'=>'xsd:string'),
));
$server->wsdl->addComplexType(
'orderInfoArray',
'complexType',
'array',
'',
'SOAP-ENC:Array',
array(),
array(
array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:orderInfo[]')
),
'tns:orderInfo'
);
//$server->register('OrderDataToCrm',array('data'=>'xsd:sting'), array('return'=>'tns:parameterInfo'));
$server->register('OrderDataToCrm',array('data'=>'xsd:string'),array('return'=>'tns:orderInfoArray'));
//最后一步,把客户端通过 post 方式提交的数据,传递给服务对象的 service 方法。
//service 方法处理输入的数据,调用相应的函数或方法,并且生成正确的反馈,传回给客户端。
// Use the request to (try to) invoke the service
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
这是对于SHOPNC的二次开发。所以数据库查询方面有PDO和SHOPNC的两种查询方式,可以直接忽略。
最关键的部分已经用红色字体标注了。如果是一维数组可以直接屏蔽掉红色代码,简单修改可以使用。
如果是二维数组的化,(对未接触过nusoap的我,可是头疼了两天)。不过好在可以照抄前辈的。
客户端:
require_once("lib/nusoap.php");
$client = new soapclient('http://localhost/souce/public_html/api/samples/MemberDataToCrm.php?wsdl',true);
//$proxy=$client -> getProxy(); // 创建代理对象 (soap_proxy 类 )
//$str=$proxy->MemberDataToCrm(); // 直接调用 WEB 服务
$result = $client->call('MemberDataToCrm');
print_r($result);
OL,不懂的慢慢看吧,看不懂的直接复制粘帖 ,简单修改就可以运行了