【问题标题】:Python - SUDS SOAP Invalid namespaces - channel advisor?Python - SUDS SOAP 无效的命名空间 - 通道顾问?
【发布时间】:2011-03-01 23:49:29
【问题描述】:

在工作中我必须访问/使用 Channel Advisor API

http://developer.channeladvisor.com/display/cadn/Order+Service

来源:

我正在尝试执行简单的 ping 操作

from suds.client import Client
url = 'https://api.channeladvisor.com/ChannelAdvisorAPI/v4/OrderService.asmx?WSDL'
soap_client = Client(url, location='https://api.channeladvisor.com/ChannelAdvisorAPI/v4/OrderService.asmx')

soap_client.set_options(port='OrderServiceSoap')
#Ping the service
ping = soap_client.service.Ping()

问题:

我收到一条回复说我的 SOAP XML 格式不正确

请求需要如下所示:

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://api.channeladvisor.com/webservices/">
       <soapenv:Header>
       </soapenv:Header>
       <soapenv:Body>
          <web:Ping/>
       </soapenv:Body>
    </soapenv:Envelope>

但它看起来像:

    <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:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Header/>
       <ns1:Body>
          <ns0:Ping/>
       </ns1:Body>
    </SOAP-ENV:Envelope>

我完全没有使用 SOAP 的经验,到目前为止我已经避免了它无穷无尽的实现和复杂性 - 所以请原谅我的无知和缺乏知识,但如果我做错了什么 - 我怎么能让 python(我们为这类事情选择的语言)与频道顾问 API 一起工作

更新:

*由于我没有收到任何答案,如果/当我找到解决方案时,我会尝试更新每个人(2011 年 3 月 3 日)

我认为部分问题是 SUDS 可能没有正确包含嵌套的 WSDL 文件。

【问题讨论】:

    标签: python soap suds


    【解决方案1】:

    我刚遇到同样的问题,最后意识到我必须传递 APICredentials 才能让 CA 响应任何请求,甚至是 ping。这是一个例子:

    import logging
    from suds.client import Client
    
    # Set logging to DEBUG level to see soap messages
    logging.basicConfig(level=logging.INFO)
    logging.getLogger('suds.client').setLevel(logging.DEBUG)
    
    # URL for CA WSDL
    url='https://api.channeladvisor.com/ChannelAdvisorAPI/v5/AdminService.asmx?WSDL'
    
    # Initialize client - The extra location is required because CA is https
    client = Client(url,location='https://api.channeladvisor.com/ChannelAdvisorAPI/v5/AdminService.asmx')
    
    # Set soap headers to include login information
    login = client.factory.create('APICredentials')
    login.DeveloperKey = 'YOUR_KEY'
    login.Password = 'YOUR_PWD'
    client.set_options(soapheaders=login)
    
    # Send Ping to CA
    result = client.service.Ping()
    
    print result
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-12
      • 1970-01-01
      相关资源
      最近更新 更多