php - Symfony2 使用 besimple/soap-client 包使用 SOAP 服务

标签 php web-services symfony soap wsdl

嘿,这一个可能很长......

我在 Symfony2 框架中有一个书面的 API,我现在正尝试使用我的 API 使用 SOAP 服务,这是我以前从未这样做过的,所以我继续谷歌查看是否有用于 Symfony2 的 SOAP 包并发现了这个: SOAP Bundle .

实际的 SOAP wsdl:http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL

所以对于这个包,我有以下设置:

参数.yml

soap_options:
  option1:  something
  option2:  somethingElse
  wsdl: wsdl/Weather.wsdl

在我的 src 目录中,我有一个 Soap 目录,其中包含 SoapClientWrapper.php 和子目录 wsdl:

SoapClientWrapper.php:

<?php
namespace Book\BookBundle\Soap;

use BeSimple\SoapClient\SoapClient;

class SoapClientWrapper extends SoapClient
{
    public function __construct(array $options)
    {
        $wsdl = dirname(__FILE__) . '/' .$options['wsdl'];
        parent::__construct($wsdl, $options);
    }
}

在 wsdl 目录中,我有一个包含所有 xml 的 Weather.wsdl 文件。

我已经将我的 SOAP 创建为服务,如下所示:

<!-- Soap Client -->
<service id="book.bookbundle.soap.wrapper"
        class="Book\BookBundle\Soap\SoapClientWrapper">
    <argument key="soap_options">%soap_options%</argument>
</service>

然后我将它注入(inject)到我的一个 php 文件中,如下所示:

<?php
namespace Book\BookBundle\Dto\Template;

use Book\BookBundle\Soap\SoapClientWrapper;

    /**
     * @var SoapClientWrapper
     */
    private $soap;

    /**
     * @param  SoapClientWrapper $soapClientWrapper
     */
    public function __construct(
        SoapClientWrapper $soapClientWrapper
    ) {
        $this->soap = $soapClientWrapper;
    }

public function soapGreatFunNOT()
{

}

所以我期望在我的 soapGreatFunNOT 函数中发生的事情是调用我的 soap 服务 $this->soap 传递该服务所需的所有参数。但这是我迷路的地方,不能这样做......?我可能在这里遗漏了某些东西或不理解某些东西......

我用连接到它的 SoapUI 测试了这个 webService,它传递了成功交互所需的所有参数并得到了响应,但这很容易,在 symfony 中我迷路了......?

最佳答案

有时您不需要 bundle 来实现某些功能。我遇到了一些 SOAP 包的问题,​​并找到了以下 PHP 类:

http://php.net/manual/es/class.soapclient.php

您可以直接使用它来消费 SOAP 服务:

$client = new \SoapClient('http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL');

// useful information about the service
dump($client->__getFunctions());
dump($client->__getTypes());

// function call without parameters
dump($client->getWeatherInformation());

// function call with parameters
dump($client->getCityWeatherByZIP(array('ZIP' => 75220)));

希望这对您有所帮助!

关于php - Symfony2 使用 besimple/soap-client 包使用 SOAP 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35204500/

相关文章:

web-services - Spring Web-Service 解码不起作用

php - Symfony2 分配上传文件到内存

php - Symfony2/Twig - 从动态数组键获取数组

PHP/MYSQL - 使用联合更新子查询选择

php - 数据库架构——一大或多小

php - 将行数组插入到 SQL 表中

java - Java 中的 RESTful Web 服务

java - WebService 可与 Jetty 配合使用,但不适用于 Tomcat

php - Centos 7、Citadel 电子邮件、服务器、phpmailer 和 S/MIME

php - Symfony 4 控制台命令不读取环境变量