23 / 24 / 11
Регистрация: 04.12.2014
Сообщений: 422
1

JSON запросы к сайту Qiwi-кошелька

14.07.2015, 20:33. Показов 4406. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет, дорогие форумчане, это моя первая тема, прошу не судить строго.
Хотелось узнать что я делаю не так при авторизации в киви кошельке со своей программы, код будет ниже.
Как я понял, здесь используется JSON его вполне получилось имитировать, но авторизации нету.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
        public string Test(string login, string pass)
        {
            CookieContainer QiwiCook = new CookieContainer();
            string mony = "";
            {
                string data = "{\"login\":\""+login+"\",\"password\":\""+pass+"\"}";
                string ticket = "";
                {
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"https://qiwi.com/");
                    request.CookieContainer = QiwiCook;
                    request.Method = "GET";
                    request.ContentType = "application/x-www-form-urlencoded";
                    WebResponse response = request.GetResponse();
                    //https://qiwi.com/
                }
                {
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://auth.qiwi.com/cas/tgts");
                    request.Method = "POST";
                    request.CookieContainer = QiwiCook;
                    request.ContentType = "application/json; charset=utf-8";
                    string sQueryString = data;
                    byte[] ByteArr = Encoding.ASCII.GetBytes(sQueryString);
                    request.ContentLength = ByteArr.Length;
                    request.GetRequestStream().Write(ByteArr, 0, ByteArr.Length);
 
                    string html = string.Empty;
                    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                    {
                        using (StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                        {
                            html = myStreamReader.ReadToEnd();
                            ticket = html.Substring("ticket\":\"", "\"");
                        }
                    }
                }
                {
                    string Security = "{\"ticket\":\"" + ticket + "\",\"service\":\"https://qiwi.com/j_spring_cas_security_check\"}";
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://auth.qiwi.com/cas/sts");
                    request.Method = "POST";
                    request.CookieContainer = QiwiCook;
                    request.ContentType = "application/json; charset=utf-8";
                    string sQueryString = Security;
                    byte[] ByteArr = Encoding.ASCII.GetBytes(sQueryString);
                    request.ContentLength = ByteArr.Length;
                    request.GetRequestStream().Write(ByteArr, 0, ByteArr.Length);
 
                    string html = string.Empty;
                    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                    {
                        using (StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                        {
                            html = myStreamReader.ReadToEnd();
                        }
                    }
                }
                {
                    string Security = "{\"service\":\"https://qiwi.com/j_spring_cas_security_check\",\"ticket\":\"" + ticket + "\"}";
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://auth.qiwi.com/cas/sts");
                    request.Method = "POST";
                    request.CookieContainer = QiwiCook;
                    request.ContentType = "application/json; charset=utf-8";
                    string sQueryString = Security;
                    byte[] ByteArr = Encoding.ASCII.GetBytes(sQueryString);
                    request.ContentLength = ByteArr.Length;
                    request.GetRequestStream().Write(ByteArr, 0, ByteArr.Length);
 
                    string html = string.Empty;
                    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                    {
                        using (StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                        {
                            html = myStreamReader.ReadToEnd();
                            ticket = html.Substring("\":\"", "\"");
                        }
                    }
                }
                {
 
                    {
                        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"https://auth.qiwi.com/cas/sts");
                        // request.CookieContainer = QiwiCook;
                        request.Method = "GET";
                        request.ContentType = "application/json;charset=UTF-8";
                        // request.ContentType = "application/json;charset=UTF-8";
                        WebResponse response = request.GetResponse();
                        string html = response.ToString();
 
                    }
                    //OPTIONS
                    {
                        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"https://qiwi.com/j_spring_cas_security_check?ticket=" + ticket);
                        request.CookieContainer = QiwiCook;
                        request.Method = "GET";
                       // request.AllowAutoRedirect = false;
                        request.ContentType = "application/json;charset=UTF-8";
                        WebResponse response = request.GetResponse();
                        string html = response.ToString();
 
                    }
                    {
                        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"https://qiwi.com/main.action");
                        request.CookieContainer = QiwiCook;
                        request.Method = "GET";
                        request.ContentType = "application/x-www-form-urlencoded";
                        WebResponse response = request.GetResponse();
                        string html = response.ToString();
                        mony = html.Substring("<div class=\"account_current_amount\">", "<");
                    }
                }
 
 
            }
