PageRenderTime 36ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/ab-money-pumb/main.js

http://any-balance-providers.googlecode.com/
JavaScript | 104 lines | 44 code | 3 blank | 57 comment | 3 complexity | 981f4c641a5b597b88b4ebc42fb5af55 MD5 | raw file
  1. /**
  2. Провайдер AnyBalance (http://any-balance-providers.googlecode.com)
  3. */
  4. var g_headers = {
  5. 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  6. 'Accept-Charset': 'windows-1251,utf-8;q=0.7,*;q=0.3',
  7. 'Accept-Language': 'ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4',
  8. 'Connection': 'keep-alive',
  9. 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36',
  10. };
  11. function main() {
  12. var prefs = AnyBalance.getPreferences();
  13. var baseurl = 'https://online.pumb.ua/';
  14. AnyBalance.setDefaultCharset('utf-8');
  15. checkEmpty(prefs.login, 'Введите логин!');
  16. checkEmpty(prefs.password, 'Введите пароль!');
  17. var html = AnyBalance.requestGet(baseurl + 'Pages/Login/internet-banking-index_ua.aspx', g_headers);
  18. var params = createFormParams(html, function(params, str, name, value) {
  19. if (name == 'tbLogin')
  20. return prefs.login;
  21. else if (name == 'tbPassword')
  22. return prefs.password;
  23. return value;
  24. });
  25. html = AnyBalance.requestPost(baseurl + 'Pages/Login/internet-banking-index_ua.aspx', params, addHeaders({Referer: baseurl + 'Pages/Login/internet-banking-index_ua.aspx'}));
  26. if (!/logout/i.test(html)) {
  27. var error = getParam(html, null, null, /"lblMessage"[^>]*>([^<]+)/i, replaceTagsAndSpaces, html_entity_decode);
  28. if (error)
  29. throw new AnyBalance.Error(error);
  30. throw new AnyBalance.Error('Не удалось зайти в личный кабинет. Сайт изменен?');
  31. }
  32. fetchAccount(html, baseurl);
  33. }
  34. function getStateParams(html, param) {
  35. return getParam(html, null, null, new RegExp(param + '[^>]*value="([^"]+)', 'i'));
  36. }
  37. function fetchAccount(html, baseurl) {
  38. var prefs = AnyBalance.getPreferences();
  39. var lastdigits = prefs.lastdigits ? prefs.lastdigits : '\\d{4}';
  40. //(<tr>\s+<td>\s+<a[^>]+__doPostBack[^>]*AccountDetails(?:[^>]*>){4}\s*\d{4}\s\d\s\d{5}8742[\s\S]*?</tr>)
  41. var reAcc = new RegExp("(<tr>\\s+<td>\\s+<a[^>]+__doPostBack[^>]*AccountDetails(?:[^>]*>){4}\\s*\\d{4}\\s\\d\\s\\d{5}" + lastdigits + '[\\s\\S]*?</tr>)', 'i');
  42. var tr = getParam(html, null, null, reAcc);
  43. if(!tr)
  44. throw new AnyBalance.Error('Не удалось найти ' + (prefs.lastdigits ? 'счет с последними цифрами '+prefs.lastdigits : 'ни одного счета!'));
  45. var result = {success: true};
  46. getParam(tr, result, 'accNum', /__doPostBack[^>]*AccountDetails(?:[^>]*>){4}\s*(\d{4}\s\d\s\d{9})/i, [/\D/g, ''/*, /(\d{4})[\d]*(\d{4})/i, '$1 **** **** $2'*/]);
  47. getParam(tr, result, '__tariff', /__doPostBack[^>]*AccountDetails(?:[^>]*>){4}\s*(\d{4}\s\d\s\d{9})/i, [/\D/g, '', /(\d{4})[\d]*(\d{4})/i, '$1 **** **** $2']);
  48. getParam(tr, result, 'balance', /__doPostBack[^>]*AccountHistory(?:[^>]*>){4}([^<]+)/i, replaceTagsAndSpaces, parseBalance);
  49. getParam(tr, result, ['currency', 'balance'], /__doPostBack[^>]*AccountHistory(?:[^>]*>){6}([^<]+)/i, replaceTagsAndSpaces);
  50. if(isAvailable(['cardName', 'cardNumber', 'till', 'status', 'blocked_balance', 'fio'])) {
  51. var details = getParam(html, null, null, /__doPostBack[^']*'([^']*AccountDetails)/i);
  52. if(!details) {
  53. AnyBalance.trace('Не удалось найти ссылку на подробную информацию о счете, сайт изменен?');
  54. } else {
  55. html = AnyBalance.requestPost(baseurl + 'Pages/MainPage.aspx', {
  56. '__EVENTTARGET':details,
  57. '__EVENTARGUMENT':'',
  58. '__LASTFOCUS':'',
  59. '__VSTATE':getStateParams(html, '__VSTATE'),
  60. '__VIEWSTATE':'',
  61. '__VIEWSTATEENCRYPTED':'',
  62. '__PREVIOUSPAGE':getStateParams(html, '__PREVIOUSPAGE'),
  63. '__EVENTVALIDATION':getStateParams(html, '__EVENTVALIDATION'),
  64. 'ctl00$ddlTheme':'Default'
  65. }, addHeaders({Referer: 'Pages/MainPage.aspx'}));
  66. // Название карты
  67. getParam(html, result, 'cardName', /imgCard"(?:[^>]+>){3}([^<]+)/i, replaceTagsAndSpaces);
  68. getParam(html, result, 'cardNumber', /CardDetails(?:[^>]+>){1}([^<]+)/i, replaceTagsAndSpaces);
  69. getParam(html, result, 'till', /CardDetails(?:[^>]+>){6}([^<]+)/i, replaceTagsAndSpaces, parseDate);
  70. getParam(html, result, 'status', /CardDetails(?:[^>]+>){8}([^<]+)/i, replaceTagsAndSpaces);
  71. getParam(html, result, 'blocked_balance', /Блоковано(?:[^>]*>){4}([^<]+)/i, replaceTagsAndSpaces, parseBalance);
  72. getParam(html, result, 'fio', /Клієнт:(?:[^>]*>){2}([^<]+)/i, replaceTagsAndSpaces, capitalFirstLenttersDecode);
  73. }
  74. }
  75. AnyBalance.setResult(result);
  76. }
  77. /** Приводим все к единому виду вместо ИВаНов пишем Иванов */
  78. function capitalFirstLenttersDecode(str) {
  79. str = html_entity_decode(str + '');
  80. var wordSplit = str.toLowerCase().split(' ');
  81. var wordCapital = '';
  82. for (i = 0; i < wordSplit.length; i++) {
  83. wordCapital += wordSplit[i].substring(0, 1).toUpperCase() + wordSplit[i].substring(1) + ' ';
  84. }
  85. return wordCapital.replace(/^\s+|\s+$/g, '');;
  86. }