Web Services 控制器中带有NuSOAP的Laravel不工作

3okqufwl  于 2022-11-15  发布在  其他
关注(0)|答案(2)|浏览(141)

在内联路由闭包函数中定义NuSOAP Web服务效果很好,但在路由闭包控制器中定义它就不行了。

示例:工作的

路径.php:

Route::any('api', function() {
    require_once ('nusoap.php');
    $server = new \nusoap_server();

    $server->configureWSDL('TestService', false, url('api'));

    $server->register('test',
        array('input' => 'xsd:string'),
        array('output' => 'xsd:string'),
    );

    function test($input){
        return $input;
    }

    $rawPostData = file_get_contents("php://input");
    return \Response::make($server->service($rawPostData), 200, array('Content-Type' => 'text/xml; charset=ISO-8859-1'));
});

SOAP测试客户端

require_once('nusoap.php');

$client = new \nusoap_client('http://my-laravel-installation.com/api?wsdl', true);

$result = $client->call("test", "HelloWorld");

print_r($result); exit();

回应

你好世界
这和预期的一样有效。

示例:不工作

将代码移动到专用控制器会破坏它:

路径.php:

Route::any('api', 'SoapController@server');

SOAP控制器.php文件:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class SoapController extends Controller {

    public function server() {
        require_once ('nusoap.php');
        $server = new \nusoap_server();

        $server->configureWSDL('TestService', false, url('api'));

        $server->register('test',
            array('input' => 'xsd:string'),
            array('output' => 'xsd:string'),
        );

        function test($input){
            return $input;
        }

        $rawPostData = file_get_contents("php://input");
        return \Response::make($server->service($rawPostData), 200, array('Content-Type' => 'text/xml; charset=ISO-8859-1'));
    }

}

SOAP测试客户端

require_once('nusoap.php');

$client = new \nusoap_client('http://my-laravel-installation.com/api?wsdl', true);

$result = $client->call("test", "HelloWorld");

print_r($result); exit();

回应

“未在服务('''')中定义方法'test'('test')

重现步骤:

1.安装全新的Laravel v5.2.45
1.下载NuSOAP最新版本(v0.9.5)
1.定义NuSOAP Web服务的路由-复制并粘贴上面的代码
1.创建SoapController -复制并粘贴上面的代码
1.创建一个新的临时路由作为SOAP客户端,并将上面SOAP Test Client下的代码复制粘贴到该路由的闭包函数中
1.在浏览器中加载临时路由页以执行对Web服务的SOAP调用

结论:

这表明,由于某种原因,当使用内嵌路由功能与使用专用路由控制器时,输出不同。
怎么会这样?

非常感谢您的见解:

如果您有:

  • 如果你有过这样的经验,你就会有一个解决方案
  • 或者,您知道为什么会发生这种情况
  • 或者,您对控制器中的NuSOAP代码生成的响应与内联路由函数中的不同有什么想法

...请插话。
感谢您的评分

mgdq6dx1

mgdq6dx11#

我有一个简单的解决办法。
只需通过composer安装nusoap即可。

  1. composer require econea/nusoap
    1.根据需要调用nusoap:
$client = new \nusoap_client('http://my-laravel-installation.com/api?wsdl', true);

希望能帮上忙。

ymzxtsji

ymzxtsji2#

CSRF确认对于当前laravel版本应为被动。
app\Http\Middleware\VerifyCsrfToken.php
受保护的$except = [ '您方式' ];
肯定是的。

相关问题