<?php
require('soap-wsse.php');

define('PRIVATE_KEY''<private.key>');
define('CERT_FILE''<public.crt>');

class 
mySoap extends SoapClient {

   function 
__doRequest($request$location$saction$version) {
    
$doc = new DOMDocument('1.0');
    
$doc->loadXML($request);

    
$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_KEYTRUE);

    
/* 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);
   }
}

  
$client = new mySoap("http://localhost/stockquote.wsdl");
try {
  print(
$client->getQuote("ibm"));
} catch (
Exception $e) {
    
var_dump($e);
}
?>