我有一个使用wsdl文件的类,

class myAPI{    

        public function Authenticate($id,$password){  

            $opts = array('location' => 'http://xx',
              'uri' => 'urn:xxx',
              'trace' => 1);
            $client2 = new SOAPClient(null, $opts);

            $quote = $client2 ->__soapCall('createsession', array(''));  
            $session = $quote -> sessionid;
            $sessionOk = $quote -> result;
            if ($sessionOk == 0)
            {     
                    $shaStr1 =  $id.$password;
                    $shaStr1 =  sha1($shaStr1);
                    $shaStr2 = $session.strtolower($shaStr1);
                    $shaStr2 =  strtoupper(sha1($shaStr2));


                    $xml_params = '<ns1:loginRequest> <ns1:initiator>'.$id.'</ns1:initiator>  <ns1:pin>'.$shaStr2.'</ns1:pin>  <ns1:sessionid>'.$session.'</ns1:sessionid> </ns1:loginRequest>';


                    try 
                    { 
                        $soapVar = new SoapVar($xml_params, XSD_ANYXML, null, null, null); 

                    }                   
                    catch(Exception $e)
                    {       
                        $message = $e->getMessage(); 
                        $err = array (
                           'result' => '999',
                           'transid' => '0',
                           'msg' => $message
                        );

                        return (object) $err;            
                    }

                    try 
                    {  
                        $result = $client2->login(new SoapParam($soapVar, 'login'));   

                        $resint = $result -> result;
                        $restrans = $result -> transid;   


                        return (object) array (
                           'result' => $resint,
                           'transid' => $restrans,
                           'msg' => 'Session Created',
                           'session' => $session
                        ); 


                    }  
                    catch(Exception $e) 
                    {  
                        $message = $e->getMessage(); 
                        $err = array (
                           'result' => '999',
                           'transid' => '0',
                           'msg' => $message
                        );

                        return (object) $err;       
                    } 


            }   
            else //session is invalid
            {
                    $err = array (
                           'result' => '999',
                           'transid' => '0',
                           'msg' => 'Invalid session'
                        );

                return (object) $err;  
            }       

        }
    ?>

我正在使用wsdl指向我的service.php文件,其中具有:service.php

<?php 
include("myAPI.php"); 
if(!extension_loaded("soap")){ 
  dl("php_soap.dll"); 
} 
ini_set("soap.wsdl_cache_enabled","0"); 
$server = new SoapServer("service.wsdl");

function login($info){
    $globeapi = new GlobeAPI;
    $loginResult = $globeapi->Authenticate($info -> id,$info -> password);  

     return $loginResult;

}

$server->AddFunction("login");   
$server->handle();

?>

当我尝试使用下面收到的所有代码使用它们时,我收到的是string(6)“ Object”,如果我尝试使用数组,它将返回string(5)“ Array”我在做什么错?

<?php
client = new SoapClient('http://xxxx/service.wsdl',
array(
'trace' =>true,
'exceptions' => 0,
'connection_timeout' => 500000,
'cache_wsdl' => WSDL_CACHE_BOTH,
'keep_alive' => false,
));

$response = $client->login('xxx','2222'); 
var_dump($response);
?>

===============>>#1 票数:0

我只想通知每个可能遇到相同问题的人。 我发现我的问题出在我的WSDL文件中。 我没有提供xsd:complexType,因此我返回的只是一个字符串。 我所做的是这样声明xsd:complexType

<xsd:schema targetNamespace="urn:xxx"
>
 <xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
 <xsd:import namespace="http://schemas.xmlsoap.org/wsdl/" />
    <xsd:complexType name="resultInfo">
        <xsd:all>
            <xsd:element name="result" type="xsd:string"/>
            <xsd:element name="transid" type="xsd:string"/>
            <xsd:element name="msg" type="xsd:string"/>
            <xsd:element name="session" type="xsd:string"/>
        </xsd:all>
    </xsd:complexType>

</xsd:schema>

之后,我将所有响应类型从“ xsd:string”更改为我的复杂类型“ xsd:resultInfo”。 然后,我能够返回我的php页面中所需的对象。

  ask by mel mel translate from so

未解决问题?本站智能推荐:

1回复

PHP SoapClient-SOAP函数调用返回的空值

我正在尝试学习SOAP的工作方式,并尝试使用我发现的“计算器” SOAP Web服务对SoapClient内置PHP类进行一些练习( http://www.dneonline.com/calculator.asmx ?WSDL )。 问题是我试图对该Web服务进行一些函数调用,但是每次这样
2回复

PHP SoapClient:在Java中,传递的对象作为NULL接收

我做了一个PHP肥皂客户端。 我在soapcall中传递了一个复杂的对象和一个字符串。 在Java中,传递的对象被接收为null,但是正确接收了传递的字符串。 类(userGPSDataVisuisation)类具有long(userGPSDataId),int,float和string属
1回复

SOAP函数返回一个stdClass

我得到一个PHP错误eveyrtime我尝试从SOAP WSDL访问对象属性。 我想它应该返回一个associativeArray类型,但我试图做一个print_r,stdClass仍然存在。 这是产品对象的WSDL结构: 这是我正在尝试的代码: 除additiona
3回复

PHP SoapClient即使认为已响应也返回null

使用PHP SoapClient,我在https://webservices-test.ede.de:9443/ibis/ws/WS_EXT_ELC?wsdl上调用WSDL,并得到以下xml响应(如$soapclient->__last_response ) 不过,对$soapcl
3回复

错误:在PHP中调用SOAP cilent时“对象引用未设置为对象的实例”

这是来自wsdl的数据 这是我的尝试代码 这是由输入数据的结构引起的,如何解决? 谢谢你的帮助。 错误信息: 更新: 谢谢你的帮助。 现在可以发送到服务器 问题仍然存在: 1)AllowEmail接受布尔值,但是0,1,true,false返
1回复

PHP SOAP-ERROR:对象没有'test2'属性

我有以下来自自动生成的Web服务wsdl的xml: 当我从php进行肥皂呼叫时: 我收到此错误: 如果我更改$params并添加test2 ,那么我不会得到任何错误: 但是我希望test2是可选的。 如果我更改xml并将minOccurs="0"添加到tes
1回复

在PHP中使用SoapClient调用远程函数

我正在使用SoapClient访问Pubmatic的远程函数:getPublisherAdTagReport()wsdl:“ http://beta-api.pubmatic.com/v1/PublisherDemandInsightsService?wsdl ” 代码如下: 在异
1回复

如何在PHP中使用SOAP WebService的WSDL创建对象?

我试图用PHP调用Webservice。 它工作正常,但我有一个函数,它抛出一个NullReferenceException 。 函数参数是Webservice的类,并在WSDL文件中定义。 在C#中,我可以创建这些类的实例,然后我可以使用该方法传递这些类。 这可以像预期的那样工作,但在
1回复

SoapClient返回一个长字符串

这是WSDL格式: http://www.petango.com/webservices/wsadoption.asmx?WSDL 我正在使用开发人员提供的测试服务器,该服务器表示它将以以下XML格式返回SOAP响应: 我设置了SOAP调用: 然后我将其打印出来:
1回复

客户端soap提供的PHP类构造函数参数

我有一堆服务于php类的SOAP服务器和一个访问这些服务器的客户端。 服务的php类与本地数据库建立连接,并在construtor方法中设置此连接。 我看到你可以在服务器端为构造函数设置参数: 有没有办法让客户端为类构造函数提供参数?