powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / SOAP(WSDL) запрос
14 сообщений из 14, страница 1 из 1
SOAP(WSDL) запрос
    #38917818
Maxwellion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте уважаемые форумчанине.

Есть проблема, постараюсь изложить поподробнее.

Данность: Нужно на PHP создать WSDL-запрос, с подключением через сертификат. С SOAP(WSDL) знаком плохо, поэтому поискал, почитал здесь https://php.net/manual/ru/class.soapclient.php
Из прочитанного, я создал следующий php-файл:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
$client = new SoapClient("https://site.ru:8443/PaymentsSrv/banks?wsdl",
array (
	'trace'      => 1,
	'exceptions' => 0,
	'local_cert' => "cert_key.pem"
));

$result = $client->__getFunctions();
print_r($result)."\n

";



При выполнении данного скрипта, выходит результат:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
Array
(
    [0] => unboundResponse unbound(unbound $parameters)
    [1] => getAccountDebtResponse getAccountDebt(getAccountDebt $parameters)
    [2] => getLastQuittanceResponse getLastQuittance(getLastQuittance $parameters)
    [3] => getAccountExistsResponse getAccountExists(getAccountExists $parameters)
    [4] => getOKResponse getOK(getOK $parameters)
)



Вызвал функцию getTypes() , в результате получил следующий ответ:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
Array
(
    [0] => struct getAccountExists {
 string account;
 int paymentType;
}
    [1] => struct getAccountExistsResponse {
 boolean return;
}
    [2] => struct getAccountDebt {
 string account;
 int paymentType;
}
    [3] => struct getAccountDebtResponse {
 debtRecord return;
}
    [4] => struct debtRecord {
 string description;
 dateTime period;
 double summ;
}
    [5] => struct beanShadow {
}
    [6] => struct getLastQuittance {
 string account;
 int paymentType;
}
    [7] => struct getLastQuittanceResponse {
 quittance return;
}
    [8] => struct quittance {
 string accountmanager;
 string billingname;
 string caid;
 decimal calc;
 decimal currentPayment;
 decimal debt;
 int id;
 decimal insurance;
 paymentQuittanceServiceMeter paymentQuittanceServiceMeters;
 decimal penaltyfee;
 int period;
}
    [9] => struct paymentQuittanceServiceMeter {
 decimal calc;
 decimal discount;
 int idService;
 int meterType;
 string servicemeterName;
 int servicemeterNum;
 decimal tariff;
 string unittype;
 decimal vdiff;
 decimal vfirst;
 decimal vlast;
}
    [10] => struct unbound {
}
    [11] => struct unboundResponse {
}
    [12] => struct getOK {
}
    [13] => struct getOKResponse {
 string return;
}
)



Из всего вышесказанного выясняется что есть функция getOK которая вызывается без всяких параметров.


Проблема:
Пытаюсь вызвать функцию getOK таким способом:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
$client = new SoapClient("https://site.ru:8443/PaymentsSrv/banks?wsdl",
array (
	'trace'      => 1,
	'exceptions' => 0,
	'local_cert' => "cert_key.pem"
));

$result = $client->getOK();
$result = ($client->__getLastResponse());

ECHO 'RESULT: ';
print_r($result)."\n

";



Результата нет, ничего не выводится.

Сделал так:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
$client = new SoapClient("https://site.ru:8443/PaymentsSrv/banks?wsdl",
array (
	'trace'      => 1,
	'exceptions' => 0,
	'local_cert' => "cert_key.pem"
));

$result = $client->getOK();

ECHO 'RESULT: ';
print_r($result)."\n

";



Вышел результат:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
RESULT: SoapFault Object
(
    [message:protected] => Could not connect to host
    [string:Exception:private] => 
    [code:protected] => 0
    [file:protected] => /big/www/my-site.ru/www/test.php
    [line:protected] => 35
    [trace:Exception:private] => Array
        (
            [0] => Array
                (
                    [function] => __doRequest
                    [class] => SoapClient
                    [type] => ->
                    [args] => Array
                        (
                            [0] => <?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://bank.ws.psrv.site.ru/"><SOAP-ENV:Body><ns1:getOK/></SOAP-ENV:Body></SOAP-ENV:Envelope>

                            [1] => https://site.ru:8443/PaymentsSrv/banks
                            [2] => 
                            [3] => 1
                            [4] => 0
                        )

                )

            [1] => Array
                (
                    [file] => /big/www/my-site.ru/www/test.php
                    [line] => 35
                    [function] => __call
                    [class] => SoapClient
                    [type] => ->
                    [args] => Array
                        (
                            [0] => getOK
                            [1] => Array
                                (
                                )

                        )

                )

            [2] => Array
                (
                    [file] => /big/www/my-site.ru/www/test.php
                    [line] => 35
                    [function] => getOK
                    [class] => SoapClient
                    [type] => ->
                    [args] => Array
                        (
                        )

                )

        )

    [previous:Exception:private] => 
    [faultstring] => Could not connect to host
    [faultcode] => HTTP
)


Тут какой-то "Could not connect to host" это что за безобразие, к какому имено хосту он не может подключится? Ответ же какой-то выдаёт? Функции и типы выдал, а тут не может? Или это не одно и то же и совсем разное?

