Отправить массив из Python в PHP - PullRequest
0 голосов
/ 02 июня 2019

Я пытаюсь использовать с Python WSDL, созданный в PHP.

Фрагмент услуги:

        require_once('lib/nusoap.php');
        date_default_timezone_set('America/Mexico_City');
        function Sum($numbers){
            return array_sum($numbers);
        }
        ...

Клиент:

from suds.client import Client

    def wsarchivo():
        url = "http://localhost/PracticeSumArray/server.php?wsdl"
        client = Client(url)
        res = client.service.Sum([1,2,3])
        print(res)

    wsarchivo()

Но при запуске отправка параметра таким способом не работает, в отличие от того, как это делается с клиентом в PHP, что способ отправки параметра будет 'numbers' => array (1, 2, 3) и работает правильно.

1 Ответ

0 голосов
/ 03 июня 2019

Я мог бы решить мою проблему, я оставляю это здесь на случай, если кто-то еще будет полезен, первая ошибка, которую я сделал, была объявить входной параметр как целое xsd:int, поэтому я объявил его как SOAP-ENC:Array всервер в PHP:

$server->register(
        'Suma',
        array('numbers' => 'SOAP-ENC:Array'),
        array('return' => 'xsd:int'),
        $ns
    );

Теперь в клиенте Python я использовал метод factory.create() клиента suds для объявления переменной типа SOAP-ENC:Array

from suds.client import Client

def wsarchivo():
    client = Client("http://localhost/PracticaSumaArray/server.php?wsdl")
    request = client.factory.create('SOAP-ENC:Array')
    request.numbers = [1,2,3]
    res = client.service.Suma(request)
    print(res)

wsarchivo()

Когдавыполняя:

Output:
6
...