如何在php中发出soap请求


How to make soap request in php

我需要用以下SOAP结构在PHP中生成SOAP请求:

<wsdl:types>
<s:schema elementFormDefault="qualified" targetNamespace="https://.../CardBalance">
<s:element name="HelloWorld">
<s:complexType/>
</s:element>
<s:element name="HelloWorldResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="HelloWorldResult" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="SecureLogin">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="userProp" type="tns:UserProp"/>
<s:element minOccurs="0" maxOccurs="1" name="request" type="tns:SecureLogin"/>
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="UserProp">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="userName" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="password" type="s:string"/>
</s:sequence>
</s:complexType>
<s:complexType name="SecureLogin">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="memberID" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="cardNumber" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="guid" type="s:string"/>
<s:element minOccurs="1" maxOccurs="1" name="page" type="s:int"/>
<s:element minOccurs="0" maxOccurs="1" default="" name="Population" type="s:string"/>
</s:sequence>
</s:complexType>
<s:element name="SecureLoginResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="SecureLoginResult" type="tns:DTS_Response"/>
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="DTS_Response">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="response_Status" type="tns:Response_Status"/>
<s:element minOccurs="1" maxOccurs="1" name="errorCode" type="s:int"/>
<s:element minOccurs="0" maxOccurs="1" name="errorDescription" type="s:string"/>
</s:sequence>
</s:complexType>
<s:simpleType name="Response_Status">
<s:restriction base="s:string">
<s:enumeration value="Success"/>
<s:enumeration value="Failure"/>
<s:enumeration value="NotAvailable"/>
<s:enumeration value="GlobalException"/>
</s:restriction>
</s:simpleType>
<s:element name="SecureLoginMethod">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="userProp" type="tns:UserProp"/>
<s:element minOccurs="0" maxOccurs="1" name="request" type="tns:SecureLogin"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="SecureLoginMethodResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="SecureLoginMethodResult" type="tns:DTS_Response"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="string" nillable="true" type="s:string"/>
</s:schema>
</wsdl:types>

我该怎么做?我尝试过:

        <?php  
        ini_set('soap.wsdl_cache_enabled',0); // disabling WSDL cache
        ini_set('soap.wsdl_cache_ttl',0);
        $wsdl_path = "https://.../CARDBALANCE/CB_WS.ASMX?WSDL";
        $client = new SoapClient($wsdl_path, array('trace' => 1, 'exception' => 1));

$res = $client->SecureLogin(array("UserProp"=>array("userName"=>"?","password"=>"?"),"request"=>array("memberID"=>"?","cardNumber"=>"?","guid"=>"?","page"=>1)));
    echo '<br /><br />';
    echo  htmlentities ($client->__getLastRequest());

    try {  
        echo "<pre>'n";  
        var_dump($res->SecureLoginResult);  
        echo "'n</pre>'n";
    }
    catch (SoapFault $exception) {  
        echo $exception;        
    } 
        ?>

但我得到致命错误

致命错误:未捕获的SoapFault异常:[soap:Server]服务器无法处理请求。--->对象引用未设置为对象的实例。在/var/www/u0109499/data/www/yakosmetolog.ru/soap.php:48堆栈跟踪:#0/var/www/u 0109499/diata/www/yakosmotolog.ru/soap.php(48):SoapClient->__call("安全登录",数组)#1/var/www/u0109499/data/w/www/Yakosmetoog.ru/soap php/em>

如何在PHP中正确请求该消息?谢谢你的帮助

看看这个答案是否对您也有帮助。一般来说,对SO的期望是你寻找以前类似的问题,如果存在,就使用它们或解释为什么它们与你的情况不匹配。

PHP 的SOAP请求