Используется библиотека xNet, при компиляции ошибок не было
на всякий случай
C#
1
2
3
4
5
6
7
8
9
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using xNet.Net;
using xNet.Text;
using System.IO;
using System.Net;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.07.2015, 20:33
Ответы с готовыми решениями:

HttpWebRequest: Запросы к сайту, как исправить код
Проверьте пожалуйста код укажите где ошибки. Спасибо. HttpWebRequest req =...

Как узнать баланс QiWi-кошелька программно
Друзья, прошу помощи. Вся задача целиком выглядит так: &quot;Периодически (например, раз в 30 мин)...

Как вывести деньги из qiwi-кошелька в Украине?
Кто-нибудь сталкивался?

Все запросы к сайту
Здравствуйте. Подскажите с таким вопросом. Есть сервер на нем несколько сайтов. 1С выгружает на...

14
3 / 3 / 0
Регистрация: 27.02.2015
Сообщений: 13
15.07.2015, 23:22 2
Доброй ночи. У вас получилось решить вопрос с авторизацией?
0
23 / 24 / 11
Регистрация: 04.12.2014
Сообщений: 422
16.07.2015, 07:07  [ТС] 3
Нет, не получилось.... скажем, так я отправляю логин и пасс, в ответ мне дают ticket (если пароль и логин верный), если нет, то разумеется отвечают "ошибка данных".....
Дальше идет непонятная мне схема авторизации, совсем не понятная... но отличить рабочий акк от не рабочего можно. Мне нужно написать чекер баланса. Если вы пишете брут, то этого достаточно
0
3 / 3 / 0
Регистрация: 27.02.2015
Сообщений: 13
16.07.2015, 10:33 4
Нет, брут я не пишу. Мне самому нужен чекер баланса и страничка последних платежей.
Я посмотрел http-headers которые отправляются браузером, ticket, как я понимаю это "билет", с этим как раз вопросов не возникает. В прошлом варианте авторизации был token, который так же нужно было повторно отправлять с паролем и логином.
Есть вариант реализации на php библиотечкой curl. Сегодня попробую переписать их на шарп. Напишу Вам если что-то получится.
0
23 / 24 / 11
Регистрация: 04.12.2014
Сообщений: 422
16.07.2015, 10:43  [ТС] 5
Хорошо, буду ждать) как я понял, там проблема происходит в
C#
1
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"https://qiwi.com/j_spring_cas_security_check?ticket=" + ticket);
ответ сервера не адекватный, скорее по тому, что и запрос не адекватный
может быть пропущены где-то кукисы или Content-type не тот?
0
3 / 3 / 0
Регистрация: 27.02.2015
Сообщений: 13
16.07.2015, 11:55 6
Так... Я не успеваю просто по времени долго вникать в вопрос.
Вот смотрите, что у меня получается.
Cookie Container я вынес за тело функции, чтоб он жил дольше. И немного поменял Ваш код. В принципе он рабочий.
Страничку платежей мне получить уже удалось. В вашем примере сохранится стартовая страничка киви кошелька после авторизации.. Баланс там видно, но всё равно его хотелось бы получить через JSON.
Мне сейчас нужно отойти, если у Вас получится решить проблему с балансом, скиньте код пожалуйста, чтоб мне тоже время не терять.

В гугле : Newtonsoft.Json.dll

