svetlyak40wt / mobile-balance

A command line utility and python library to retrive mobile balance of different mobile operators
49 stars 22 forks source link

Не работает скрипт Tele2 #28

Open mlgns opened 4 years ago

mlgns commented 4 years ago

Теле2 опять поменяла доступ к их API. Есть ли какая-то возможность восстановить или обойти как-то опять? Из функционала нужна всего лишь проверка баланса) Спасибо!

При необходимости могу скинуть все ошибки и их характер.

svetlyak40wt commented 4 years ago

У меня нет Tele2 номера. Это кто-то контрибутил. Попробуй починить и прислать pull-request.

estin commented 4 years ago

Теле2 теперь просит капчу. Для себя сделал cywad где автоматизировал браузер для получения баланса Tele2, и не только Tele2, и теперь увы... Возможно я и задолбил Tele2 так как что бы перейти на форму ввода пароля, надо ввести номер на который уйдет смс-ка, я там указывал все нули ) И это работало около года )

Для себя можно сделать так

Токен вроде должен жить долго, если не долго то надо обновлять его по refresh_token (так же из кук)

Далее

import requests

if __name__ == '__main__':
    number = '7<phone number>'
    token = '<access token from cookies>'
    response = requests.get(
        url='https://my.tele2.ru/api/subscribers/{}/balance'.format(number),
        headers={'Authorization': 'Bearer {}'.format(token)},
    )
    balance = response.json().get('data', {}).get('value', None)
    print("{} - {}".format(number, balance))

Tele2, если читаете, дайте апи по логину и паролю для получения информации о состояния счета и только read-only ))) все будут только довольны.

Tmin10 commented 4 years ago

У теле2 за бэком для сайта стоит keycloak. Можно к нему непосредственно обращаться, чтобы получать токены по логину/паролю и рефрешить его потом. Вот, например, юзер портал, где можно залогиниться через номер и пароль от сайта: https://sso.tele2.ru/auth/realms/tele2-b2c/account

Tmin10 commented 4 years ago

Посмотрел работу вебсайта, access токен живёт 4 часа, а вот refresh токен уже бессмертный, получить по нему access и новый refresh (а старый будет работать и дальше) можно таким запросом:

POST https://sso.tele2.ru/auth/realms/tele2-b2c/protocol/openid-connect/token
grant_type: refresh_token
client_id: digital-suite-web-app
refresh_token: old_refresh_token

Но лучше посмотреть авторизацию приложения, там нет капчи и скорее всего можно обменять логин и пароль на токены. В приложении используется certificate pinning для защиты, но сертификат просто валяется в apk.

gapaus commented 3 years ago

Посмотрел работу вебсайта, access токен живёт 4 часа, а вот refresh токен уже бессмертный, получить по нему access и новый refresh (а старый будет работать и дальше) можно таким запросом:

Через какое то время выдает:

"statusCode": 400,
  "body": {
    "error": "invalid_grant",
    "error_description": "Offline user session not found"
  },
estin commented 3 years ago

@gapaus надо рефрешить access_token используя refresh_token как указал на это Tmin10 отправляя запрос на https://voronezh.tele2.ru/auth/realms/tele2-b2c/protocol/openid-connect/token Т.е. один раз получаем пару access_token/refresh_token и далее: сохраняем, обновляем, используем до тех пор пока и тут Tele2 не прикроет лазейку.

У меня работает с 29 октября без особых проблем след конструкция (автоматизация браузера)

})();



Со стороны  этот "странный" подход использую, как уже писал выше, в https://github.com/estin/cywad
![Снимок экрана в 2020-12-23 22-27-42](https://user-images.githubusercontent.com/520814/103031263-8f6df800-456e-11eb-8eff-031586dee52c.png)
![Снимок экрана в 2020-12-23 22-28-02](https://user-images.githubusercontent.com/520814/103031271-939a1580-456e-11eb-98aa-aaf90741af93.png)

**UPDATE** еще один момент возможно что access_token/refresh_token связаны с сессией в ЛК. Т.е. если сессия "протухла" юзер долго не появлялся, то сессия "зачищается" со всеми `access_token/refresh_token` было разок когда долгое время не "опрашивался ЛК". Сейчас проверка баланса стоит частая и сессия не успевает "протухать"
gapaus commented 3 years ago

@estin у меня работало день или два, потом как раз получилось как в UPDATE. Проверка была раз в час

estin commented 3 years ago

@gapaus извини, еще раз спокойно глянул как у меня работает. а работает оно так

Ну и конечно у меня получается есть "пользовательская активность на сайте".

Самое простое с чего можно начать это: