这是我的代码:
#Make the SOAP connection
url = "https://api.channeladvisor.com/ChannelAdvisorAPI/v1/InventoryService.asmx?WSDL"
headers = {'Content-Type': 'text/xml; charset=utf-8'}
ca_client_inventory = Client(url, location="https://api.channeladvisor.com/ChannelAdvisorAPI/v1/InventoryService.asmx", headers=headers)
#Make the SOAP headers
login = ca_client_inventory.factory.create('APICredentials')
login.DeveloperKey = 'REMOVED'
login.Password = 'REMOVED'
#Attach the headers
ca_client_inventory.set_options(soapheaders=login)
synch_inventory_item_list = ca_client_inventory.factory.create('SynchInventoryItemList')
synch_inventory_item_list.accountID = "REMOVED"
array_of_inventory_item_submit = ca_client_inventory.factory.create('ArrayOfInventoryItemSubmit')
for product in products:
inventory_item_submit = ca_client_inventory.factory.create('InventoryItemSubmit')
inventory_item_list = get_item_list(product)
inventory_item_submit = [inventory_item_list]
array_of_inventory_item_submit.InventoryItemSubmit.append(inventory_item_submit)
synch_inventory_item_list.itemList = array_of_inventory_item_submit
#Call that service baby!
ca_client_inventory.service.SynchInventoryItemList(synch_inventory_item_list)
以下是它的输出:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:ns0="http://api.channeladvisor.com/webservices/" xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://api.channeladvisor.com/webservices/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header>
<tns:APICredentials>
<tns:DeveloperKey>REMOVED</tns:DeveloperKey>
<tns:Password>REMOVED</tns:Password>
</tns:APICredentials>
</SOAP-ENV:Header>
<ns1:Body>
<ns0:SynchInventoryItemList>
<ns0:accountID>
<ns0:accountID>REMOVED</ns0:accountID>
<ns0:itemList>
<ns0:InventoryItemSubmit>
<ns0:Sku>1872</ns0:Sku>
<ns0:Title>The Big Book Of Crazy Quilt Stitches</ns0:Title>
<ns0:Subtitle></ns0:Subtitle>
<ns0:Description>Embellish the seams and patches of crazy quilt projects with over 75 embroidery stitches and floral motifs. You'll use this handy reference book again and again to dress up wall hangings, pillows, sachets, clothing, and other nostalgic creations.</ns0:Description>
<ns0:Weight>4</ns0:Weight>
<ns0:FlagStyle/>
<ns0:IsBlocked xsi:nil="true"/>
<ns0:ISBN></ns0:ISBN>
<ns0:UPC>028906018721</ns0:UPC>
<ns0:EAN></ns0:EAN>
<ns0:QuantityInfo>
<ns0:UpdateType>UnShipped</ns0:UpdateType>
<ns0:Total>0</ns0:Total>
</ns0:QuantityInfo>
<ns0:PriceInfo>
<ns0:Cost>0.575</ns0:Cost>
<ns0:RetailPrice xsi:nil="true"/>
<ns0:StartingPrice xsi:nil="true"/>
<ns0:ReservePrice xsi:nil="true"/>
<ns0:TakeItPrice>6.95</ns0:TakeItPrice>
<ns0:SecondChanceOfferPrice xsi:nil="true"/>
<ns0:StorePrice>6.95</ns0:StorePrice>
</ns0:PriceInfo>
<ns0:ClassificationInfo>
<ns0:Name>Books</ns0:Name>
<ns0:AttributeList>
<ns0:ClassificationAttributeInfo>
<ns0:Name>Designer/Author</ns0:Name>
<ns0:Value>Patricia Eaton</ns0:Value>
</ns0:ClassificationAttributeInfo>
<ns0:ClassificationAttributeInfo>
<ns0:Name>Trim Size</ns0:Name>
<ns0:Value></ns0:Value>
</ns0:ClassificationAttributeInfo>
<ns0:ClassificationAttributeInfo>
<ns0:Name>Binding</ns0:Name>
<ns0:Value>Leaflet</ns0:Value>
</ns0:ClassificationAttributeInfo>
<ns0:ClassificationAttributeInfo>
<ns0:Name>Release Date</ns0:Name>
<ns0:Value>11/1/1999 0:00:00</ns0:Value>
</ns0:ClassificationAttributeInfo>
<ns0:ClassificationAttributeInfo>
<ns0:Name>Skill Level</ns0:Name>
<ns0:Value></ns0:Value>
</ns0:ClassificationAttributeInfo>
<ns0:ClassificationAttributeInfo>
<ns0:Name>Pages</ns0:Name>
<ns0:Value>20</ns0:Value>
</ns0:ClassificationAttributeInfo>
<ns0:ClassificationAttributeInfo>
<ns0:Name>Projects</ns0:Name>
<ns0:Value></ns0:Value>
</ns0:ClassificationAttributeInfo>
</ns0:AttributeList>
</ns0:ClassificationInfo>
<ns0:ImageList>
<ns0:ImageInfoSubmit>
<ns0:PlacementName>ITEMIMAGEURL1</ns0:PlacementName>
<ns0:FilenameOrUrl>1872.jpg</ns0:FilenameOrUrl>
</ns0:ImageInfoSubmit>
</ns0:ImageList>
</ns0:InventoryItemSubmit>
</ns0:itemList>
</ns0:accountID>
</ns0:SynchInventoryItemList>
</ns1:Body>
</SOAP-ENV:Envelope>
了解它如何创建两次accountID节点并将整个内容包装在其中?为什么?我如何让它停止?!
编辑:我刚刚在SUDS输出中注意到了这一点:(Content){
tag = "accountID"
value =
(SynchInventoryItemList){
accountID = "REMOVED"
itemList =
(ArrayOfInventoryItemSubmit){
InventoryItemSubmit[] =
(InventoryItemSubmit){
这个标签是什么? ......去检查文档
答案 0 :(得分:0)
这可能是WSDL的问题或SUDS中的错误。您是否将WSDL的内容与SUDS提供的SOAP信封的内容进行了比较?
答案 1 :(得分:0)
答案是在我的代码的最后一行,我需要这样做:
ca_client_inventory.service.SynchInventoryItemList(accountID, array_of_inventory_item_submit)
其中accountID是包含字符串帐户ID的变量
jortel在#suds IRC聊天室告诉我:“suds提供了一个rpc界面,可以将用户与肥皂消息样式隔离开来”而且呼叫中的新参数也来自他。希望这有助于某人。
答案 2 :(得分:0)
同样的问题以及来自 Philip Haynes 的回答link为我做了这件事。正如 Philip Haynes所解释的那样这个问题是因为Document实例的method.soap.input.body.wrapped
属性设置为True
。这是因为Definitions.set_wrapped
中的wsdl.py
方法似乎不应该将值设置为True。
通过将客户端unwrap
选项设置为False
,
my_client = Client(url, unwrap=False)