и :
C#
1
2
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
          CookieContainer QiwiCook = new CookieContainer();
 
        public string Test(string login, string pass)
        {
            JObject json;
            string mony = "";
 
 
            {
                string data = "{\"login\":\"" + login + "\",\"password\":\"" + pass + "\"}";
                string ticket = "";
                {
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"https://qiwi.com/");
                    request.CookieContainer = QiwiCook;
                    request.Method = "GET";
                    request.ContentType = "application/x-www-form-urlencoded";
                    WebResponse response = request.GetResponse();
                    //https://qiwi.com/
                }
                {
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://auth.qiwi.com/cas/tgts");
                    request.Method = "POST";
                    request.CookieContainer = QiwiCook;
                    request.ContentType = "application/json; charset=utf-8";
                    string sQueryString = data;
                    byte[] ByteArr = Encoding.ASCII.GetBytes(sQueryString);
                    request.ContentLength = ByteArr.Length;
                    request.GetRequestStream().Write(ByteArr, 0, ByteArr.Length);
 
                    string html = string.Empty;
                    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                    {
                        using (StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                        {
                            html = myStreamReader.ReadToEnd();
                            json = JObject.Parse(html);
                            ticket = (string)json["entity"]["ticket"];
                            Console.WriteLine("Ticket : " + ticket);
                        }
                    }
                }
                {
                    string Security = "{\"ticket\":\"" + ticket + "\",\"service\":\"https://qiwi.com/j_spring_cas_security_check\"}";
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://auth.qiwi.com/cas/sts");
                    request.Method = "POST";
                    request.CookieContainer = QiwiCook;
                    request.ContentType = "application/json; charset=utf-8";
                    string sQueryString = Security;
                    byte[] ByteArr = Encoding.ASCII.GetBytes(sQueryString);
                    request.ContentLength = ByteArr.Length;
                    request.GetRequestStream().Write(ByteArr, 0, ByteArr.Length);
 
                    string html = string.Empty;
                    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                    {
                        using (StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                        {
                            html = myStreamReader.ReadToEnd();
                            Console.WriteLine(html);
                        }
                    }
                }
                {
                    string Security = "{\"service\":\"https://qiwi.com/j_spring_cas_security_check\",\"ticket\":\"" + ticket + "\"}";
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://auth.qiwi.com/cas/sts");
                    request.Method = "POST";
                    request.CookieContainer = QiwiCook;
                    request.ContentType = "application/json; charset=utf-8";
                    string sQueryString = Security;
                    byte[] ByteArr = Encoding.ASCII.GetBytes(sQueryString);
                    request.ContentLength = ByteArr.Length;
                    request.GetRequestStream().Write(ByteArr, 0, ByteArr.Length);
 
                    string html = string.Empty;
                    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                    {
                        using (StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                        {
                            html = myStreamReader.ReadToEnd();
                            json = JObject.Parse(html);
                            ticket = (string)json["entity"]["ticket"];
                            Console.WriteLine("Ticket : " + ticket);
                        }
                    }
                }
 
                {
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"https://qiwi.com/j_spring_cas_security_check?ticket=" + ticket);
                    request.CookieContainer = QiwiCook;
                    request.Method = "GET";
                    //request.AllowAutoRedirect = false;
 
                    request.ContentType = "application/json;charset=UTF-8";
                    WebResponse response = request.GetResponse();
                    StreamReader reader = new StreamReader(response.GetResponseStream());
                    StringBuilder output = new StringBuilder();
                    output.Append(reader.ReadToEnd());
 
                    Console.WriteLine(output.ToString());
 
                    System.IO.File.WriteAllText(@"WriteText.html", output.ToString());
                }
 
 
 
 
 
 
            }
            return "asd";
        }
2
23 / 24 / 11
Регистрация: 04.12.2014
Сообщений: 422
16.07.2015, 12:37  [ТС] 7
Да, вполне все отлично)) спасибо большое, а вот по поводу JSON... там она все еще на сервере у них работает или нет нужно узнать будет, поищу... изменили авторизацию, теперь проблемней, но все же так тоже можно решить))
Спасибо вам огромное
0
Администратор
Эксперт .NET
9616 / 4758 / 761
Регистрация: 17.04.2012
Сообщений: 9,612
Записей в блоге: 14
16.07.2015, 12:52 8
Цитата Сообщение от 1337trix Посмотреть сообщение
Если вы пишете брут, то этого достаточно
чтобы получить карту.
Даже не пытайтесь этого касаться.
Правило 5.7. Запрещено создание и распространение вредоносного ПО, вирусов, кряков и взлома лицензионного софта, а также публикация ссылок для их скачивания.
0
3 / 3 / 0
Регистрация: 27.02.2015
Сообщений: 13
16.07.2015, 13:13 9
1337trix, да не за что. Ведь я и сам этим вопросом занят
А про JSON, надо разобраться тоже в вопросе. Судя по заголовкам браузера ответ о балансе приходит именно в JSON со страницы person/state.action .. Если получится сделать, скиньте этот кусок кода пожалуйста. Я сам только ближе к вечеру смогу попробовать разобраться.

