hola, mira a continuación te posteo nuevamente el script inicial modificado para que puedas pasar un certificado y logres enviar una petición firmada, si gustas lo hacemos paso a paso, por ahora te pongo el script, espero cuentes con los certificados digitales y claves privadas para ello.
Código PHP:
Ver original<?php
require('soap-wsse.php');
define('PRIVATE_KEY', './private.key'); define('CERT_FILE', './cert.crt');
class mySoap extends SoapClient {
function __doRequest($request, $location, $saction, $version) {
$doc = new DOMDocument('1.0');
$doc->loadXML($request);
$objWSSE = new WSSESoap($doc);
/* Marca de tiempo que expira luego de cinco minutos */
$objWSSE->addTimestamp(300);
/* Crear el objeto de seguridad, establece y carga la clave */
$objKey = new XMLSecurityKey
(XMLSecurityKey
::RSA_SHA1, array ('type'=>'private')); $objKey->passphrase = 'YOUR_PASSWORD_HERE';
$objKey->loadKey(PRIVATE_KEY, TRUE);
/* Firmamos el mensaje */
$objWSSE->signSoapDoc($objKey);
/* Agregamos el certificado */
$objWSSE->attachTokentoSig($token);
// je je je Sacamos las headers :)
// echo $objWSSE->saveXML();
return parent::__doRequest($objWSSE->saveXML(), $location, $saction, $version);
}
}
// opciones de conexion
'soap_version' => SOAP_1_1,
'local_cert' => CERT_FILE,
'connection_timeout' => 20,
'cache_wsdl' => WSDL_CACHE_NONE,
'exceptions' => true,
'user_agent' => 'mySoap',
'trace' => true,
);
$wsdl = 'https://devauth.utcc.utoronto.ca/wsbuild/services/1_0_0/PersonService?wsdl';
try {
$sClient = new mySoap($wsdl, $options);
///$wrapper->credentials->personId = new SoapVar("9300002", XSD_STRING);
//$wrapper = parametros del metodo que estes llamando.
$result = $sClient->getEmail($wrapper);
} catch (SoapFault $fault) {
print("Fault string: " . $fault->faultstring . "\n");
print("Fault code: " . $fault->detail->WebServiceException->code . "\n");
}
echo $sClient->__getLastRequest() . "\n" . $sClient->__getLastResponse();
?>
hasta alli bien es una primera etapa aun que es de notar que el script puede sufrir una pequeña variante dado el caso de que el metodo de transporte sea HTTP.
creo que vamos progresando jejejeje.
saludos y suerte.