首页 > 解决方案 > Laravel 中的 WebService SOAP WSDL

问题描述

向所有社区问好。

我正在尝试使用带有 Laravel 的 SOAP WSDL 创建查询服务,我一直在挖掘并找到了 laravel 库https://packagist.org/packages/artisaninweb/laravel-soap

问题是我的印象是身份验证数据无法正常工作,我尝试了几种方法,但我不确定出了什么问题,我想在尝试完全手动完成之前调试我到目前为止所做的事情. 我展示给你:

包含您应该发送的数据的 XML

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
   xmlns:mrw="http://www.mrw.es/">
   <soap:Header>
   <mrw:AuthInfo>
   <mrw:CodigoFranquicia>003088</mrw:CodigoFranquicia>
   <mrw:CodigoAbonado>0033038</mrw:CodigoAbonado>
   <mrw:CodigoDepartamento></mrw:CodigoDepartamento>
   <mrw:UserName>Usuario</mrw:UserName>
   <mrw:Password>Password</mrw:Password>
  </mrw:AuthInfo>
   </soap:Header>
   <soap:Body>
   <mrw:TransmEnvio>
    <mrw:request>
    <mrw:DatosRecogida>
       <mrw:Direccion>
          <mrw:CodigoTipoVia></mrw:CodigoTipoVia>
          <mrw:Via></mrw:Via>
          <mrw:Numero></mrw:Numero>
          <mrw:Resto></mrw:Resto>
          <mrw:CodigoPostal></mrw:CodigoPostal>
          <mrw:Poblacion></mrw:Poblacion>
          <mrw:Provincia></mrw:Provincia>
          <mrw:CodigoPais></mrw:CodigoPais>
       </mrw:Direccion>
       <mrw:Nif></mrw:Nif>
       <mrw:Nombre></mrw:Nombre>
       <mrw:Telefono></mrw:Telefono>
       <mrw:Contacto></mrw:Contacto>
       <mrw:Observaciones></mrw:Observaciones>
    </mrw:DatosRecogida>
    <mrw:DatosEntrega>
       <mrw:Direccion>
          <mrw:CodigoTipoVia>CALLE</mrw:CodigoTipoVia>
          <mrw:Via>CORCEGA</mrw:Via>
          <mrw:Numero>102</mrw:Numero>
          <mrw:Resto>PISO 4B </mrw:Resto>
          <mrw:CodigoPostal>08029</mrw:CodigoPostal>
          <mrw:Poblacion>BARCELONA</mrw:Poblacion>
          <mrw:Provincia></mrw:Provincia>
          <mrw:CodigoPais>ES</mrw:CodigoPais>
       </mrw:Direccion>
       <mrw:Nif></mrw:Nif>
       <mrw:Nombre>PRUEBA INTEGRACION MRW</mrw:Nombre>
       <mrw:Telefono>622202020</mrw:Telefono>
       <mrw:Contacto>PRUEBA</mrw:Contacto>
       <mrw:ALaAtencionDe></mrw:ALaAtencionDe>
       <mrw:Observaciones>OBSERVACIONES</mrw:Observaciones>
    </mrw:DatosEntrega>
    <mrw:DatosServicio>
       <mrw:Fecha>24/08/2021</mrw:Fecha>
       <mrw:Referencia>REFERENCE</mrw:Referencia>
       <mrw:CodigoServicio>0200</mrw:CodigoServicio>
        <mrw:NumeroBultos>1</mrw:NumeroBultos>
       <mrw:Peso>2</mrw:Peso>
            <mrw:Notificaciones>
                <mrw:NotificacionRequest>
                    <mrw:CanalNotificacion></mrw:CanalNotificacion>
                    <mrw:TipoNotificacion></mrw:TipoNotificacion>
                    <mrw:MailSMS></mrw:MailSMS>
                </mrw:NotificacionRequest>
            </mrw:Notificaciones>
           </mrw:DatosServicio>
        </mrw:request>
      </mrw:TransmEnvio>
    </soap:Body>
 </soap:Envelope>

使用 Laravel-Soap

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)
        ->options([
            'CodigoFranquicia' => '003088',
            'CodigoAbonado' => '0033038',
            'CodigoDepartamento' => '',
            'UserName' => 'Usuario',
            'Password' => 'Password'
        ]);
    });

// Without classmap
$response = $this->soapWrapper->call('mrw.TransmEnvio', [
    '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' => '08209',
                    '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' => ''
                        ]
                ]
        ]
  ]);

  var_dump($response);
  }        
 }

问题是,当它实际连接到服务器时,如果我输入了错误的数据或丢失了某些信息等,它应该显示如下内容:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
  <TransmEnvioResponse xmlns="http://www.mrw.es/">
    <TransmEnvioResult>
      <Estado>0</Estado>
        <Mensaje>1) El usuario especificado no dispone de acceso al sistema, consulte con su 
        franquicia.</Mensaje>
         <NumeroSolicitud/>
         <NumeroEnvio/>
          <Url/>
         </TransmEnvioResult>
       </TransmEnvioResponse>
     </soap:Body>
  </soap:Envelope>

相反,我会自动收到这样的消息:

 object(stdClass)[1430]
 public 'TransmEnvioResult' => 
 object(stdClass)[1431]
 public 'Estado' => string '0' (length=1)
 public 'Mensaje' => string '1) La información del usuario es incompleta.' (length=45)
 public 'NumeroSolicitud' => string '' (length=0)
 public 'NumeroEnvio' => string '' (length=0)
 public 'Url' => string '' (length=0)

我已经仔细检查过,似乎放置身份验证数据的部分没有使用它们。

应该注意的是,我已经使用 SOAPUI 测试了服务器,以确保该服务正常工作,这就是我如何向您展示应该显示的消息的显示方式。

另外,我尝试了其他不需要密码并且服务运行良好的服务器,我看到的问题是我必须输入凭据时。

我希望也许你能看到我没有看到的东西。

谢谢你。

标签: phplaravelweb-servicessoapwsdl

解决方案


推荐阅读