Цитата Сообщение от tezaurismosis Посмотреть сообщение
чтобы получить карту.
Даже не пытайтесь этого касаться.
Правило 5.7. Запрещено создание и распространение вредоносного ПО, вирусов, кряков и взлома лицензионного софта, а также публикация ссылок для их скачивания.
Спасибо Вам за остережение, но мы и не мыслили ни о чём подобном :
Цитата Сообщение от skaaznn Посмотреть сообщение
Нет, брут я не пишу. Мне самому нужен чекер баланса и страничка последних платежей.
1
23 / 24 / 11
Регистрация: 04.12.2014
Сообщений: 422
16.07.2015, 19:09  [ТС] 10
tezaurismosis, я пишу чекер и перевод с кошельков(купил симки, сделал приватные акки все дела)


skaaznn, я скоро буду писать проверку оплаты на php так же хотел бы сделать еще мини интернет-магаз, чтобы при оплате проверялись текущие платежи
0
Администратор
Эксперт .NET
9616 / 4758 / 761
Регистрация: 17.04.2012
Сообщений: 9,612
Записей в блоге: 14
16.07.2015, 19:16 11
1337trix, я вас понял, просто напоминание.
0
3 / 3 / 0
Регистрация: 27.02.2015
Сообщений: 13
16.07.2015, 21:42 12
1337trix, вот ссылка на аналогичный код пхп Авторизация в Qiwi с помощью curl

вот эта строчка возвращает страницу с последними платежами. распарсить её на пхп проще простого.
PHP
1
$res = $curl->get('https://visa.qiwi.com/report/list.action?type=3');
0
23 / 24 / 11
Регистрация: 04.12.2014
Сообщений: 422
17.07.2015, 06:24  [ТС] 13
А вы уверены, что авторизация такого типа еще работает?
PHP
1
$url = "https://visa.qiwi.com/auth/login.action?source=MENU&login=".rawurlencode($phone)."&password=".rawurlencode($password);
у меня лично сомнения...попробовал в браузере поставить значения, как-то не очень красиво получилось
0
3 / 3 / 0
Регистрация: 27.02.2015
Сообщений: 13
17.07.2015, 11:39 14
1337trix, не не, это самый первый и самый старый пост.. Там ниже код..
0
0 / 0 / 0
Регистрация: 27.08.2015
Сообщений: 11
20.12.2015, 18:53 15
Список платежей на кошелек можно узнать по адресу
https://qiwi.com/user/report/l... ections=in
"?type=3&conditions.directions=in" редактируется также как и на https://qiwi.com/report/list.action
Балланс можно посмотреть на странице https://qiwi.com/person/state.action нужно делать POST запрос, приходит json ответ например у меня вот так "
JSON
1
{"code":{"value":"0","_name":"NORMAL"},"data":{"balances":{"RUB":1.01},"handledCardCount":0,"linkedCardCount":0,"messages":5,"person":"затёр","unpaidOrderCount":0,"validSession":true,"webmoneyHandledLinksCount":0,"webmoneyLinksCount":0},"message":null,"messages":null}
"

Спасибо вам ребята за полезную тему
0
20.12.2015, 18:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.12.2015, 18:53
Помогаю со студенческими работами здесь

Post-запросы из Delphi к сайту
Всем здравствуйте. Нужно сделать POST запрос из delphi к сайту, а именно как это сделать?

Запросы к сайту, их обработка: технологии, советы
Задача: Взять расписание занятий (http://mf.grsu.by/timetable_new). Сохранить его (т.е. не...

Как отправлять get и post запросы сайту? visual studio c++
Помогите разобраться как в visual studio c++ отправлять get и post запросы сайту. Облазив весь...

Один jsp с содержанием, принимающий все http-запросы к сайту.
Тогда не придется в каждой JSP или сервлете вводить Здравствуйте! Есть вопрос: есть сайт на jsp....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru