PHP带有类映射的嵌套SOAP标记

时间:2012-12-17 21:11:11

标签: php soap

我使用wsdl2php.php创建了一个基于wsdl的类映射类。它生成了两个类,一个用于创建帐户,另一个用于名称值对。

我正在试图弄清楚如何使用类来创建一个soap请求。 soap服务器是.Net。

以下是CreateAccount.asmx页面建议的soap请求:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <CreateAccount xmlns="https://www.mywsdlsitehere.com/Account">
      <parameters>
        <NameValue>
          <name>string</name>
          <value>string</value>
        </NameValue>
        <NameValue>
          <name>string</name>
          <value>string</value>
        </NameValue>
      </parameters>
    </CreateAccount>
  </soap:Body>
</soap:Envelope>

我尝试过使用几种方法将名称和值对嵌套到NameValue标记中。

这是我最近的失败尝试:

$createaccount->parameters->fullName='Testy Tester';
$createaccount->parameters->userEmail='testy@tester.com';
$createaccount->parameters->accountName='TestyTester';
$createaccount->parameters->password='*****';

class CreateAccount {
  public $parameters; // ArrayOfNameValue
}

class NameValue {
  public $name; // string
  public $value; // string
}

public function CreateAccount(CreateAccount $parameters) {
    return $this->__soapCall('CreateAccount', array($parameters),       array(
            'uri' => 'https://www.mywsdlsitehere.com/Accounting',
            'soapaction' => ''
           )
      );
  }

我得到的错误是:

  

致命错误:未捕获的SoapFault异常:[soap:Server]服务器是   无法处理请求。 ---&GT;值不能为空。

1 个答案:

答案 0 :(得分:1)

您没有创建服务所需的结构。

该服务需要顶层的CreateAccount对象,该对象具有属性parameters,该属性是一个数组,其中包含多个NameValue个对象的实例。

我期待这样的事情:

$create = new CreateAccount();
$create->parameters = array();

$nameValue1 = new NameValue();
$nameValue1->name = "Name1";
$nameValue1->value = "Value1";

$create->parameters[] = $nameValue1;