Вопрос: Чего я не так делаю и как нужно делать? Мне кажется я неправильно функцию getOK вызываю, а как правильно это сделать не пойму. Подскажите кто чем может, как правильно должно быть, можете ссылками покидать, я постараюсь вникнуть, если не сложно можете словами написать, буду признателен:) Заранее спасибо.
...
Рейтинг: 0 / 0
SOAP(WSDL) запрос
    #38918187
sxq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в недрах WSDL указывается адреса куда необходимо подключиться для выполнения ваших запросов, опубликуйте содержимое WSDL, мы посмотрим что там.
функции типа getTypes() просто берут всю информацию из WSDL и не делают запросов на сервер.
...
Рейтинг: 0 / 0
SOAP(WSDL) запрос
    #38918343
Maxwellion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не совсем в курсе что такое содержимое WSDL :) Но наверное это(а то у меня и доступа больше ни к чему нет):

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
<?xml version='1.0' encoding='UTF-8'?><!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.6-1b01  svn-revision#13094. --><!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.6-1b01  svn-revision#13094. --><definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://bank.ws.psrv.site.ru/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://bank.ws.psrv.site.ru/" name="banksService">
<types>
<xsd:schema>
<xsd:import namespace="http://bank.ws.psrv.site.ru/" schemaLocation="https://site.ru:8443/PaymentsSrv/banks?xsd=1"/>
</xsd:schema>
</types>
<message name="unbound">
<part name="parameters" element="tns:unbound"/>
</message>
<message name="unboundResponse">
<part name="parameters" element="tns:unboundResponse"/>
</message>
<message name="getAccountDebt">
<part name="parameters" element="tns:getAccountDebt"/>
</message>
<message name="getAccountDebtResponse">
<part name="parameters" element="tns:getAccountDebtResponse"/>
</message>
<message name="getLastQuittance">
<part name="parameters" element="tns:getLastQuittance"/>
</message>
<message name="getLastQuittanceResponse">
<part name="parameters" element="tns:getLastQuittanceResponse"/>
</message>
<message name="getAccountExists">
<part name="parameters" element="tns:getAccountExists"/>
</message>
<message name="getAccountExistsResponse">
<part name="parameters" element="tns:getAccountExistsResponse"/>
</message>
<message name="getOK">
<part name="parameters" element="tns:getOK"/>
</message>
<message name="getOKResponse">
<part name="parameters" element="tns:getOKResponse"/>
</message>
<portType name="banks">
<operation name="unbound">
<input wsam:Action="http://bank.ws.psrv.site.ru/banks/unboundRequest" message="tns:unbound"/>
<output wsam:Action="http://bank.ws.psrv.site.ru/banks/unboundResponse" message="tns:unboundResponse"/>
</operation>
<operation name="getAccountDebt">
<input wsam:Action="http://bank.ws.psrv.site.ru/banks/getAccountDebtRequest" message="tns:getAccountDebt"/>
<output wsam:Action="http://bank.ws.psrv.site.ru/banks/getAccountDebtResponse" message="tns:getAccountDebtResponse"/>
</operation>
<operation name="getLastQuittance">
<input wsam:Action="http://bank.ws.psrv.site.ru/banks/getLastQuittanceRequest" message="tns:getLastQuittance"/>
<output wsam:Action="http://bank.ws.psrv.site.ru/banks/getLastQuittanceResponse" message="tns:getLastQuittanceResponse"/>
</operation>
<operation name="getAccountExists">
<input wsam:Action="http://bank.ws.psrv.site.ru/banks/getAccountExistsRequest" message="tns:getAccountExists"/>
<output wsam:Action="http://bank.ws.psrv.site.ru/banks/getAccountExistsResponse" message="tns:getAccountExistsResponse"/>
</operation>
<operation name="getOK">
<input wsam:Action="http://bank.ws.psrv.site.ru/banks/getOKRequest" message="tns:getOK"/>
<output wsam:Action="http://bank.ws.psrv.site.ru/banks/getOKResponse" message="tns:getOKResponse"/>
</operation>
</portType>
<binding name="banksPortBinding" type="tns:banks">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="unbound">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="getAccountDebt">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="getLastQuittance">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="getAccountExists">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="getOK">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="banksService">
<port name="banksPort" binding="tns:banksPortBinding">
<soap:address location="https://site.ru:8443/PaymentsSrv/banks"/>
</port>
</service>
</definitions>
...
Рейтинг: 0 / 0
SOAP(WSDL) запрос
    #38918345
sxq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
судя по файлу, https://site.ru:8443/PaymentsSrv/banks - это точка обращения при обработке всех запросов.
попробуйте открыть в обычном браузере, у меня тайм аут.

вот секция отвечающая за это
<service name="banksService">
<port name="banksPort" binding="tns:banksPortBinding">
<soap:address location=" https://site.ru:8443/PaymentsSrv/banks"/>
</port>
</service>
...
Рейтинг: 0 / 0
SOAP(WSDL) запрос
    #38918355
