%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/webservice/classes/general/soap/ |
Current File : //home/bitrix/www/bitrix/modules/webservice/classes/general/soap/soapclient.php |
<?php class CSOAPClient { /// The name or IP of the server to communicate with var $Server; /// The path to the SOAP server var $Path; /// The port of the server to communicate with. var $Port; /// How long to wait for the call. var $Timeout = 0; /// HTTP login for HTTP authentification var $Login; /// HTTP password for HTTP authentification var $Password; var $SOAPRawRequest; var $SOAPRawResponse; function CSOAPClient( $server, $path = '/', $port = 80 ) { $this->Login = ""; $this->Password = ""; $this->Server = $server; $this->Path = $path; $this->Port = $port; if ( is_numeric( $port ) ) $this->Port = $port; elseif( strtolower( $port ) == 'ssl' ) $this->Port = 443; else $this->Port = 80; } /*! Sends a SOAP message and returns the response object. */ function send( $request ) { $fullUrl = ($this->Port == 443 ? "https" : "http")."://".$this->Server.":".$this->Port.$this->Path; $uri = new \Bitrix\Main\Web\Uri($fullUrl); if($uri->getHost() == '') { $this->ErrorString = '<b>Error:</b> CSOAPClient::send() : Wrong server parameters.'; return 0; } else { $this->Server = $uri->getHost(); $this->Port = $uri->getPort(); $this->Path = $uri->getPathQuery(); } if ( $this->Timeout != 0 ) { $fp = fsockopen( $this->Server, $this->Port, $this->errorNumber, $this->errorString, $this->Timeout ); } else { $fp = fsockopen( $this->Server, $this->Port, $this->errorNumber, $this->errorString ); } if ( $fp == 0 ) { $this->ErrorString = '<b>Error:</b> CSOAPClient::send() : Unable to open connection to ' . $this->Server . '.'; return 0; } $payload = $request->payload(); $authentification = ""; if ( ( $this->login() != "" ) ) { $authentification = "Authorization: Basic " . base64_encode( $this->login() . ":" . $this->password() ) . "\r\n" ; } $name = $request->name(); $namespace = $request->get_namespace(); if ($namespace[strlen($namespace)-1] != "/") $namespace .= "/"; $HTTPRequest = "POST " . $this->Path . " HTTP/1.0\r\n" . "User-Agent: BITRIX SOAP Client\r\n" . "Host: " . $this->Server . "\r\n" . $authentification . "Content-Type: text/xml; charset=utf-8\r\n" . "SOAPAction: \"" . $namespace . $request->name() . "\"\r\n" . "Content-Length: " . (defined('BX_UTF') && BX_UTF == 1 && function_exists('mb_strlen') ? mb_strlen($payload, 'latin1') : strlen($payload)) . "\r\n\r\n" . $payload; $this->SOAPRawRequest = $HTTPRequest; if ( !fwrite( $fp, $HTTPRequest /*, strlen( $HTTPRequest )*/ ) ) { $this->ErrorString = "<b>Error:</b> could not send the SOAP request. Could not write to the socket."; $response = 0; return $response; } $rawResponse = ""; // fetch the SOAP response while ( $data = fread( $fp, 32768 ) ) { $rawResponse .= $data; } // close the socket fclose( $fp ); $this->SOAPRawResponse = $rawResponse; $response = new CSOAPResponse(); $response->decodeStream( $request, $rawResponse ); return $response; } function setTimeout( $timeout ) { $this->Timeout = $timeout; } function setLogin( $login ) { $this->Login = $login; } function getRawRequest() { return $this->SOAPRawRequest; } function getRawResponse() { return $this->SOAPRawResponse; } function login() { return $this->Login; } function setPassword( $password ) { $this->Password = $password; } function password() { return $this->Password; } } ?>