Перейти к содержимому


Фотография

Нужна помощь с XML интерфейсом в Delphi


  • Пожалуйста, авторизуйтесь для ответа.
ответов в данной теме 1

#1 Новичок Lazun (WMID 386260350604 )

  • Группа: Пользователи
  • сообщений 4
  • Регистрация: 12-ноября 14
  • Webmoney BL

Отправлено 26 октября 2017 - 13:37

Пытаюсь получить через XML интерфейс №3 https://wm.exchanger...p/rules_xml.asp список   новых заявок конкретного WMID. Уже третий день голову ломаю.

function TForm1.MySignString(var Str: string): string;
var
  ISi: ISigner;
begin
  result := '';
  ISi:= CoSigner.Create;
  with ISi do begin
    Login   := MyLogin;
    Passwd  := MyPasswd;
    KeyFName:= MyKeyFName;
    result := SignString(Str);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ss, SignStr, XMLCode: String;
  Pst: TStringList;
  AData : TStringStream;
begin
  ss:= MyLogin+'3';
  SignStr:=MySignString(ss); // создаем 132-символьную цифровую подпись.
  IdHTTP1:=TIdHTTP.Create(nil);
  IdSSLIOHandlerSocketOpenSSL1:=TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  AData := TStringStream.Create(''); //Создаём пустой буфер для приёма
  // Дальше идут настройки IdHTTP и SSL
  IdHTTP1.ReadTimeout:=2000;
  IdHTTP1.IOHandler:=IdSSLIOHandlerSocketOpenSSL1;
  IdHTTP1.Request.ContentType := 'text/html; charset=utf-8';
  IdHTTP1.Request.Accept := 'text/html, */*';
  IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvSSLv3;
  IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Mode := sslmUnassigned;
  IdSSLIOHandlerSocketOpenSSL1.SSLOptions.VerifyMode := [];
  IdSSLIOHandlerSocketOpenSSL1.SSLOptions.VerifyDepth := 2;
  // Создание XML запроса
    Pst:=TStringList.Create;
    Pst.Add('<wm.exchanger.request>');          //  откывающий тэг
    Pst.Add('<wmid>'+MyLogin+'</wmid>');           //  wmid
    Pst.Add('<signstr>'+SignStr+'</signstr>');   //  132-символьная цифровая подпись
    Pst.Add('<type>3</type>');                        //  Тип запроса 3-вернуть все заявки
    Pst.Add('<queryid></queryid>'); //  № заявки (не обязательно)
    Pst.Add('<capitallerwmid></capitallerwmid>'); //  (не обязательно)
    Pst.Add('</wm.exchanger.request>');         //  закрывающий тэг

    Memo1.Lines.Add('Отправляем запрос:');
    Memo1.Lines.Add(Pst.text); // смотрим что у нас отправляется
    idHTTP1.Post('https://wm.exchanger.ru/asp/XMLWMList2.asp',Pst,AData); // Отправляем XML запрос
    XMLCode:=AData.DataString;  // Сохраняем ответ сервера в переменную XMLCode
    Memo1.Lines.Add('Ответ сервера:');
    Memo1.Lines.add(XMLCode); // смотрим что у нас вернулось с сервера
    Pst.Free;

end;

Вот что получается:

Bezimyanni_2585009_28055136.jpg

Из за неправильной кодировки на выходе не видно что там написано, но там написано "Ошибка загрузки XML c параметрами запроса - Ошибка при указании подписи, тег signstr.Идентификатор клиента не указан"

Помогите пожалуйста найти мой косяк, почему сервер не видит подпись?


Сообщение отредактировал Lazun: 26 октября 2017 - 13:39

    • 0
  • Наверх

#2 Новичок Lazun (WMID 386260350604 )

  • Группа: Пользователи
  • сообщений 4
  • Регистрация: 12-ноября 14
  • Webmoney BL

Отправлено 31 октября 2017 - 16:02

После нескольких дней мучений с Indy, удалось меньше чем за пару часов, решить эту же задачу через компонент Synapse. Так что всем, кто захочет использовать XML интерфейс в DELPHI, используйте не Indy а Synapse. Будет вам счастье.


Сообщение отредактировал Lazun: 31 октября 2017 - 16:05

    • 0
  • Наверх