Maxwellion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sxqсудя по файлу, https://site.ru:8443/PaymentsSrv/banks - это точка обращения при обработке всех запросов.
попробуйте открыть в обычном браузере, у меня тайм аут.

вот секция отвечающая за это
<service name="banksService">
<port name="banksPort" binding="tns:banksPortBinding">
<soap:address location=" https://site.ru:8443/PaymentsSrv/banks"/>
</port>
</service>

Ну я реальное название сайта изменил на site.ru если чем-то поможет, то реальное ссылка https://inkomus.ru:8443/PaymentsSrv/banks?wsdl но туда всё равно без сертификата не пустит. Сертификат я разумеется выдать не смогу:)
При открытии в обычном браузере(при установленном сертификате) у меня открывается.

Про указанную секцию, что с этим делать? мне нужно обращаться(посылать запросы) на https://site.ru:8443/PaymentsSrv/banks ?
...
Рейтинг: 0 / 0
SOAP(WSDL) запрос
    #38918359
Maxwellion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изменил у себя в скрипте
Код: php
1.
$client = new SoapClient("https://site.ru:8443/PaymentsSrv/banks?wsdl",


на
Код: php
1.
$client = new SoapClient("https://site.ru:8443/PaymentsSrv/banks",


Так вообще работать перестало, браузер пишет "Удалённая страница недоступна". В первом варианте хоть какой-то ответ выдаёт.
...
Рейтинг: 0 / 0
SOAP(WSDL) запрос
    #38918363
Maxwellion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я хреновасто в этом секу(точнее совсем тёмный лес), поэтому рождаются дурацкие предположения, но думаю может если я обращають на HTTPS может мой php-скрипт тоже должен быть HTTPS типа https://my-site.ru/test.php сейчас он просто http://my-site.ru/test.php а то получается, что на той стороне защищённый канал связи а у меня хрен знает что. Или это безосновательные предположения?
На эту мысль меня навели последние строки ответа:
Код: php
1.
2.
3.
    [previous:Exception:private] => 
    [faultstring] => Could not connect to host
    [faultcode] => HTTP
...
Рейтинг: 0 / 0
SOAP(WSDL) запрос
    #38918373
Maxwellion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пытаюсь пробовать разные варианты:
1. Подсунул пустой сертификат cert_key.pem просто пустой текстовый файл переименовал и подсунул. выдаётся тот же результат что и в первом посту.
2. Вообще убрал строчку 'local_cert' => "cert_key.pem" результат тот же
3. Подсунул сертификат который сгенерировал для Delphi(изначально хотел через Delphi обращаться) который внутри содержит блоки CERTIFICATE, CERTIFICATE и PRIVATE KEY в результате вышла ошибка stdClass Object ( [return] => NO AUTH )

До этого подсовывал сертификат который мне выдала сама организация, он по размеру больше раза в два и в нём 3 блока CERTIFICATE

Может его как-то нужно преобразовать, специально для PHP? В сертификатах я тоже плохо разбираюсь:)
...
Рейтинг: 0 / 0
SOAP(WSDL) запрос
    #38918482
kunaksergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxwellion,
что-то я вызова функции getOk в упор не вижу
...
Рейтинг: 0 / 0
SOAP(WSDL) запрос
    #38918486
Maxwellion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kunaksergeyMaxwellion,
что-то я вызова функции getOk в упор не вижу

Я думал это так нужно: $result = $client->getOK();
Я не прав? Поправьте, пожалуйста.
...
Рейтинг: 0 / 0
SOAP(WSDL) запрос
    #38918516
kunaksergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxwellion,
если GetOk это метод сервера, то по-моему __soapCall php.net/manual/ru/soapclient.soapcall.php
...
Рейтинг: 0 / 0
SOAP(WSDL) запрос
    #38918686
Maxwellion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kunaksergeyMaxwellion,
если GetOk это метод сервера, то по-моему __soapCall php.net/manual/ru/soapclient.soapcall.php

Так тоже пробовал:
1 Делал так:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
$client = new SoapClient("https://site.ru:8443/PaymentsSrv/banks?wsdl",
array (
	'trace'      => 1,
	'exceptions' => 0,
	'local_cert' => "cert_key.pem"
));

$result = $client->__soapCall("getOK"); 

ECHO 'RESULT: ';
print_r($result);



2. И делал так:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
$client = new SoapClient("https://site.ru:8443/PaymentsSrv/banks?wsdl",
array (
	'trace'      => 1,
	'exceptions' => 0,
	'local_cert' => "cert_key.pem"
));

$result = $client->__soapCall("getOK"); 
$result = ($client->__getLastResponse());

ECHO 'RESULT: ';
print_r($result);



Вообще нулевой результат ни ответа, ни привета.
...
Рейтинг: 0 / 0
SOAP(WSDL) запрос
    #38918803
kunaksergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxwellion,
А сервер-то хоть живой?
...
Рейтинг: 0 / 0
SOAP(WSDL) запрос
    #38918900
Maxwellion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо, разобрался:)
Выяснилось, что меня не добавили в группу тех, кто может получать инфу:) В общем, не мой косяк. Ну а так, всё правильно, всё работает.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / SOAP(WSDL) запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]