![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
idhttp json - авторизация qiwi
Djonik © (2015-06-22 10:13:00)Народ, помогите авторизоватся в qiwi через idhttp
в свойствах idhttp -
accept: application/json, text/javascript, */*
charset: windows-1251,utf-8;q=0.7,*;q=0.3
encoding: gzip,deflate
language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
content-type: application/x-www-form-urlencoded
reffer: https://w.qiwi.ru/login.action
useragent: User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0
На форме -
IdHttp
IdSSLIOHandlerSocketOpenSSL
IdCompressorZLib
IdCookieManager
Пробую авторизоваться:
Params := TStringList.Create;
Params.Add('login=телефон');
Params.Add('password=пароль');
answer := IdHttp1.Post(Edit_Url.Text, Params); // https://w.qiwi.com/report/list.action?type=1
Params.Free;
Memo_Answer.Text := Answer;
Так ничего не получается.
Посмотрел, что там в JSON должен приходить ответ, который содержит поле - TOKEN
Вопрос 1:
т.е. я правильно понимаю: надо после первого запроса, получить ответ, добавить токен, и еще раз отослать пост?
Вопрос 2:
Как получить JSON?
Вытащить из ответа, вроде так(вопрос именно - как получить json при моем post запросе выше):
json :=TJSONObject.ParseJSONValue(answer) as TJSONObject;
if Assigned(json) then
begin
for I := 0 to json.Size-1 do
Memo_Answer.Lines.Add(json.Get(i).JsonString.Value);
end
else
Сaption := 'no';
HF-Trade (2015-06-23 12:37:00) [1]К выше написанному -
Ниже код на php. Проверено. Работает. С него и переписывал на инди.
Собсно, вопрос -
Почему инди в запросе баланса(код выше), присылает не то, что нужно?
HF-Trade (2015-06-22 22:16:00) [2]Я загуглил, и взял пример с php + курл.
Переписал... ну как то так.
А с самим киви не работал никогда. Мб и есть так апи какой то, но они вроде для магазинов его суют, а так то, только снифером каким нить посмотреть, что куда..
Хотя полезность.
Игорь Шевченко (2015-06-22 22:13:00) [3]
> я правильно понимаю
а что, система настолько закрытая, что информацию по работе с ней надо на форумах искать ?
HF-Trade (2015-06-22 22:02:00) [4]
Var
json : TJSONObject;
answer : String;
stream : TStringStream;
Token : String;
begin
idhttp1.Request.CustomHeaders.Add('X-Requested-With: XMLHttpRequest');
stream:=TStringStream.Create('');
stream.WriteString('source=MENU&login=+номер_мобилы&password=пароль');
Answer := IdHttp1.Post(' https://qiwi.ru/auth/login.action', stream);
JSON := TJSONObject.ParseJSONValue(answer) as TJSONObject;
IF Assigned(JSON) Then
Begin
Token := JSON.ToString;
Delete(Token, 1, POS('"token":"', token) + 8);
Delete(Token, POS('"', Token), Length(Token));
// Можно конечно и как JSON вытащить data - token
stream.WriteString('&loginToken=' + Token);
Answer := IdHttp1.Post(' https://qiwi.ru/auth/login.action', Stream);
JSON := TJSONObject.ParseJSONValue(answer) as TJSONObject;
IF Assigned(JSON) Then
Begin
Stream.Clear; // Больше вроде не нужно
IdHttp1.Request.Referer := ' https://qiwi.ru/main.action';
Answer := IdHttp1.Post(' https://w.qiwi.com/person/state.action', Stream);
JSON := TJSONObject.ParseJSONValue(answer) as TJSONObject;
IF Assigned(JSON) Then
Memo1.Lines.Add(json.ToString)
Else
Caption := 'no json';
End
Else
Caption := 'no json';
End
Else
Caption := 'no json';`
Stream.Free;
Как то так...
Авторизация проходит, ответ верный -
{"code":{"value":"7","_name":"TOKEN"},"data":{"parameters":null,"token":"6 754631581734996392","url":null},"message":null,"messages":null}
{"code":{"value":"0","_name":"NORMAL"},"data":null,"message":null,"messages":nul l}
Но потом, не могу получить данные - как я понял, должен прийти баланс и т.п. Я так понимаю они тут должны быть. Инфу брал с форумов, сам фидлером не смотрел, что там...
{"code":{"value":"11","_name":"SESSION"},"data":null,"message":null,"messa ges":null}
P.S. Если кто доделает - отпишите, как там баланс дернуть