php 在非WSDL模式下需要SOAP-uri“选项时出错

rta7y2nd  于 2023-11-16  发布在  PHP
关注(0)|答案(1)|浏览(123)

尝试测试通信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();
    }
}

dgsult0t

dgsult0t1#

您提供的错误消息指出,在您的WebpayService.php文件的第96行中,SoapClient示例化存在问题。特别是,它提到在非WSDL模式下需要'uri'选项。
从您的代码片段来看,您似乎是在用MySoap类扩展SoapClient类并覆盖**__doRequest方法。但是,该错误可能与您在WebpayService.php文件中构造SoapClient**示例的方式有关。
这里有一个潜在的解决方案:
1.打开WebpayService.php文件。
2.找到示例化SoapClient的行:

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

字符串
1.请确保在$options数组中提供'uri'选项,如错误所示。例如:

$options = array(
 'uri' => 'http://example.com/soap-endpoint',
 // Other options...


);

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

将“http://example.com/soap-endpoint”替换为SOAP端点的实际URI。
当您在非WSDL模式下使用SoapClient时(即,当您将null作为第一个参数传递给SoapClient构造函数时),需要“uri”选项。
请确保相应地更新代码中SoapClient的示例化。这应该可以解决'uri'选项必需的问题。如果错误仍然存在或您有任何其他详细信息,请随时提供更多信息,以便我可以进一步帮助您。

相关问题