24.08.2017, 19:00
|
Модератор
|
|
Регистрация: 17.04.2008
Сообщения: 8,018
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
|
|
Ну, как-то примерно так:
Код:
uses IdGlobal, IdHash, IdHashMessageDigest, IdHTTP, ActiveX;
// Взято с stackoverflow.com
function GetMD5(AStr : String) : String;
var
h : TIdMessageDigest5;
begin
h := TIdMessageDigest5.Create;
Try
Result := IdGlobal.IndyLowerCase(h.HashStringAsHex(AStr));
Finally
h.Free;
End;
end;
// Генерация уникального номера транзакции.
// Создаем новый GUID, потом вырезаем из него ненужный мусор.
function CreateTrNumber : String;
var
g : TGUID;
gs : String;
I : Integer;
begin
OleCheck(CoCreateGUID(g));
gs := LowerCase(GUIDToString(g));
Result := '';
for I := 1 To Length(gs) Do
If gs[i] in ['0'..'9','a'..'f'] Then Result := Result + gs[i];
end;
// Собственно, запрос на сервер
function GetURLAsString(AURL : String; ): String;
const
cServer = 'http://sample-api-domain.net';
var
HTTP: TIdHTTP;
begin
HTTP := TIdHTTP.Create;
try
Result := lHTTP.Get(cServer + aURL);
finally
HTTP.Free;
end;
end;
// Имплементация API
// Новый счет.
// Принимает - публичный ключ, секретный ключ, сумма
// Возвращает - номер счета
function API_NewInvoice(APubKey, ASecKey, ASum : Double) : String;
const
cNewInvoiceURL = '/api/invoice/new?tr=%s&key=%s&sum=%s';
var
Url, Sign : String;
Buf : String;
begin
Url := Format(cNewInvoiceURL,[CreateTrNumber,APubKey,ASum]);
Sign := GetMD5(Url+':'+ASecKey);
Buf := GetURLAsString(Url+'&sign='+Sign);
// Дальше парсаем полученный JSON. Примеров в инете полно.
...
Result := ...
end;
Как разобрать полученный JSON - найдешь сам.
По хорошему, там надо класс сделать, в котором сразу инкапсулировать ключи и написать все методы. Я просто привет пример как вообще с этим работать...
|