blood-moon
@blood-moon
Маленький фрилансер

VK API — Как заставить это работать, доки не спасают ( генерация sig)?

Вот что я нашёл из доков
1 и 2
Код что у меня есть сейчас
Клик
string login = ""; // Login
                string pass = ""; // Pass
                using (var request = new xNet.HttpRequest())
                {
                    request.Cookies = new CookieDictionary();
                    request.AllowAutoRedirect = false;
                    request.UserAgent = "VKAndroidApp/4.10.0-1151 (Android 4.4.2; SDK 19; armeabi-v7a; LGE LGM-V300K; ru)";
                    request.AllowAutoRedirect = false;
                    request.IgnoreProtocolErrors = true;
                    string auth = request.Get("https://oauth.vk.com/token?scope=nohttps%2Call&client_id=2274003&client_secret=hHbZxrka2uZ6jB1inYsH&2fa_supported=1&lang=ru&device_id=&grant_type=password&username=" + login + "&password=" + pass + "&libverify_support=1").ToString();
                    File.AppendAllText("1.txt", auth);
                    if (auth.Contains("access_token"))
                    {
                        string access_token = Pars(auth, "access_token\":\"", "\"", 0);
                        string user_id = Pars(auth, "user_id\":", ",\"", 0);
                        string secret = Pars(auth, "secret\":\"", "\"", 0);
                        string sig = GetMd5Hash(MD5.Create(), "execute.getFriendsAndLists" + secret);

                        string friend_get = request.Get("https://api.vk.com/method/execute.getFriendsAndLists?access_token=" + access_token + "&sig=" + sig).ToString();
                        txtLog.Text = friend_get;
                    }
                    else if (auth.Contains("username_or_password_is_incorrect"))
                    {
                        MessageBox.Show("Bad");
                    }
                    else
                    {
                        MessageBox.Show("Error");
                    }


но получить список друзей методом execute.getFriendsAndLists у меня так и не вышло . И проблема не только с ним . Проблема в том что я не как не могу собрать правильный sig ... выручайте ребят , я уже весь в печали .
Как я хеширую в md5 (может дело в этом . Функцию взял на просторах интернета)
Клик
public static string GetMd5Hash(MD5 md5Hash, string input)
        {
            byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));
            StringBuilder sBuilder = new StringBuilder();
            for (int i = 0; i < data.Length; i++)
            {
                sBuilder.Append(data[i].ToString("x2"));
            }
            return sBuilder.ToString();
        }

  • Вопрос задан
  • 115 просмотров
Решения вопроса 1
@xoo
понравился ответ - поставь ✔
update

sig = md5("api_id={api_id}method=friends.getrandom={random}timestamp={timestamp}user_id={user_id}{app_secret}")

url = "https://api.vkontakte.ru/api.php?api_id={api_id}&method=friends.get&random={random}&timestamp={timestamp}&sig={sig}&user_id={user_id}"


app_secret - ключ приложения, не юзера

Для проверки возьмите хеш от
api_id=2274003method=friends.getrandom=454905timestamp=1547208095user_id=421620512hHbZxrka2uZ6jB1inYsH


Должно получиться
95513c4177ae86f08ea40e9e0ef2797b


у меня работает

end update

Не особо силен в C#, чуть знаю вк апи

В документации сказано, что нужно также передавать версию API параметром V, у вас он пропущен, может в этом проблема?

А здесь указывается, что ваш тип авторизации через https://oauth.vk.com/token требует разрешение администрации

Текст ошибки есть какой-нибудь? В auth токен передается?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Faradise Москва
от 120 000 до 120 000 руб.
от 3 000 до 5 000 usd.
SLC7 Екатеринбург
от 50 000 до 90 000 руб.