Laravel使用laravel-soap调用SOAP WSDL服务认证不生效问题排查
问题根因
- 身份认证参数放置位置错误:你将需要放到SOAP Header的
AuthInfo字段写进了options配置,而options是PHP原生SoapClient的全局配置项,不会自动注入到请求Header中,因此服务端收不到认证信息,返回用户信息不完整的报错。 - 请求体结构不符合要求:你提交的
TransmEnvio参数直接包含了DatosRecogida等字段,但按接口规范这些字段需要嵌套在request节点内。
修复后代码
class Test { protected $soapWrapper; public function __construct(SoapWrapper $soapWrapper) { $this->soapWrapper = $soapWrapper; } public function show() { $this->soapWrapper->add('mrw', function ($service) { $service ->wsdl('http://sagec-test.mrw.es/MRWEnvio.asmx?WSDL') ->trace(true) // 配置SOAP版本匹配接口要求的1.2版本 ->options([ 'soap_version' => SOAP_1_2 ]) // 注入SOAP Header认证信息,第三个参数为接口的命名空间 ->header('AuthInfo', [ 'CodigoFranquicia' => '003088', 'CodigoAbonado' => '0033038', 'CodigoDepartamento' => '', 'UserName' => 'Usuario', 'Password' => 'Password' ], 'http://www.mrw.es/'); }); // 请求参数外层包裹request节点 $response = $this->soapWrapper->call('mrw.TransmEnvio', [ 'request' => [ 'DatosRecogida' => [ 'Direccion' => [ 'CodigoTipoVia' => '', 'Via' => '', 'Numero' => '', 'Resto' => '', 'CodigoPostal' => '', 'Poblacion' => '', 'Provincia' => '', 'CodigoPais' => '', ], 'Nif' => '', 'Nombre' => '', 'Telefono' => '', 'Contacto' => '', 'Observaciones' => '' ], 'DatosEntrega' => [ 'Direccion' => [ 'CodigoTipoVia' => 'CALLE', 'Via' => 'CORCEGA', 'Numero' => '102', 'Resto' => 'PISO 4B', 'CodigoPostal' => '08029', 'Poblacion' => 'BARCELONA', 'Provincia' => '', 'CodigoPais' => 'ES' ], 'Nif' => '', 'Nombre' => 'PRUEBA INTEGRACION MRW', 'Telefono' => '622202020', 'Contacto' => 'PRUEBA', 'ALaAtencionDe' => '', 'Observaciones' => 'OBSERVACIONES' ], 'DatosServicio' => [ 'Fecha' => '24/08/2021', 'Referencia' => 'REFERENCE', 'CodigoServicio' => '0200', 'NumeroBultos' => '1', 'Peso' => '2', 'Notificaciones' => [ 'NotificacionRequest' => [ 'CanalNotificacion' => '', 'TipoNotificacion' => '', 'MailSMS' => '' ] ] ] ] ]); // 可打印实际发送的XML和预期格式对比排查问题 // dd($this->soapWrapper->client('mrw')->__getLastRequest()); var_dump($response); } }
补充说明
你开启了trace配置,若修改后仍然报错,可以打印出实际发送的请求XML,和预期的XML结构逐字段对比,可快速定位字段缺失、格式错误等问题。
内容的提问来源于stack exchange,提问作者jose angarita
相关产品推荐
相关产品推荐

