В том то и дело что все на PHP только и пишут, и там больше ответов, чем вопросов и всё гораздо проще.
1. Но на php придётся держать свой ключ не дома, а на каком-нибудь сервере, владелец которого может иметь к нему доступ.
2. php - это открытый код, получив доступ к которому, можно меняя его, делать что хочешь
3. Да, я не гуру в защите данных, но думаю, что в случае с домашним компьютером добраться до ключа гораздо сложнее, а поменять что-то в exe-файле почти нереально.
Итак код:
procedure TForm1.Button5Click(Sender: TObject);
Var
Pst: TStringList; // PostData , т.е. строки для Post запроса.
wmid, Podpis, Sklei, OperId,s1, tip: String;
er: smallint;
Begin
wmid := '123456789012';
OperId := '23205594';
tip:='3'; // вернуть все заявки
Memo1.Lines.Add('Подписываю...');
Sklei :=wmid+tip; //+OperId; // для 3го XML интерфейса.
Podpis := Intf.SignString('Sklei');
er:= Intf.ErrorCode;
if er=0 then begin // если подписали успешно, то отправляем XML запрос
Memo1.Lines.Add('Отправляю запрос');
Pst:=TStringList.Create;
Pst.Add('<wm.exchanger.request>'); // откывающий тэг
Pst.Add('<wmid>'+wmid+'</wmid>'); // wmid
Pst.Add('<signstr>'+Podpis+'</signstr>'); // Подпись
Pst.Add('<type>3</type>'); // Тип запроса 3-вернуть все заявки
// Pst.Add('<queryid>+OperId+</queryid>'); // № заявки (не обязательно)
Pst.Add('</wm.exchanger.request>'); // закрывающий тэг
Memo1.Lines.Add(UTF8toNorm(s1));
Pst.Free;
end;
End;
После чего строка s1 содержит:
<?xml version="1.0"?><wm.exchanger.response>
<retval>-4</retval>
<retdesc>Ошибка загрузки XML c параметрами запроса - Ошибка при указании подписи, тег signstr.Идентификатор клиента не указан</retdesc></wm.exchanger.response>
Это была реализация через компонент Indy
Если реализовывать через Synapse то пишет:
Подпись не прошла проверку. Вы уверены что производили цифровую подпись ключами ВМ-идентификатора 123456789012 и подписывали строку 1234567890123 ?
P.S. 123456789012 - wmid
1234567890123 - wmid+'3' т.е. склейка из wmid и 3 - вернуть все заявки
Сообщение отредактировал Serg-vi: 12 ноября 2016 - 21:40