SOAP错误 - 在非WSDL模式下're'选项是必需的

9
当我尝试测试通信Web服务时,出现了以下代码错误:
Fatal error: Uncaught SoapFault exception: [Client] SoapClient::SoapClient(): 'uri' option is required in nonWSDL mode in /home/site/public_html/WebPayService/WebpayService.php:96 Stack trace: #0 /home/site/public_html/WebPayService/WebpayService.php(96): SoapClient->SoapClient(NULL, Array) #1 /home/site/public_html/WebPayService/InitTransaction.php(37): WebpayService->__construct(NULL) #2 {main} thrown in /home/site/public_html/WebPayService/WebpayService.php on line 96

你有什么想法吗?

这是我的页面soap.php:

class MySoap extends SoapClient{
    function __doRequest($request, $location, $saction, $version){
        $doc = new DOMDocument('1.0');
        $doc->LoadXML($request);
        $objWSSE = new WSEESoap($doc);
        $objkey = new XMLSecurityKey(XMLSecurityKey::RSA_SHA1,array('type'=>'private'));
        $objkey->LoadKey(PRIVATE_KEY, TRUE); //Ruta LLave Privada $objkey->LoadKey(PRIVATE_KEY, TRUE); 
        $options = array("insertBefore" => TRUE);
        $objWSSE->signSoapDoc($objKey, $options);
        $objWSSE->addIssuerSerial(CERT_FILE);      //Ruta Certificado de Comercio $objWSSE->addIssuerSerial(CERT_FILE);
        $objKey = new XMLSecurityKey(XMLSecurityKey::AES256_CBC);
        $objKey->generateSessionKey();
        $retVal = parent::__doRequest($objWSSE->saveXML(), $location, $saction, $version);        
        $doc = new DOMDocument();
        $doc->loadXML($retVal);

        return $doc->saveXML();
    }
}

WSEESoap不是标准的SOAP库,我在Packagist或Google上找不到它。我怀疑这是您或您的公司开发的东西,这就是为什么这里的帮助不足的原因。 - undefined
1个回答

1
您提供的错误信息表明在您的WebpayService.php文件的第96行存在一个问题,即在SoapClient实例化中存在问题。具体来说,它提到在非WSDL模式下需要“uri”选项。
从您的代码片段来看,似乎您正在使用MySoap类扩展SoapClient类,并覆盖__doRequest方法。然而,错误可能与您在WebpayService.php文件中构建SoapClient实例的方式有关。
以下是一个可能的解决方案:
1. 打开您的WebpayService.php文件。
2. 找到实例化SoapClient的那一行:
$soapClient = new SoapClient(null, $options);

确保您在$options数组中提供了'uri'选项,就像错误提示所建议的那样。例如: $options = array( 'uri' => 'http://example.com/soap-endpoint', // 其他选项... );

$soapClient = new SoapClient(null, $options);

请将 'http://example.com/soap-endpoint' 替换为您的 SOAP 终端点的实际 URI。

当您在非 WSDL 模式下使用 SoapClient(即,将 null 作为 SoapClient 构造函数的第一个参数传递)时,'uri' 选项是必需的。

请确保相应地更新您代码中 SoapClient 的实例化。这将解决所需的 'uri' 选项问题。如果错误仍然存在或者您有其他详细信息,请随时提供更多信息,以便我能够进一步协助您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接