yii2-soap-server 在需要http_auth_basic认证时读取不了wsdl的解决思路
  • 2018-10-25发布
  • 2018-10-25修改

yii2-soap-server https://github.com/mohorev/yii2-soap-server 是一个不错的开发包,在加了http_auth_basic认证时,soapclient端调用会报错:

SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://webservice.mydomain.com/soap/api.html' : failed to load external entity "http://webservice.mydomain.com/soap/api.html"

这是因为服务器端请求wsdl文件时没有进行登录验证,无法读取。

解决思路,再开一个虚拟机,监听在127.0.0.1:80上,域名webservice.local.mydomain.com ,然后增加一条hosts记录,指向127.0.0.1,该虚机只有本机能访问,不用加auth_basic验证。



然后在SoapController的 actions方法中增加wsdlUrl参数(红字):

return [

            'api' => [

                'class' => 'mongosoft\soapserver\Action',

                'serviceOptions' => [

                    'disableWsdlMode' => false,

                    'soapVersion' => '1.1'

                ],

                'wsdlUrl'=>'http://webservice.local. mydomain.com/soap/api.html',

                'serviceVar'=> 'wsdl',

            ]

        ];


这样就可以用soapclient正常调用webservice方法了。


$wsdl = 'http://webservice.mydomain.com/soap/api.html';

        $client = new \SoapClient($wsdl, [

            'login'=>'user','password'=>'123456'

        ]);

        $result = $client->hello('mytest');

        var_dump($result);


=======另一个版本========

https://github.com/subdee/yii2-soap-server