php - 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 测试了服务器,以确保该服务正常工作,这就是我如何向您展示应该显示的消息的显示方式。
另外,我尝试了其他不需要密码并且服务运行良好的服务器,我看到的问题是我必须输入凭据时。
我希望也许你能看到我没有看到的东西。
谢谢你。
解决方案
推荐阅读
- python - 创建 Python 和 Tkinter 登录系统
- android - 如何使用 Retrofit2 获取 List 中的对象数据?
- amazon-cloudwatch - 创建自定义事件模式以在删除时过滤 Route53 记录
- python - 如何使用具有不同内容类型的 Python ElasticSearch 库执行索引请求
- python - 在 TF2 中加载 SavedModel 时,报告“signature_wrapper 采用 0 个位置参数,但给出了 1 个”
- quartz.net - 如何防止 Quartz.Net 失败的工作重试
- python - python中的Ctypes
- c# - 如何在 Linq 查询中使用方法或表达式?
- c# - PdfSharp:从指定的文件路径和名称获取 PdfDocument
- domain-driven-design - DDD 数据层和表示层