1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
<?php
class SoapClientModel extends BEAppModel
{
var $useTable = false;
protected $client = null;
protected $soapParams = array();
protected $connected = false;
public function setup($soapCfg = "default", array& $options = array()) {
$params = Configure::read("soap." . $soapCfg);
if(!empty($options)) {
$params = array_merge($params, $options);
}
$diff = array_diff_assoc($this->soapParams, $params);
if($this->client == null || !empty($diff) ) {
$this->soapParams = $params;
$this->initClient();
}
}
private function useNuSoap() {
return !empty($this->soapParams['useLib']) && $this->soapParams['useLib'] == "nusoap";
}
public function clientReady() {
return ($this->client != null && !empty($this->soapParams));
}
private function initClient() {
if($this->useNuSoap()) {
App::import ('Vendor', 'nusoap', array ('file' => 'nusoap' . DS . 'nusoap.php') );
$this->client = new nusoap_client($this->soapParams["wsdl"], "wsdl");
if(!empty($this->soapParams["debugLevel"])) {
$this->client->setDebugLevel($this->soapParams["debugLevel"]);
}
} else {
$options = array_diff_key($this->soapParams, array("useLib" =>"", "wsdl"=> "", "debugLevel"=> ""));
if(!empty($this->soapParams["debugMode"])) {
$options["trace"] = 1;
}
$this->client = new SoapClient($this->soapParams["wsdl"], $options);
}
}
public function debugMsg() {
$res = null;
if($this->useNuSoap()) {
$res = $this->client->getDebug();
} else {
$res = "REQUEST HEADERS:\n" . $this->client->__getLastRequestHeaders();
$res .= "\nREQUEST:\n" . html_entity_decode($this->client->__getLastRequest());
$res .= "\nRESPONSE HEADERS:\n" .$this->client->__getLastResponseHeaders();
$res .= "\nRESPONSE:\n" . html_entity_decode($this->client->__getLastResponse()) . "\n";
}
return $res;
}
public function call($method, array $params) {
if(!$this->clientReady()) {
$this->setup();
}
$res = null;
if($this->useNuSoap()) {
$res = $this->client->call($method, $params);
} else {
try {
$res = call_user_func_array(array($this->client, $method), $params);
} catch (Exception $e) {
$this->log($e->getMessage());
}
}
if(!empty($this->soapParams["debugMode"])) {
$this->log($this->debugMsg(), LOG_DEBUG);
}
return $res;
}
}
?>