soap協(xié)議這個(gè)古老的通過wsdl文件通訊的協(xié)議,使用極其不方便,但是還有一些頑固的國(guó)企在使用,沒辦法,有一些需求必須跟他們對(duì)接接口,怎么辦呢,在使用soap協(xié)議調(diào)用時(shí)候,php在這方面資料很少,很容易用錯(cuò)。
目前在PHP業(yè)界有兩種使用方法:
一、使用soap擴(kuò)展調(diào)用
二、引入lib/nusoap.php庫(kù),來操作
今天我重點(diǎn)來介紹的是第一種使用辦法,第二種已經(jīng)落后于時(shí)代了,不建議使用。
特別注意:
php里面還有nowsdl的調(diào)用方式,不建議使用,原因:使用nowsdl過程發(fā)現(xiàn)只有php業(yè)務(wù)能正常通訊,其他語(yǔ)言調(diào)用服務(wù)無法正常使用,不能跨語(yǔ)言。
我今天給大家介紹的是通過wsdl文件生成的soap服務(wù),wsdl文件怎么生成可以使用zend工具。
具體來看代碼:
command.php就是soap的服務(wù)端
client.php 是客戶端
command.wsdl文件
command.php
ini_set("soap.wsdl_cache_enabled", "0");
Class WebService
{
private $returnSuccess = 'success';
private $returnFail = 'fail';
public function command($param = []){
return ['return' => $this->returnSuccess.json_encode($param)];
}
}
//這里可以用外部生成好的wsdl文件
$server = new SoapServer('command.wsdl', ['uri' => "command.php", 'encoding' => 'utf-8']);
//設(shè)置服務(wù)類名
$server->setClass("WebService");
$server->handle();
client.php
header('Content-Type: text/xml; charset=UTF-8');
$client = new SoapClient(
'http://127.0.0.1:8003/cmd-service/command.php?wsdl',
['encoding' => 'utf-8', 'cache_wsdl' => 0, 'compression' => true]
);
try {
$param =['enterpriseId' => 2,'randVal' => '111'];
//這里一定要加上parameters
$result = $client->__soapCall("command", ['parameters' => $param]);
} catch (Exception $e) {
echo $e->getMessage();exit;
}
echo $result->return;
command.wsdl文件
SoapDiscovery.class.php 下載這個(gè)類庫(kù)去生成 或者 用zend生成
require_once('command.php');
define('WSDL_FILE','command.wsdl');
if(!file_exists(WSDL_FILE)){
require_once('SoapDiscovery.class.php');
$sd = new SoapDiscovery('WebService', 'command');
$str = $sd->getWSDL();
file_put_contents(WSDL_FILE, $str);
}






