0

这是我的代码:

#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&apos;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){

这个标签是什么?...去检查文档

4

3 回答 3

0

这可能是 WSDL 的问题或 SUDS 中的错误。您是否将 WSDL 与 SUDS 提供的 SOAP 信封进行了比较?

于 2010-05-20T16:26:14.087 回答
0

答案在我需要执行此操作的代码的最后一行:

ca_client_inventory.service.SynchInventoryItemList(accountID, array_of_inventory_item_submit)

其中 accountID 是一个保存字符串帐户 ID 的变量

jortel 在#suds IRC 聊天室告诉我:“suds 提供了一个 rpc 接口,可以使用户与肥皂消息样式隔离开来”而且通话中的新参数也来自他。希望这可以帮助某人。

于 2010-05-20T21:16:00.273 回答
0

有同样的问题,菲利普海恩斯在这个链接上的这个答案为我做了。正如菲利普海恩斯解释的那样,问题 是因为method.soap.input.body.wrappedDocument 实例的属性设置为True。这是因为Definitions.set_wrappedin 中的方法wsdl.py将值设置为 True,而它似乎不应该。

尝试通过将客户端unwrap选项设置为False,

my_client = Client(url, unwrap=False)
于 2017-11-21T08:19:29.190 回答