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