如何为XML属性形成SoapClient方法参数?

问题描述 投票:0回答:2

我正在尝试将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来做到这一点?

php xml zend-framework soap soap-client
2个回答
0
投票

您可以尝试使用$ 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进行设置。

参见:http://www.php.net/manual/en/soapclient.dorequest.php


0
投票

如果要创建一个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);
© www.soinside.com 2019 - 2024. All rights reserved.