我正在尝试将SOAP服务集成到我们的应用程序中。对于UpdateCart
方法,他们的文档指出它需要四个属性。但是,在其WSDL(可在此处https://mews.mouser.com/cartservice.asmx?WSDL中找到)中,它表明它仅需要单个属性。通常我会像这样通过SoapClient调用该方法:
$soapClient->UpdateCart(array('xmlCartMessage' => $value));
按照他们的文档,我应该这样称呼:
$soapClient->UpdateCart(array(
'CartGUID' => $value1,
'Requestor' => $value2,
'MouserPartNumber' => $value3,
'Quantity' => $value4
));
但是,它不起作用。它给了我以下错误:
"faultstring":"Server was unable to process request. ---> String reference not set to an instance of a String.\nParameter name: s","faultcode":"soap:Server","detail":""
他们的文档指出对UpdateCart
的请求应如下所示:
<?xml version="1.0" encoding="utf-8"?>
<CartMessage CartGUID="" Requestor=“ADI” xmlns="http://tempuri.org/XMLSchema.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<CartItem MouserPartNumber="595-430F157IPM" Quantity="37" TransactionID="1" CountryCode=""/>
</CartMessage>
我注意到参数被编码为属性,而不是带有值的标签。我应该如何使用SoapClient
来做到这一点?
您可以尝试使用$ soapClient-> __ doRequest()提交请求。例如,假设$ soapClient已初始化并且其示例请求有效,请尝试如下操作:
$request = '<?xml version="1.0" encoding="utf-8"?>
<CartMessage CartGUID="" Requestor=“ADI” xmlns="http://tempuri.org/XMLSchema.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<CartItem MouserPartNumber="595-430F157IPM" Quantity="37" TransactionID="1" CountryCode=""/>
</CartMessage>
';
$location = "https://mews.mouser.com/cartservice.asmx?WSDL";
$action = "http://tempuri.org/UpdateCart";
$result = $soapClient->__doRequest($request, $location, $action, 1);
$$ location和$ action将需要根据其WSDL进行设置。
如果要创建一个SOAP调用,如:
<Element Name="John" Group="USER">DATA</Attribute>
您应该尝试这样的事情:
array('Element ' => array('_' => 'DATA', 'Name'=>'John', 'Group'=>'USER'));
因此,在您的情况下,我认为应该是:
$CartItem = array('CartItem' => array('_' => '', 'CartGUID'=>$value1, 'Requestor'=>$value2));
$CartMessage = array('CartItem' => array('_' => $CartItem, 'MouserPartNumber'=>$value3, 'Quantity'=>$value4));
$soapClient->UpdateCart($CartMessage);