powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi XE3 Soap запрос в СМЭВ
20 сообщений из 20, страница 1 из 1
Delphi XE3 Soap запрос в СМЭВ
    #38378373
Евгенич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения, но как говорится "ответа не нашел". Пытаюсь написать клиента для веб-сервиса ГИС ГМП. Дали WSDL и кучу xsd-схем. Delphi XE3 вроде как проглотил wsdl файл, сформировал юнит со всеми классами. Дело за малым - формировать запрос, в чем я никак не разберусь.

Код: pascal
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.
procedure TForm1.Button1Click(Sender: TObject);
var ws:SmevUnifoService ;
    mes:message_;
    mesdata:messagedata;
    s:sender_;
   
begin

s.Code:='1ххх2';
s.Name_:='БАНК';
mes.Recipient.Code:='1111';
mes.Recipient.Name_:='СМЭВ';
mes.TypeCode:=TypeCodeType(0);
mes.Status:=StatusType(0);
//mes.Date_.AsDateTime:=sysutils.Date ;
mes.ExchangeType:='хз';

mes:=message_.Create;
mesdata:=messagedata.Create;

//получаем интерфейс
ws:=GetSmevUnifoService(false,'',HTTPRIO2 );
//вызываем процедуру

ws.UnifoTransferMsg(mes,mesdata);

end;



Этот код вроде как даже формирует soap-запрос, но его содержание далеко от техзадания:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<?xml version="1.0"?>
<SOAP-ENV:Envelope 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">
  <SOAP-ENV:Body>
      <UnifoTransferMsg xmlns="http://roskazna.ru/SmevUnifoService/">
         <Message xmlns="http://smev.gosuslugi.ru/rev111111">
           <Sender_ xmlns="" xsi:nil="true"/>
           <Recipient xmlns="" xsi:nil="true"/>
           <TypeCode>GSRV</TypeCode>
           <Status>REQUEST</Status>
           <Date_ xmlns="" xsi:nil="true"/>
           <ExchangeType></ExchangeType>
        </Message>
        <MessageData xmlns="http://smev.gosuslugi.ru/rev111111"/>
     </UnifoTransferMsg>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>



То есть заполняются только узлы TypeCode и Status

Прошу помочь разобраться, наверняка найдутся умы, которым это интересно!

WSDL-файл, сформированный по нему unit и шаблон запроса в приложении
...
Рейтинг: 0 / 0
Delphi XE3 Soap запрос в СМЭВ
    #38379477
Фотография Exteris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приведите весь код, этот не может сформировать soap-запрос.
...
Рейтинг: 0 / 0
Delphi XE3 Soap запрос в СМЭВ
    #38380002
Евгенич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Exteris,

Вот так отлавливаю запрос

Код: pascal
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.
procedure TForm1.HTTPRIO2AfterExecute(const MethodName: String;
  SOAPResponse: TStream);
var
  Temp: TStringStream;
begin
Temp := TStringStream.Create('');

    Temp.CopyFrom(SOAPResponse, 0);
    Memo2.Text := Temp.DataString;

    Temp.Free;

end;

procedure TForm1.HTTPRIO2BeforeExecute(const MethodName: string;
  SOAPRequest: TStream);
var
  Temp: TStringStream;
begin
Temp := TStringStream.Create('');

    Temp.CopyFrom(SOAPRequest, 0);
    Memo1.Text := Temp.DataString;

    Temp.Free;

end;



Вот собственно и все, остальное в аттаче.
...
Рейтинг: 0 / 0
Delphi XE3 Soap запрос в СМЭВ
    #38382411
Евгенич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибку нашел: (но появились другие)

Нужно сначала создать message_ и messagedata, а затем присваивать


Код: pascal
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.
procedure TForm1.Button1Click(Sender: TObject);
var ws:SmevUnifoService ;
    mes:message_;
    mesdata:messagedata;
    SB:array of SupplierBillID2;
begin

mes:=message_.Create;
mesdata:=messagedata.Create;

mes.Sender:=smevunifoservice1.sender.Create;
mes.Sender.Code :='1ххх2';
mes.Sender.Name_:='БАНК';

mes.Recipient:=recipient.Create;
mes.Recipient.code:='RKZN35001';
mes.Recipient.Name_:='Казначейство России';


mes.TypeCode:=TypeCodeType(0);
mes.Status:=StatusType(0);
mes.Date_:=Date_.Create;
mes.Date_.AsDateTime:=Date ;
mes.ExchangeType:='0';

mesdata.AppData:=AppData.Create;
mesdata.AppData.exportData:=exportData.Create;
mesdata.AppData.exportData.DataRequest:=Datarequest.Create;
mesdata.AppData.exportData.DataRequest.PostBlock:=PostBlock.Create;

mesdata.AppData.exportData.DataRequest.PostBlock.ID:='7ba91a04-9f25-463e-8227-ca3e46354c43';
//mesdata.AppData.exportData.DataRequest.PostBlock.TimeStamp.AsUTCDateTime:=now;  Теперь ошибка здесь!!!
mesdata.AppData.exportData.DataRequest.PostBlock.SenderIdentifier:='1234ABC123';

