Форум: "Начинающим";
Текущий архив: 2017.02.26;
Скачать: [xml.tar.bz2];
Внизidhttp json - авторизация qiwi Найти похожие ветки
← →
Djonik © (2015-06-22 10:13) [0]Народ, помогите авторизоватся в 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-22 22:02) [1]
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. Если кто доделает - отпишите, как там баланс дернуть
← →
Игорь Шевченко © (2015-06-22 22:13) [2]
> я правильно понимаю
а что, система настолько закрытая, что информацию по работе с ней надо на форумах искать ?
← →
HF-Trade © (2015-06-22 22:16) [3]Я загуглил, и взял пример с php + курл.
Переписал... ну как то так.
А с самим киви не работал никогда. Мб и есть так апи какой то, но они вроде для магазинов его суют, а так то, только снифером каким нить посмотреть, что куда..
Хотя полезность.
← →
HF-Trade © (2015-06-23 12:37) [4]К выше написанному -
Ниже код на php. Проверено. Работает. С него и переписывал на инди.
Собсно, вопрос -
Почему инди в запросе баланса(код выше), присылает не то, что нужно?<?php
//phpinfo();
$USER_LOGIN = "+номер";
$USER_PASSWORD = "пароль";
$url="https://w.qiwi.com/auth/login.action";
$cookie_file = $_SERVER["DOCUMENT_ROOT"]."/fee/cookie.data";
//Просим токен
$post="source=MENU&login=$USER_LOGIN&password=$USER_PASSWORD";
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array ("Accept: application/json, text/javascript, */*; q=0.01","Content-Type: application/x-www-form-urlencoded; charset=windows-1251","X-Requested-With: XMLHttpRequest"));
curl_setopt($ch,CURLOPT_REFERER, "https://w.qiwi.com/payment/main.action");
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
$html = curl_exec($ch);
$html = json_decode($html,true);
//Выдернули токен
$token = $html["data"]["token"];
echo($token);
//повторяем авторизацию с токеном
$post = "source=MENU&login=$USER_LOGIN&password=$USER_PASSWORD&loginToken=$token";
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_exec($ch);
//мы на сайте.
//проверяем баланс
$url = "https://w.qiwi.com/person/state.action";
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_REFERER, $ref);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "");
$html = curl_exec($ch);
$html = json_decode($html,true);
//print_r( $html);
print "Руб: ".$html["data"]["balances"]["RUB"];
?>
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2017.02.26;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.001 c