/* load the private key from file - last arg is bool if key in file (true) or is string (false) */ $objKey->loadKey(PRIVATE_KEY, true); /* Sign the message - also signs appropiate WS-Security items */ $options = array("insertBefore" => false); $objWSSE->signSoapDoc($objKey, $options); /* Add certificate (BinarySecurityToken) to the message */ $token = $objWSSE->addBinaryToken(file_get_contents(CERT_FILE)); /* Attach pointer to Signature */ $objWSSE->attachTokentoSig($token); $objKey = new XMLSecurityKey(XMLSecurityKey::AES256_CBC); $objKey->generateSessionKey(); $siteKey = new XMLSecurityKey(XMLSecurityKey::RSA_OAEP_MGF1P, array('type' => 'public')); $siteKey->loadKey(SERVICE_CERT, true, true); $options = array("KeyInfo" => array("X509SubjectKeyIdentifier" => true)); $objWSSE->encryptSoapDoc($siteKey, $objKey, $options); $retVal = parent::__doRequest($objWSSE->saveXML(), $location, $saction, $version); $doc = new DOMDocument(); $doc->loadXML($retVal); $options = array("keys" => array("private" => array("key" => PRIVATE_KEY, "isFile" => true, "isCert" => false))); $objWSSE->decryptSoapDoc($doc, $options); return $doc->saveXML(); } } $wsdl = '<wsdl location>'; $sc = new MySoap($wsdl); try { $out = $sc->callmethod(1); var_dump($out); } catch (SoapFault $fault) { var_dump($fault); }
$objWSSE = new WSSESoap($doc); /* add Timestamp with no expiration timestamp */ $objWSSE->addTimestamp(); /* create new XMLSec Key using RSA SHA-1 and type is private key */ $objKey = new XMLSecurityKey(XMLSecurityKey::RSA_SHA1, array('type' => 'private')); /* load the private key from file - last arg is bool if key in file (true) or is string (FALSE) */ $objKey->loadKey(PRIVATE_KEY, true); /* Sign the message - also signs appropraite WS-Security items */ $objWSSE->signSoapDoc($objKey); /* Add certificate (BinarySecurityToken) to the message and attach pointer to Signature */ $token = $objWSSE->addBinaryToken(file_get_contents(CERT_FILE)); $objWSSE->attachTokentoSig($token); return parent::__doRequest($objWSSE->saveXML(), $location, $saction, $version); } } class Instances { public $instancesSet = null; } $wsdl = 'http://s3.amazonaws.com/ec2-downloads/ec2.wsdl'; try { $sClient = new MySoap($wsdl, array('trace' => 1)); /* Force location path - MUST INCLUDE trailing slash BUG in ext/soap that does not automatically add / if URL does not contain path cause POST header to be invalid */ $sClient->location = 'https://ec2.amazonaws.com/'; $objInstances = new Instances(); $test = $sClient->DescribeInstances($objInstances); var_dump($test); } catch (SoapFault $e) { var_dump($e); }
public function __doRequest($request, $location, $saction, $version, $one_way = 0) { $doc = new DOMDocument('1.0'); $doc->loadXML($request); $objWSSE = new WSSESoap($doc); /* Sign all headers to include signing the WS-Addressing headers */ $objWSSE->signAllHeaders = true; $objWSSE->addTimestamp(); $objWSSE->addUserToken($this->_username, $this->_password, $this->_digest); /* create new XMLSec Key using RSA SHA-1 and type is private key */ $objKey = new XMLSecurityKey(XMLSecurityKey::RSA_SHA1, array('type' => 'private')); /* load the private key from file - last arg is bool if key in file (true) or is string (FALSE) */ $objKey->loadKey(PRIVATE_KEY, true); /* Sign the message - also signs appropraite WS-Security items */ $objWSSE->signSoapDoc($objKey); /* Add certificate (BinarySecurityToken) to the message and attach pointer to Signature */ $token = $objWSSE->addBinaryToken(file_get_contents(CERT_FILE)); $objWSSE->attachTokentoSig($token); $request = $objWSSE->saveXML(); return parent::__doRequest($request, $location, $saction, $version); } } $wsdl = '<wsdl location>'; $sClient = new MySoap($wsdl); $sClient->addUserToken('<username>', '<password>'); try { $out = $sClient->callmethod(1); var_dump($out); } catch (SoapFault $fault) { var_dump($fault); }