这个 soap 请求中缺少什么?

What is missing in this soap request?

我正在尝试使用 SOAP API,这是 WSDL:http://clientes.tcc.com.co/servicios/informacionremesas.asmx?wsdl 特别是调用的方法:ConsultarInformacionRemesasEstadosUEN

问题是,当我使用一个名为 SoapUI 的程序发出请求时,我得到了 200 响应,但是当我从我的 Laravel 项目中发出请求时,我得到了一个错误。我做错了什么?

protected $pass ;
    protected $url;

    public function __construct($pass='APIKEY',$url="http://clientes.tcc.com.co/servicios/informacionremesas.asmx?wsdl")
    {
        $this->pass=$pass;
        $this->url=$url;
    }
    public function test()
    {
        try{
            $param=array('Clave'=>$this->pass,'numeroremesa'=>433654926,'unidadnegocio'=>1,'Respuesta'=>0);
            $client = new SoapClient($this->url,array('trace'=>TRUE));
            $response =$client->ConsultarInformacionRemesasEstadosUEN($param);
            dd($client->__getLastRequest());
            exit;
            // $array= json_decode(json_encode($response),true);
        }
        catch(Exeption $fault){
            return response()->json(['entro'=>'entro en la exepcion',"error"=>$fault->getMessage()],400);
        }
    }

我收到以下 500 错误

"message": "System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.NullReferenceException: Object reference not set to an instance of an object.\n   at ServiciosWeb.InformacionRemesas.ConsultarInformacionRemesasEstadosUEN(String Clave, List`1 remesas, List`1& remesasrespuesta, Int32& Respuesta, String& Mensaje) in C:\TCC\Proyectos\Legacy\WSNET\2-Desarrollo\3-Servicios\ServiciosWeb\ServiciosWeb\InformacionRemesas.asmx.vb:line 443\n   --- End of inner exception stack trace ---",
    "exception": "SoapFault",
    "file": "C:\xampp\htdocs\GirosYa\app\Http\Controllers\Api\ExternalApis\TccController.php",
    "line": 35,
    "trace": [
        {
            "file": "C:\xampp\htdocs\GirosYa\app\Http\Controllers\Api\ExternalApis\TccController.php",
            "line": 35,
            "function": "__call",
            "class": "SoapClient",
            "type": "->"
        },

它可以使用 SoapUI,所以我不确定该软件是否添加了 header 或类似的东西,非常感谢您的帮助。

根据该 WSDL 和错误消息,您的 'numeroremesa'=>433654926,'unidadnegocio'=>1 似乎需要包装在主数组中的键为 "remesas" 的数组中。这意味着您的 $param 应该如下所示:

$param=array('Clave'=>$this->pass,'remesas' => array('numeroremesa'=>433654926,'unidadnegocio'=>1),'Respuesta'=>0)

指示这一点的 WSDL 部分是:

<s:element minOccurs="0" maxOccurs="1" name="remesas" type="tns:ArrayOfRemesaUEN"/>

...

<s:element minOccurs="0" maxOccurs="unbounded" name="RemesaUEN" nillable="true" type="tns:RemesaUEN"/>

...

<s:complexType name="RemesaUEN">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="numeroremesa" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="unidadnegocio" type="s:string"/>
</s:sequence>
</s:complexType>

指示此错误消息的部分是:

at ServiciosWeb.InformacionRemesas.ConsultarInformacionRemesasEstadosUEN(String Clave, List1 remesas, List1& remesasrespuesta, Int32& Respuesta, String& Mensaje)

注意为函数显示的参数列表