С одной недели я пытаюсь получить некоторые данные из приложения Dolibarr, включая веб-сервисы Dolibarr.
В двух словах, я пытаюсь сделать запрос на мыло для получения информации о пользователе.
Сначала я пытался создать экземпляр SoapClient с параметрами ‘wsdl’ и ‘trace’, напрасно. Объект SoapClient никогда не создавался!
Во-вторых, я сделал классический объект SoapClient без ‘wsdl’, однако я использовал: ‘location’, ‘action’, ‘namespace’, ‘soap_ns’, ‘trace’; Это был успех (я думаю), но он не работал, когда я вызывал метод вызова Клиента. Мой dolibarrkey не соответствовал моему ключу в веб-сервисе, но их ключи одинаковы (копия & вставить).
Для более подробного объяснения взгляните на dolibarr api (для извлечения данных) с форматом данных xlm.
Ссылка на веб-сервис getUser (нажмите на getUser для отображения параметров):
http://barrdoli.yhapps.com/webservices/server_user.php
Ссылка на формат данных xml (для запроса SOAP может быть):
http://barrdoli.yhapps.com/webservices/server_user.php?wsdl
from pysimplesoap.client import SoapClient, SoapFault
import sys
def listThirdParties():
# create a simple consumer
try:
# client = SoapClient(
# "[MyAppDomain]/webservices/server_user.php")
# print(client)
# client = SoapClient(wsdl="[MyAppDomain]/webservices/server_user.php?wsdl", trace=True)
client = SoapClient(
location = "[myAppDomain]/webservices/server_user.php",
action = '[myAppDomain]/webservices/server_user.php?wsdl', # SOAPAction
namespace = "[myAppDomain]/webservices/server_user.php",
soap_ns='soap',
trace = True,
)
print("connected bitch")
except:
print("error connect")
message = dict()
message['use'] = "encoded"message["namespace"] = "http://www.dolibarr.org/ns/"message["encodingStyle"] = "http://schemas.xmlsoap.org/soap/encoding/"message["message"] = "getUserRequest"
parts = dict()
auth = dict()
auth['dolibarrkey'] = '********************************'
auth['sourceapplication'] = 'WebServicesDolibarrUser'
auth['login'] = '********'
auth['password'] = '********'
auth['entity'] = ''
parts["authentication"] = auth
parts["id"] = 1
parts["ref"] = "ref"parts["ref_ext"] = "ref_ext"message["parts"] = parts
# call the remote method
response = client.call(method='getUser', kwargs=message)
# extract and convert the returned value
# result = response.getUser
# return int(result)
print(response)
pass
У меня есть «BAD_VALUE_FOR_SECURITY_KEY» в ответе xlm, я думаю, что это мой запрос, выполненный с неверным форматом данных xml …
ответ оболочки:
-------- RESPONSE -------
b'<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://www.dolibarr.org/ns/"><SOAP-ENV:Body><ns1:getUserResponse xmlns:ns1="http://barrdoli.yhapps.com/webservices/server_user.php"><result xsi:type="tns:result"><result_code xsi:type="xsd:string">BAD_VALUE_FOR_SECURITY_KEY</result_code><result_label xsi:type="xsd:string">Value provided into dolibarrkey entry field does not match security key defined in Webservice module setup</result_label></result><user xsi:nil="true" xsi:type="tns:user"/></ns1:getUserResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>'
Я действительно хочу знать, как мне сделать рабочий запрос мыла с чистым форматом данных xlm.
Спасибо
Вы пытались настроить WebService Security (WSSE) с client
объект? Следующие примеры взяты из https://code.google.com/p/pysimplesoap/wiki/SoapClient
client['wsse:Security'] = {
'wsse:UsernameToken': {
'wsse:Username': 'testwservice',
'wsse:Password': 'testwservicepsw',
}
}
или попробуйте настроить заголовок аутентификации AuthHeaderElement
client['AuthHeaderElement'] = {'username': 'mariano', 'password': 'clave'}
Других решений пока нет …