TYPO3 6.2 扩展中的 SOAP 服务器

SOAP Server in TYPO3 6.2 extension

我正在使用 TYPO3 6.2,我想在我现有的 extbase 扩展中实现一个 SOAP 服务器。稍后我希望能够通过 SOAP 请求推送数据,然后将其保存到数据库中。
我的插件的扩展密钥是 soap_parking_deck 并且供应商是 Comkom。在我的扩展中,我有一个 class Classes/Service/SOAPService.php :

namespace Comkom\SoapParkingDeck\Service;

class SOAPService {
  public function __construct() {
    try {
      $server = new SOAPServer (
        NULL,
        array (
          'uri' => 'http://localhost/test/SOAPService',
          'encoding' => 'UTF-8',
          'soap_version' => SOAP_1_2
        )
      );
      $server->addFunction('helloWorld');
      $server->handle();
    }
    catch (SOAPFault $fault) {
      print $fault->faultstring;
    }
  }

  public function helloWorld() {
    return 'Hello World';
  }
}

在 class 中,我定义了一个 PHP SOAPServer 和一个函数 helloWorld()。但是当我尝试发出请求时,出现 404 错误。

在 Arek van Schaijk 的提示下,我想出了一个解决方案。
发生 404 错误是因为 uri 实际上必须是服务器文件的完整路径。

namespace Comkom\SoapParkingDeck\Service;

class SOAPService {
  public function helloWorld() {
    return 'Hello World';
  }
}

try {
  $server = new \SOAPServer (
    NULL,
    array (
      'uri' => 'http://localhost/test/typo3conf/ext/soap_parking_deck/Classes/Service/SOAPService',
      'encoding' => 'UTF-8',
      'soap_version' => SOAP_1_1
    )
  );
  $server->setClass('Comkom\SoapParkingDeck\Service\SOAPService');
  $server->handle();
}
catch (\SOAPFault $fault) {
  print $fault->faultstring;
}

您的代码示例无法运行,因为您尝试调用 class \Comkom\SoapParkingDeck\Service\SOAPServer 而不是 \SoapServer\Comkom\SoapParkingDeck\Service\SOAPFault 而不是 \SoapFault .

在命名空间环境中,您应该声明 \(反斜杠)以调用 php- classes(另请参阅 How to use “root” namespace of php?)。

调试

在开发过程中,您应该启用 debug outputdeprecation logs 并设置 logging to info level。这可以在 Configuration presets => Development / Production settings => Development.

下的安装工具中轻松完成

如果您处理白屏、500 个内部服务器错误等罕见行为,请始终检查您的 apache errorlog