На работе я должен получить доступ / работать с 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.
У меня была такая же проблема, и я, наконец, понял, что мне нужно передать 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