die; } function var_error_log($object = null) { ob_start(); // start buffer capture var_dump($object); // dump the values $contents = ob_get_contents(); // put the buffer into a variable ob_end_clean(); // end capture return $contents; // log contents of the result of var_dump( $object ) } $parameters = $parser->get_soapbody(); $GLOBALS['res'] = $control->execute("{$h}_c.{$c}", $parameters); $server = new soap_server(); $server->configureWSDL('hellotesting', 'CENTER'); if (is_array($GLOBALS['res']) && count($GLOBALS['res']) > 0) { $pre = 'tns'; $ct = $c; $def = array(); foreach ($GLOBALS['res'] as $k => $v) { $def[$k] = array('name' => $k, 'type' => 'xsd:string'); } $server->wsdl->addComplexType($ct, 'complexType', 'struct', 'all', '', $def); } else { if (is_string($GLOBALS['res'])) { $pre = 'xsd'; $ct = 'string';
/** * processes SOAP message received from client * * @param array $headers The HTTP headers * @param string $data unprocessed request data from client * @return mixed value of the message, decoded into a PHP type * @access private */ function parseRequest($headers, $data) { $this->debug('Entering parseRequest() for data of length ' . strlen($data) . ' and type ' . $headers['content-type']); if (!strstr($headers['content-type'], 'text/xml')) { $this->setError('Request not of type text/xml'); return false; } if (strpos($headers['content-type'], '=')) { $enc = str_replace('"', '', substr(strstr($headers["content-type"], '='), 1)); $this->debug('Got response encoding: ' . $enc); if (eregi('^(ISO-8859-1|US-ASCII|UTF-8)$', $enc)) { $this->xml_encoding = strtoupper($enc); } else { $this->xml_encoding = 'US-ASCII'; } } else { // should be US-ASCII for HTTP 1.0 or ISO-8859-1 for HTTP 1.1 $this->xml_encoding = 'ISO-8859-1'; } $this->debug('Use encoding: ' . $this->xml_encoding . ' when creating nusoap_parser'); // parse response, get soap parser obj $parser = new nusoap_parser($data, $this->xml_encoding, '', $this->decode_utf8); // parser debug $this->debug("parser debug: \n" . $parser->getDebug()); // if fault occurred during message parsing if ($err = $parser->getError()) { $this->result = 'fault: error in msg parsing: ' . $err; $this->fault('SOAP-ENV:Client', "error in msg parsing:\n" . $err); // else successfully parsed request into soapval object } else { // get/set methodname $this->methodURI = $parser->root_struct_namespace; $this->methodname = $parser->root_struct_name; $this->debug('methodname: ' . $this->methodname . ' methodURI: ' . $this->methodURI); $this->debug('calling parser->get_soapbody()'); $this->methodparams = $parser->get_soapbody(); // get SOAP headers $this->requestHeaders = $parser->getHeaders(); // get SOAP Header $this->requestHeader = $parser->get_soapheader(); // add document for doclit support $this->document = $parser->document; } }
/** * This method parses, validates and routes the incoming request to the correct methods. * * @param string $soapaction optional, if not provided it will be taken from $_SERVER['HTTP_SOAPACTION'] * @param string $body optional, if not provided it will be taken directly from php://input */ public function handleRequest($soapaction = null, $body = null) { $this->log->LogSystemDebug('ebay', 'Incoming eBay notification'); if ($soapaction === null) { if (isset($_SERVER['HTTP_SOAPACTION'])) { // for some reason, the soapaction header value is double-quoted, so... $soapaction = stripcslashes(trim($_SERVER['HTTP_SOAPACTION'], '"')); if (!preg_match('#^http://developer\\.ebay\\.com/notification/([^/]+)$#', $soapaction, $matches)) { $this->log->LogSystemDebug('ebay', 'Invalid SOAPACTION header', $soapaction); return; } $soapaction = $matches[1]; unset($matches); } } if (!$soapaction) { $this->log->LogSystemDebug('ebay', 'No SOAPACTION header defined'); return; } if ($body === null) { $body = file_get_contents('php://input'); } // parse incoming xml require_once(ISC_BASE_PATH . '/lib/nusoap/nusoap.php'); $parser = new nusoap_parser($body); if ($parser->getError()) { $this->log->LogSystemDebug('ebay', 'eBay notification could not be parsed to xml: ' . $parser->getError(), $body); return; } unset($body); // validate signature as genuine ebay notification, see http://developer.ebay.com/DevZone/XML/docs/WebHelp/WorkingWithNotifications-Receiving_Platform_Notifications.html $header = $parser->get_soapheader(); $body = $parser->get_soapbody(); $providedSignature = $header['RequesterCredentials']['NotificationSignature']; $timestamp = $body['Timestamp']; $expectedSignature = base64_encode(md5($timestamp . GetConfig("EbayDevId") . GetConfig("EbayAppId") . GetConfig("EbayCertId"), true)); if (strcmp($expectedSignature, $providedSignature) !== 0) { $this->log->LogSystemDebug('ebay', 'eBay notification failed signature validation, provided signature was: ' . $providedSignature); return; } unset($expectedSignature, $providedSignature, $timestamp, $body, $header); // route to protected methods or ignore if a method for this notification is not implemented $method = '_handle' . $soapaction; if (!is_callable(array($this, $method))) { $this->log->LogSystemDebug('ebay', 'No processor defined for eBay notification event: ' . $soapaction); return false; } $body = $parser->get_soapbody(); unset($parser); $this->log->LogSystemDebug('ebay', 'Accepted eBay notification event: ' . $soapaction, '<pre>' . isc_html_escape(var_export($body, true)) . '</pre>'); return $this->$method($body); }