Ver Mensaje Individual
  #20 (permalink)  
Antiguo 02/12/2010, 10:33
Avatar de cluster28
cluster28
 
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 11 meses
Puntos: 32
Respuesta: Como puedo ver el header enviado en soap?

Progresos:

Con este código:

Código PHP:
require('soap-wsse.php');
define('CERT_FILE''./certificado.cer'); 

class 
mySoap extends SoapClient 
{
    function 
__doRequest($request$location$saction$version
    {
        
$doc = new DOMDocument('1.0');
        
$doc->loadXML($request);
        
$objWSSE = new WSSESoap($doc);
  
        
/* Crear el objeto de seguridad, establece y carga la clave */
        
$objKey = new XMLSecurityKey(XMLSecurityKey::RSA_SHA1, array ('type'=>'public'));
        
$objKey->loadKey(CERT_FILETRUETRUE);

        
/* Firmamos el mensaje */

        
$objWSSE->signSoapDoc($objKey); 
        
$token $objWSSE->addBinaryToken($cert$isPEMFormat=TRUE$isDSig=TRUE);
        
$objWSSE->attachTokentoSig($token); 
        return 
parent::__doRequest($objWSSE->saveXML(), $location$saction$version);
    }
}

$wsdl 'DomOrder.wsdl';
      
// opciones de conexion
$options = array(
'location'=>'https://www.dominio.com/anacreon/servlet/APIv3',
'trace' => true,
);  
$sClient = new mySoap($wsdl$options);
$wrapper= new SoapVar("9300002"XSD_STRING);

try {
  
$result $sClient->getDetailsByDomain(new SoapParam("username""userName"),
                                         new 
SoapParam("password""password"),
                                         new 
SoapParam("reseller""role"),
                                         new 
SoapParam("es""langpref"),
                                         new 
SoapParam("999999998","parentid"),
                                         new 
SoapParam("directo.com""domainName"),
                                         new 
SoapParam(array("All"),"option"));
} catch (
SoapFault $fault) {
  echo 
'<pre>';
  
print_r($fault);
  echo 
'</pre>';

Consigo generar este XML:

Código XML:
Ver original
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="com.logicboxes.foundation.sfnb.order.DomOrder" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  3.     <SOAP-ENV:Header>
  4.         <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" SOAP-ENV:mustUnderstand="1">
  5.             <wsse:BinarySecurityToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" wsu:Id="pfxf1a07b50-4deb-f107-2911-e09bd531634e" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3">
  6.             </wsse:BinarySecurityToken>
  7.             <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
  8.                 <ds:SignedInfo>
  9.                     <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
  10.                     <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
  11.                     <ds:Reference URI="#pfxf381aa98-ef47-f225-0d05-29da0a5d1060">
  12.                         <ds:Transforms>
  13.                             <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
  14.                         </ds:Transforms>
  15.                         <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
  16.                         <ds:DigestValue>2jmj7l5rSw0yVb/vlWAYkK/YBwk=</ds:DigestValue>
  17.                     </ds:Reference>
  18.                 </ds:SignedInfo>
  19.                 <ds:SignatureValue></ds:SignatureValue>
  20.                 <ds:KeyInfo>
  21.                     <wsse:SecurityTokenReference>
  22.                         <wsse:Reference URI="#pfxf1a07b50-4deb-f107-2911-e09bd531634e"/>
  23.                     </wsse:SecurityTokenReference>
  24.                 </ds:KeyInfo>
  25.             </ds:Signature>
  26.         </wsse:Security>
  27.     </SOAP-ENV:Header>
  28.     <SOAP-ENV:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="pfxf381aa98-ef47-f225-0d05-29da0a5d1060">
  29.     .................
  30.     </SOAP-ENV:Body>
  31. </SOAP-ENV:Envelope>

Se supone que está todo correcto menos "<ds:SignatureValue></ds:SignatureValue>" que no consigo llenarlo porque me salen los Warnings:

Warning: openssl_sign() [function.openssl-sign]: supplied key param is a public key in /web/WSF/xmlseclibs2010.php on line 452

Warning: openssl_sign() [function.openssl-sign]: supplied key param cannot be coerced into a private key in /web/WSF/xmlseclibs2010.php on line 452

Poniendo que se trata de un certificado y su clave es pública consigo generar el XML pero sin "<ds:SignatureValue></ds:SignatureValue>".

Ya te digo que no puedo probarlo contra el WS, pero no tiene mala pinta.

Sigo trabajando....

Saludos

Última edición por cluster28; 02/12/2010 a las 10:42