Python - SUDS SOAP Неверные пространства имен - советник канала? - PullRequest
1 голос
/ 02 марта 2011

На работе я должен получить доступ / работать с API Channel Advisor

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

Источник:

Я пытаюсь выполнить простой пинг

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 советника канала

Обновление:

* Поскольку я не получил никаких ответов, я постараюсь обновить всех, если / когда я найду решение (3 марта 2011 г.)

Я думаю, что часть проблемы в том, что SUDS может неправильно включать вложенные файлы WSDL.

1 Ответ

3 голосов
/ 27 июня 2011

У меня была такая же проблема, и я, наконец, понял, что мне нужно передать APICredentials для CA, чтобы ответить на любой запрос, даже пинг.Вот пример:

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
...