setlength(SB,1);
SB[0]:='18800000000001786439';
//mesdata.AppData.exportData.DataRequest.SupplierBillIDs:=SB[0]; и вот здесь!!!

//получаем интерфейс
ws:=GetSmevUnifoService(false,'',HTTPRIO2 );
//вызываем процедуру
ws.UnifoTransferMsg(mes,mesdata);


end;




Но теперь возникают ошибки присвоения (отмечены в комментах)

Выдержка из unita с описанием (для первой ошибки):

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 // ************************************************************************ //
  // XML      : PostBlock, global, <complexType>
  // Namespace : http://roskazna.ru/xsd/PostBlock
  // ************************************************************************ //
  PostBlock = class(TRemotable)
  private
    FID: ID;
    FTimeStamp: TXSDateTime;
    FSenderIdentifier: string;
  public
    destructor Destroy; override;
  published
    property ID:              ID          Index (IS_UNQL) read FID write FID;
    property TimeStamp:        TXSDateTime  Index (IS_UNQL) read FTimeStamp write FTimeStamp;
    property SenderIdentifier: string      Index (IS_UNQL) read FSenderIdentifier write FSenderIdentifier;
  end;





Выдержка из unita с описанием (для второй ошибки):

Код: pascal
1.
2.
3.
4.
5.
6.
DataRequest2 = class(RequestTemplate)
...
property SupplierBillIDs: SupplierBillIDs  Index (IS_OPTN or IS_UNQL) read FSupplierBillIDs write SetSupplierBillIDs stored SupplierBillIDs_Specified;

SupplierBillID2 =  type string;      { "http://roskazna.ru/xsd/PGU_DataRequest"[Smpl] }
  SupplierBillIDs = array of SupplierBillID2;  { "http://roskazna.ru/xsd/PGU_DataRequest"[Cplx] }




Как победить???
...
Рейтинг: 0 / 0
Delphi XE3 Soap запрос в СМЭВ
    #38382448
Фотография Exteris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mesdata.AppData.exportData.DataRequest.PostBlock.TimeStamp - тоже создавать надо.
...
Рейтинг: 0 / 0
Delphi XE3 Soap запрос в СМЭВ
    #38382450
Фотография Exteris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mesdata.AppData.exportData.DataRequest.SupplierBillIDs:=SB;
...
Рейтинг: 0 / 0
Delphi XE3 Soap запрос в СМЭВ
    #38382506
Евгенич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Exterismesdata.AppData.exportData.DataRequest.PostBlock.TimeStamp - тоже создавать надо.

На это:
Код: pascal
1.
mesdata.AppData.exportData.DataRequest.PostBlock.TimeStamp:=Timestamp.Create;


вылетает ошибка (я думал property не нужно создавать, только классы)

Код: pascal
1.
mesdata.AppData.exportData.DataRequest.PostBlock.TimeStamp.Create;


Так тоже вылетает


Exterismesdata.AppData.exportData.DataRequest.SupplierBillIDs:=SB;

На это пишет при компиляции:
[dcc32 Error] Unit1.pas(78): E2010 Incompatible types: 'SupplierBillIDs' and 'Dynamic array'
...
Рейтинг: 0 / 0
Delphi XE3 Soap запрос в СМЭВ
    #38383333
Евгенич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mesdata.AppData.exportData.DataRequest.SupplierBillIDs это property, тип SupplierBillIDs.

SupplierBillIDs это array of SupplierBillID2, а SupplierBillID2 = type string;

Неужели никто не знает как property присвоить значение в этом случае?
может объявить еще какую-то переменную?

Помогите, горю!
...
Рейтинг: 0 / 0
Delphi XE3 Soap запрос в СМЭВ
    #38383817
Евгенич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одну ошибку победил! Exteris был прав:

Код: pascal
1.
mesdata.AppData.exportData.DataRequest.SupplierBillIDs:=SB;



Только объявлена SB была неправильно:
Вместо SB:array of SupplierBillID2 объявил SB:SupplierBillIDs;

Осталась одна ошибка runtime:

Код: pascal
1.
mesdata.AppData.exportData.DataRequest.PostBlock.TimeStamp.AsUTCDateTime:=now;  
...
Рейтинг: 0 / 0
Delphi XE3 Soap запрос в СМЭВ
    #38383872
Фотография Exteris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгеничОсталась одна ошибка runtime
Всегда приводите текст ошибки, гадать надоело.
...
Рейтинг: 0 / 0
Delphi XE3 Soap запрос в СМЭВ
    #38386004
Евгенич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо! Сделал так:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
var dt:TXSDateTime;

...

dt:=TXSDateTime.create;
dt.asDateTime:=now;
mesdata.AppData.exportData.DataRequest.PostBlock.TimeStamp.AsUTCDateTime:=dt;  
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Delphi XE3 Soap запрос в СМЭВ
    #39075528
