我正在尝试签署一个 XML 文件,并且在我提出的所有请求中都收到错误“哈希值不匹配”。
这是我的 XML
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://ws.hc2.dc.com/v1">
<soapenv:Body wsu:Id="id-2DCB6C8D1D61184E481607306401918160" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<v1:consultarHC2>
<v1:solicitud>
<v1:clave>75URP</v1:clave>
<v1:identificacion>888888881</v1:identificacion>
<v1:primerApellido>PRUEBAS</v1:primerApellido>
<v1:producto>64</v1:producto>
<v1:tipoIdentificacion>1</v1:tipoIdentificacion>
<v1:usuario>830514264</v1:usuario>
</v1:solicitud>
</v1:consultarHC2>
</soapenv:Body>
</soapenv:Envelope>
这是在 SoapUI oyEmssDWuGqQejZ4krpKmv2/KJc=中计算的 DigestValu=但是在 PHP 中计算的值是BzmNrO3Pdl1R6I1MWHw/QG5cn08=
我的规范化 Body 元素 (c14n) 如下所示:
<soapenv:Body xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://ws.hc2.dc.com/v1" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="id-2DCB6C8D1D61184E481607306401918160"> <v1:consultarHC2> <v1:solicitud> <v1:clave>75URP</v1:clave> <v1:identificacion>888888881</v1:identificacion> <v1:primerApellido>PRUEBAS</v1:primerApellido> <v1:producto>64</v1:producto> <v1:tipoIdentificacion>1</v1:tipoIdentificacion> <v1:usuario>830514264</v1:usuario> </v1:solicitud> </v1:consultarHC2> </soapenv:Body>
DigestValue 在 PHP 中计算如下:
//$data is equal to XML
$data = str_replace(["\r", "\n"], ['', ''], $data);
$doc = new DOMDocument('1.0', 'UTF-8');
$doc->loadXML($data);
$bodyNode = $doc->getElementsByTagName('Body')->item(0);
$canonicalized = $bodyNode->C14N();
//OR
$canonicalized = $bodyNode->C14N(true);
//OR
$canonicalized = $bodyNode->C14N(false,false);
$digest = base64_encode(hash('SHA1', $canonicalized, true));
//OR
$digest = base64_encode(pack("H*", sha1($canonicalized)));
请告诉我我做错了什么,我需要帮助我还没有设法在 SoapUI 中获得生成的值。