我需要创建一个如下所示的SOAP请求:
<s:element name="GetOrders">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Token" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="Context" type="s:string"/>
<s:element minOccurs="1" maxOccurs="1" name="StartDate" type="s:dateTime"/>
<s:element minOccurs="1" maxOccurs="1" name="EndDate" type="s:dateTime"/>
<s:element minOccurs="1" maxOccurs="1" name="IncludeFulfilledOrders" type="s:boolean"/>
<s:element minOccurs="0" maxOccurs="1" name="ProductNumber" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>
我为变量创建了一个类:
class GetOrders {
public $Token = "THE_TOKEN"; // string
public $Context='THE_CONTEXT'; // string
public $StartDate=""; // dateTime
public $EndDate=""; // dateTime
public $IncludeFulfilledOrders=true; // boolean
public $ProductNumber=""; // string
}
运行soap调用的函数如下所示:
public function GetOrders(GetOrders $parameters) {
return $this->__soapCall('GetOrders',array('parameters'=>array($parameters)), array(
'uri' => 'http://www.domain.net/',
'soapaction' => ''
)
);
}
我收到错误: SoapFault异常:[客户端] SOAP-ERROR:编码:对象中没有'StartDate'属性...
这是我传递的$参数的var_dump:
object(GetOrders)#1 (6) {
["Token"]=>
string(17) "THE_TOKEN"
["Context"]=>
string(7) "THE_CONTEXT"
["StartDate"]=>
string(25) "2012-09-01T00:00:00-05:00"
["EndDate"]=>
string(25) "2012-09-30T00:00:00-05:00"
["IncludeFulfilledOrders"]=>
bool(true)
["ProductNumber"]=>
string(10) "P-PRODUCT"
}
我似乎无法弄清楚StartDate的问题是什么。我相信格式是正确的。我对SOAP知之甚少,所以如果这是一个新问题我会道歉。
谢谢!
答案 0 :(得分:0)
格式可能有误。请检查您是否以正确的格式发送数据。另外,检查生成的存根是否是根据WSDL定义生成的。
您可以使用
记录请求 public function __doRequest($request, $location, $action, $version, $one_way = 0)
{
// Add code to inspect/dissect/debug/adjust the XML given in $request here
// Uncomment the following line, if you actually want to do the request
// return parent::__doRequest($request, $location, $action, $version);
$dom = new DomDocument('1.0', 'UTF-8');
$dom->preserveWhiteSpace = false;
try {
$dom->loadXML($request);
} catch (DOMException $de) {
die ('Parse error with code ' . $de->code);
}
$request = $dom->saveXml();
return parent::__doRequest($request, $location, $action, $version);
}
答案 1 :(得分:0)
原来我的函数中有一个错误就是抛出它。
这是该函数应该如何阅读。
public function GetOrders(GetOrders $parameters) {
return $this->__soapCall('GetOrders',array('parameters'=>$parameters), array(
'uri' => 'http://www.domain.com/',
'soapaction' => ''
)
);
}
请注意,数组(&#39;参数&#39; =&gt; $参数)与上述不同。
总是有点......