【问题标题】:eBay SOAP API - Missing SOA operation name headereBay SOAP API - 缺少 SOA 操作名称标头
【发布时间】:2011-07-07 14:40:59
【问题描述】:

我正在尝试调用 eBay 的 findItemsByKeywords 方法,我得到了

服务器引发错误:“缺少 SOA 操作名称标头”

我的代码如下:

from config import *

# url = 'http://developer.ebay.com/webservices/latest/ebaySvc.wsdl'
# url = 'http://svcs.ebay.com/services/search/BestMatchItemDetailsService/v1?wsdl'
url = 'http://developer.ebay.com/webservices/finding/latest/FindingService.wsdl'

from suds.client import Client
import logging
logging.basicConfig()
client = Client(url)

from suds.sax.element import Element
ns1 = ('ns1', 'http://www.ebay.com/marketplace/search/v1/services')
app_id = Element('X-EBAY-API-APP-ID', ns = ns1).setText(EBAY_API_APP_ID)
operation_name = Element('X-EBAY-SOA-OPERATION-NAME', ns = ns1).setText('findItemsByKeywords')
api_version = Element('X-EBAY-API-VERSION', ns = ns1).setText(EBAY_APP_VERSION)
site_id = Element('X-EBAY-API-SITE-ID', ns = ns1).setText(EBAY_API_SITE_ID)
encoding = Element('X-EBAY-API-REQUEST-ENCODING', ns = ns1).setText('SOAP')
service_name = Element('X-EBAY-SOA-SERVICE-NAME', ns = ns1).setText('FindingService')
client.set_options(soapheaders = [app_id, operation_name, api_version, site_id, encoding, service_name]) 

print client.service.findItemsByKeywords(keywords = 'book')

打印出来:

<SOAP-ENV:Envelope xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.ebay.com/marketplace/search/v1/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header>
      <ns1:X-EBAY-API-APP-ID>123456-1234-1234-1234-7876b3f33c3</ns1:X-EBAY-API-APP-ID>
      <ns1:X-EBAY-SOA-OPERATION-NAME>findItemsByKeywords</ns1:X-EBAY-SOA-OPERATION-NAME>
      <ns1:X-EBAY-API-VERSION>721</ns1:X-EBAY-API-VERSION>
      <ns1:X-EBAY-API-SITE-ID>0</ns1:X-EBAY-API-SITE-ID>
      <ns1:X-EBAY-API-REQUEST-ENCODING>SOAP</ns1:X-EBAY-API-REQUEST-ENCODING>
      <ns1:X-EBAY-SOA-SERVICE-NAME>FindingService</ns1:X-EBAY-SOA-SERVICE-NAME>
   </SOAP-ENV:Header>
   <ns0:Body>
      <ns1:findItemsByKeywordsRequest>
         <ns1:keywords>book</ns1:keywords>
      </ns1:findItemsByKeywordsRequest>
   </ns0:Body>
</SOAP-ENV:Envelope>
Traceback (most recent call last):
  File "wsdl.py", line 22, in <module>
    print client.service.findItemsByKeywords(keywords = 'book')
  File "/ebay/suds/client.py", line 542, in __call__
    return client.invoke(args, kwargs)
  File "/ebay/suds/client.py", line 602, in invoke
    result = self.send(soapenv)
  File "/ebay/suds/client.py", line 657, in send
    result = self.failed(binding, e)
  File "/ebay/suds/client.py", line 712, in failed
    r, p = binding.get_fault(reply)
  File "/ebay/suds/bindings/binding.py", line 265, in get_fault
    raise WebFault(p, faultroot)
suds.WebFault: Server raised fault: 'Missing SOA operation name header'

【问题讨论】:

    标签: python soap wsdl ebay-api


    【解决方案1】:

    使用ebay-python, unofficial python wrapper for eBay API。它非常易于使用并且可以正常工作。如果您想使用自己的,还可以查看有关如何构造请求的源代码。

    【讨论】:

    • 我需要交易 API (AddFixedPriceItem)... 有一个说明:我们暂时不会实施交易 API 和大型商家服务。
    • 啊,我的错。很快就会尝试实现该方法。
    • 如果您实现它并在 github 上发送拉取请求,那就太好了。您可以在此处查看参考实现:github.com/roopeshvaddepally/python-ebay/blob/master/ebay/…
    【解决方案2】:

    我在一些 vb.net 代码尝试做同样的事情时遇到了这个错误,结果证明我只是使用了错误的 AppID。我正在使用带有沙盒 url 的 live 版本,切换它并没问题。

    【讨论】:

      【解决方案3】:

      我使用了这段代码,它可以工作

      headers={'X-EBAY-SOA-OPERATION-NAME':'findItemsByKeywords',
                      'X-EBAY-SOA-SECURITY-APPNAME': 'your-key'}
      
      client = Client(url,headers=headers)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-22
        • 2017-04-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多