Пытаюсь получить через 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;
Вот что получается:
Из за неправильной кодировки на выходе не видно что там написано, но там написано "Ошибка загрузки XML c параметрами запроса - Ошибка при указании подписи, тег signstr.Идентификатор клиента не указан"
Помогите пожалуйста найти мой косяк, почему сервер не видит подпись?
Сообщение отредактировал Lazun: 26 октября 2017 - 13:39