From 6fd6fbd2638ad793f8722723cefa85b73800aaed Mon Sep 17 00:00:00 2001 From: Dmitry Kochin Date: Mon, 24 Feb 2020 13:07:59 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9C=D0=B0=D0=B3=D0=BD=D0=B8=D1=82=20(ab-bonu?= =?UTF-8?q?s-magnit):=20-=20=D0=9F=D0=B5=D1=80=D0=B2=D0=B0=D1=8F=20=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D1=81=D0=B8=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=B9=D0=B4=D0=B5=D1=80=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ab-bonus-magnit/anybalance-manifest.xml | 31 +++++ providers/ab-bonus-magnit/history.xml | 11 ++ providers/ab-bonus-magnit/icon.png | Bin 0 -> 8577 bytes providers/ab-bonus-magnit/main.js | 131 ++++++++++++++++++ providers/ab-bonus-magnit/preferences.xml | 25 ++++ 5 files changed, 198 insertions(+) create mode 100644 providers/ab-bonus-magnit/anybalance-manifest.xml create mode 100644 providers/ab-bonus-magnit/history.xml create mode 100644 providers/ab-bonus-magnit/icon.png create mode 100644 providers/ab-bonus-magnit/main.js create mode 100644 providers/ab-bonus-magnit/preferences.xml diff --git a/providers/ab-bonus-magnit/anybalance-manifest.xml b/providers/ab-bonus-magnit/anybalance-manifest.xml new file mode 100644 index 000000000..0d5ec31c1 --- /dev/null +++ b/providers/ab-bonus-magnit/anybalance-manifest.xml @@ -0,0 +1,31 @@ + + + ab-bonus-magnit + + Магнит + Предоставляет информацию о балансе на бонусной карте сети магазинов Магнит https://magnit.ru

+

Информация берется из личного кабинета https://moy.magnit.ru

+ ]]>
+ Для использования провайдера необходимо активировать карту Магнит в личном кабинете https://moy.magnit.ru

+ ]]>
+ AnyBalance Team <info@anybalance.ru> + + + + + icon.png + preferences.xml + main.js + history.xml + + + + + + + + bonus + ru +
\ No newline at end of file diff --git a/providers/ab-bonus-magnit/history.xml b/providers/ab-bonus-magnit/history.xml new file mode 100644 index 000000000..90fd8b007 --- /dev/null +++ b/providers/ab-bonus-magnit/history.xml @@ -0,0 +1,11 @@ + + + + - Первая версия провайдера. + + + \ No newline at end of file diff --git a/providers/ab-bonus-magnit/icon.png b/providers/ab-bonus-magnit/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..90fdfb05addb0842036ede4aa8bc7fbf5932769e GIT binary patch literal 8577 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 literal 0 HcmV?d00001 diff --git a/providers/ab-bonus-magnit/main.js b/providers/ab-bonus-magnit/main.js new file mode 100644 index 000000000..95c8f44d8 --- /dev/null +++ b/providers/ab-bonus-magnit/main.js @@ -0,0 +1,131 @@ + +/** +Провайдер AnyBalance (http://any-balance-providers.googlecode.com) +*/ + +var g_headers = { + 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', + 'Accept-Charset': 'windows-1251,utf-8;q=0.7,*;q=0.3', + 'Accept-Language': 'ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4', + 'Connection': 'keep-alive', + // Mobile + //'User-Agent':'Mozilla/5.0 (BlackBerry; U; BlackBerry 9900; en-US) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.0.0.187 Mobile Safari/534.11+', + // Desktop + 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36', +}; + +var g_apiHeaders = { + 'Connection': 'Keep-Alive', + 'User-Agent': 'okhttp/3.12.0' +}; + +function callApi(verb, postParams, addH){ + var method = 'GET'; + var h = g_apiHeaders; + if(isset(postParams)){ + method = 'POST'; + } + + if(addH) + h = addHeaders(addH, h); + + var html = AnyBalance.requestPost('https://moy.magnit.ru/b2c/' + verb, postParams, h, {HTTP_METHOD: method}); + + if(!html) + return {__empty: true}; + + var json = getJson(html); + if(json.error && json.error !== 'OTP_REQUIRED'){ + AnyBalance.trace(html); + throw new AnyBalance.Error(json.message, null, /парол|password/i.test(json.error.description)); + } + + return json; +} + +function login(){ + var prefs = AnyBalance.getPreferences(); + delete g_apiHeaders.Authorization; + + var json = callApi('login', { + username: '7' + prefs.login, + password: prefs.password, + channel: 'O', + mobileSystem: 'A' + }); + + if(json.error === 'OTP_REQUIRED'){ + AnyBalance.trace(json.message); + var code = AnyBalance.retrieveCode('Пожалуйста, введите код из SMS для входа в ЛК Магнит', null, {inputType: 'number', timeout: 180000}); + json = callApi('login', { + username: '7' + prefs.login, + password: prefs.password, + channel: 'O', + mobileSystem: 'A' + }, { + 'X-CLM-OTP-Token': code + }); + } + + if(!json.access_token){ + AnyBalance.trace(JSON.stringify(json)); + throw AnyBalance.Error('Не удалось зайти в личный кабинет. Сайт изменен?'); + } + + AnyBalance.setData('login', prefs.login); + AnyBalance.setData('access_token', json.access_token); + AnyBalance.setData('refresh_token', json.refresh_token); + AnyBalance.saveData(); +} + +function setAuthHeaders(){ + var at = AnyBalance.getData('access_token'); + g_apiHeaders.Authorization = 'Bearer ' + at; + //g_apiHeaders.queryMode = '2'; +} + +function main() { + var prefs = AnyBalance.getPreferences(); + AnyBalance.setDefaultCharset('utf-8'); + + AB.checkEmpty(prefs.login, 'Введите номер телефона!'); + AB.checkEmpty(/^\d{10}$/.test(prefs.login), 'Введите 10 цифр номера телефона без пробелов и разделителей, например, 9261234567 !'); + AB.checkEmpty(prefs.password, 'Введите пароль!'); + + var _login = AnyBalance.getData('login'); + if(_login !== prefs.login){ + login(); + } + + setAuthHeaders(); + var json; + + try{ + json = callApi('me'); + if(json.anonymized) + throw new AnyBalance.Error('Not logged in'); + }catch(e){ + //Надо бы по рефреш токену восстановить здесь доступ + //но пока просто логин + login(); + setAuthHeaders(); + + json = callApi('me'); + if(json.anonymized){ + AnyBalance.trace(JSON.stringify(json)); + throw new AnyBalance.Error('Не удалось зайти в личный кабинет после попытки авторизации. Сайт изменен?'); + } + } + + + var result = { + success: true + }; + + AB.getParam(json.mainPointsBalance/100, result, 'balance'); + AB.getParam(json.firstName, result, 'fio'); + AB.getParam(json.mainIdentifier, result, '__tariff'); + AB.getParam(json.statusName, result, 'status'); + + AnyBalance.setResult(result); +} diff --git a/providers/ab-bonus-magnit/preferences.xml b/providers/ab-bonus-magnit/preferences.xml new file mode 100644 index 000000000..88b49b847 --- /dev/null +++ b/providers/ab-bonus-magnit/preferences.xml @@ -0,0 +1,25 @@ + + + + + + + \ No newline at end of file