微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP SOAP 时间戳标头未定义

如何解决PHP SOAP 时间戳标头未定义

我正在尝试从我的源中修复以下错误,以使用此源 PHP8 连接到 SOAP 网络服务。

错误在第 53 行修复,对应于 $response = $sClient->additionalServicesConfirmation($requ);

有什么帮助或建议吗?

来源:

<?PHP

    error_reporting(-1);
    ini_set('display_errors',1);
    
    $wss = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd';
    $wsu = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd';
    $zrc = 'http://schemas.*****.**/ArchitectureHeader/v1_0';
    $wsd = 'https://****.*****.**/Policy/v1?wsdl';

    $cfg = ['usr' => 'AAAAAAA','pwd' => 'XXXXXXX','ctr' => 'ES','lng' => 'es','app' => 'XD'];
    
    $var = ['pza'  => '123456789','ndoc' => '00000000A','tipo' => 'N'];

    $date = date('Y-m-d\TH:i:s\Z');

    $sClient = new SoapClient($wsd,['trace' => true,'soap_version' => SOAP_1_2]);

    $parameters = [new SoapVar(['ns1:insuranceTypeCode' => 'PL','ns1:govIssueIdentType' => $var['tipo'],'ns1:identSerialNum'    => $var['ndoc'],'ns1:policyNumber'      => $var['pza']],SOAP_ENC_OBJECT)];

    $requ = new SoapVar($parameters,SOAP_ENC_OBJECT);

    $passdigest = base64_encode(pack('H*',sha1(pack('H*',mt_rand()).pack('a*',$date).pack('a*',$cfg['pwd']))));

    $auth = new stdClass();
    $auth->Username = new SoapVar($cfg['usr'],XSD_STRING,NULL,$wss,$wss);
    $auth->Password = new SoapVar($cfg['pwd'],$wss);
    $auth->Nonce    = new SoapVar($passdigest,$wss);
    $auth->Created  = new SoapVar($date,$wsu);

    $utoken = new stdClass();
    $utoken->Usernametoken = new SoapVar($auth,SOAP_ENC_OBJECT,'Usernametoken',$wss);
    
    $usr_tk = new SoapVar($utoken,$wss);
    $sec_sv = new SoapVar($usr_tk,'Security',$wss);

    $hArch = new SOAPHeader($zrc,"architectureHeader",(object)['country' => $cfg['ctr'],'language' => $cfg['lng'],'applicationId' => $cfg['app']]);
    $hAuth = new SOAPHeader($wss,$sec_sv,true);
    $hTime = new SOAPHeader($wsu,"Timestamp",(object)['Created' => $date],false);
                
    $sClient->__setSoapHeaders([$hArch,$hAuth,$hTime]);
    
    $response = $sClient->additionalServicesConfirmation($requ);

    print_r($response);

错误
致命错误:未捕获的 SoapFault 异常:[soap:Sender] 时间戳标头未定义。在 /var/www/pruebas.PHP:53 堆栈跟踪: #0 /var/www/pruebas.PHP(53): SoapClient->__call('additionalServi...',Array) #1 {主要} 在 53

行的 /var/www/pruebas.PHP 中抛出

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。