PHP SOAPClient WCF发送参数错误


PHP SOAPClient WCF Error sending parameters

我正在使用PHP SoapClient的web服务。

webservice url为:http://web.abaseguros.com/AutoConnect/ACCatalogos.svc?wsdl

下面是我的代码:

<?php
ini_set("soap.wsdl_cache_enabled", "0");
$pin = new SoapClient("http://web.abaseguros.com/AutoConnect/ACCatalogos.svc?wsdl");
class Token {
    var $usuario;
    var $password;
    function Token($user,$pass) {
        $this->usuario = $user;
        $this->password = $pass;
    }
}
//User and Password for the token object
$Token = new Token('usuarioWCF','Pa$$w0rd');    
//XML 'Entrada' String
$Entrada = "<CAT><NEG>5786</NEG></CAT>"; 
$result = $pin->ObtenerMarcas($Token,$Entrada);

但是PHP打印出以下错误信息:

执行脚本时Fatal error: Uncaught SoapFault exception: [a:DeserializationFailed] .

公司给了我一个用c#写的示例代码

private void Obtener_Catalogo_ABASeguros()
{
string strEntrada, strSalida;
strEntrada = “<CAT><NEG>5786</NEG></CAT>“; +
ACCatalogosClient proxy = new ACCatalogosClient();

Token token = new Token();
token.usuario = "usuarioWCF";
token.password = "Pa$$w0rd";
try
{
    strSalida = proxy.ObtenerMarcas(token, strEntrada);
}
catch (FaultException<Error> ex)
    {
    txtCotSalida.Text = string.Format("Ocurrio un error en el WCF:'n " +
       "Origen: {0}'n "+
       "Mensaje: {1}'n "+
       "Stack: {2}", ex.Detail.Origen,        ex.Detail.Mensaje, ex.Detail.StackTrace);
}

但是我仍然无法理解参数是如何在两种语言中发送的。

帮忙吗?

您的Soap客户端不知道如何反序列化对象Token。您需要将该令牌对象转换为关联数组,并使用该数组作为操作的参数。

$pin->ObtenerMarcas(get_object_vars($Token),$Entrada);

恐怕即使您清除了这个错误,您也不能成功地使用该服务。看起来soap报头中需要一个令牌。您放入的C代码并没有显示所有内容,它将实现封装在代理类中。您需要阅读文档(如果有的话),否则您将不得不阅读嵌入在您提供的全局wsdl链接中的导入wsdl文件。