dr.FausT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Евгенич,
Извиняюсь что поднял старую тему, но у меня сейчас встала такая же проблема. Надо написать клиента для ГИС ГМП. А я в вэб сервисах не очень...

Вы всё ещё занимаетесь СМЭВ или уже нет? Просто есть несколько вопросов, а ответы найти не могу...
...
Рейтинг: 0 / 0
Delphi XE3 Soap запрос в СМЭВ
    #39075976
haydegen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dr.FausTЕвгенич,
Извиняюсь что поднял старую тему, но у меня сейчас встала такая же проблема. Надо написать клиента для ГИС ГМП. А я в вэб сервисах не очень...

Вы всё ещё занимаетесь СМЭВ или уже нет? Просто есть несколько вопросов, а ответы найти не могу...

Список вопросов в студию!
...
Рейтинг: 0 / 0
Delphi XE3 Soap запрос в СМЭВ
    #39076506
dr.FausT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
haydegen,

Вопросы могут показаться нелепыми, но я слабо знаком с веб сервисами и криптографией.

Есть документ, согласно которому должны формироваться запросы в систему.
http://www.roskazna.ru/upload/iblock/a0e/formaty-gis-gmp-1_16_1.docx

Для начала интересует сущность "начисление". Для нее есть схема xsd. Согласно этой схемы формирую xml. Но дальше начинается беда... В документе написано "Значение ЭП должно рассчитываться для элемента сущности, запроса и его составных элементов." пункт 4.3. "Подпись под сущностью, запросом" Выше приведенного документа.
И дальше совсем непонятно :

3.2 Подписываются элементы документа, выбранные посредством XPATH выражения на основе значения атрибута URI элемента Reference (если элемент URI имеет пустое значение, то подписывается полностью весь тег сущности). Полученное значение кодируется по алгоритму « http://www.w3.org/2000/09/xmldsig#base64» и добавляется как дочерний текстовый узел к элементу DigestValue первого элемента Reference.

3.3 Элемент SignedInfo трансформируется в соответствии с алгоритмом « http://www.w3.org/2001/10/xml-exc-c14n#». Затем на основании полученной строки и ключа подписи формируется значение ЭП в соответствии с алгоритмом « http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411». Полученное значение ЭП кодируется в соответствии с алгоритмом « http://www.w3.org/2000/09/xmldsig#base64», и значение добавляется как дочерний текстовый узел к элементу SignatureValue.

3.4 Элемент QualifyingProperties заполняется в соответствии с описанием, расположенным по адресу http://www.w3.org/TR/XAdES/#Syntax_overview_The_QualifyingProperties — для соответствия ЭП формату XadES-T.

То есть от слова вообще.
...
Рейтинг: 0 / 0
Delphi XE3 Soap запрос в СМЭВ
    #39076652
dr.FausT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот отсюда вопрос - как можно подписать XML в формате XADES ? Все примеры которые я видел на Java.
Есть ли какие-нибудь библиотеки для Delphi реализующие подпись в данном формате ?
...
Рейтинг: 0 / 0
Delphi XE3 Soap запрос в СМЭВ
    #39076668
tb3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tb3
Гость
dr.FausTВот отсюда вопрос - как можно подписать XML в формате XADES ? Все примеры которые я видел на Java.
Есть ли какие-нибудь библиотеки для Delphi реализующие подпись в данном формате ?
Коммерческая Eldos SecureBlackBox, может быть по примерам сами разберетесь
https://www.eldos.com/security/articles/7014.php
https://www.eldos.com/security/articles/7895.php
https://www.eldos.com/security/articles/4583.php
То же самое можно сделать в .NET + КриптоПро.NET. Исходников нету.
...
Рейтинг: 0 / 0
Delphi XE3 Soap запрос в СМЭВ
    #39076678
tb3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tb3
Гость
dr.FausT,

аналогично ГИСГМП 1.16 https://www.cryptopro.ru/forum2/default.aspx?g=posts&t=8392
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Delphi XE3 Soap запрос в СМЭВ
    #39608173
Royar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
quot dr.FausT, пишет: "...Для начала интересует сущность "начисление". Для нее есть схема xsd. Согласно этой схемы формирую xml..."

Можете показать, как формируете xml файл? Пока у меня не получается это сделать.
...
Рейтинг: 0 / 0
Delphi XE3 Soap запрос в СМЭВ
    #39608266
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Royar, оффтоп, но все же можете пояснить, как вы подключились к технологической СМЭВ ? Через VipNET ?
...
Рейтинг: 0 / 0
Delphi XE3 Soap запрос в СМЭВ
    #39608670
Royar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wsnetRoyar, оффтоп, но все же можете пояснить, как вы подключились к технологической СМЭВ ? Через VipNET ?
Работаю в браузере через лог/пароль, вручную заношу все начисления здесь http://smart.mfur.ru/bud2018/ где есть функция загрузки сведений о начислениях через импорт так понимаю xml файла с соответствующей структурой. Возможна ли сформировать этот файл через приложение которое считывает инфо об начислениях из файла (текстового) с компьютера?
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi XE3 Soap запрос в СМЭВ
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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