Saldo - en Swedbank/ Nordea/ ICA/ LF/ Coop widget [1.2.0]

Diskussion i 'Applikationsutveckling' startad av kria, 25 apr 2010.

  1. Sed

    Sed Adult Droid Medlem

    Blev medlem:
    18 mar 2010
    Inlägg:
    968
    Mottagna gillanden:
    310

    MINA ENHETER

    Är ganska säker på att jag provade den först utan att lyckas. Men det börjar bli många inloggningar att hålla reda på nu. :).
     
  2. kria

    kria Youth Droid Medlem

    Blev medlem:
    31 okt 2009
    Inlägg:
    107
    Mottagna gillanden:
    0

    MINA ENHETER

    Hehe jo. Bankerna borde väl börja ta slut snart :)
     
  3. dimaZ

    dimaZ Senior Droid Medlem

    Blev medlem:
    7 okt 2009
    Inlägg:
    1 035
    Mottagna gillanden:
    217
    Operatör:
    Fello
    Telefon:
    Samsung Galaxy S22 Ultra

    MINA ENHETER

    Operatör:
    Fello
    Telefon:
    Samsung Galaxy S22 Ultra
    Telefon 2:
    OnePlus 8 Pro
    Får inte Statoil att fungera, programmet kraschar...
    Tar jag bort statoil så fungerar Swedbank och Ica banken som jag använder
    i vanliga fall...
    Först skrev jag in fel inloggningsuppgifter, men då stod det något om auth fail?
    Men med rätt uppgifter så stängs programmet ner bara.......

    Någon annan som det fungerar eller som det inte fungerar för?
     
  4. kria

    kria Youth Droid Medlem

    Blev medlem:
    31 okt 2009
    Inlägg:
    107
    Mottagna gillanden:
    0

    MINA ENHETER

    Kan du klistra in stacktracen så kan vi kolla.
    http://www.androlib.com/android.application.com-xtralogic-android-logcollector-zpn.aspx
     
  5. Varazir

    Varazir Senior Droid Medlem

    Blev medlem:
    15 sept 2009
    Inlägg:
    1 464
    Mottagna gillanden:
    54
    Operatör:
    Telia
    Telefon:
    Pixel 5

    MINA ENHETER

    Operatör:
    Telia
    Telefon:
    Pixel 5
    Info:
    Nova launcher
    Last edited: 28 maj 2010
  6. Sed

    Sed Adult Droid Medlem

    Blev medlem:
    18 mar 2010
    Inlägg:
    968
    Mottagna gillanden:
    310

    MINA ENHETER

  7. Volatyle

    Volatyle Teen Droid Medlem

    Blev medlem:
    14 jan 2010
    Inlägg:
    410
    Mottagna gillanden:
    88

    MINA ENHETER

    Hej,

    Upptäckte en ny bugg nu när lönen kom in. Det verkar som att belopp över 40.000 inte visas i widgeten. Min säger nu 40.000 jämt, trots att jag har mer än så på privatkontot.

    /Vol
     
  8. tkarki

    tkarki Teen Droid Medlem

    Blev medlem:
    5 nov 2009
    Inlägg:
    388
    Mottagna gillanden:
    2

    MINA ENHETER

    Skaffa lägre lön! ;)
    Vilken bank har du? Måste vara något problem till den, har mitt lån som ligger betydligt högre i LF Bank och det syns ok.
     
  9. kria

    kria Youth Droid Medlem

    Blev medlem:
    31 okt 2009
    Inlägg:
    107
    Mottagna gillanden:
    0

    MINA ENHETER

    Det låter udda. Vilken bank? Jag har över 40k på Swedbank och Nordea utan problem.
     
  10. Volatyle

    Volatyle Teen Droid Medlem

    Blev medlem:
    14 jan 2010
    Inlägg:
    410
    Mottagna gillanden:
    88

    MINA ENHETER

    Swedbank. Det konstiga var att så fort det kom under 40.000 och jag refresha så visade den korrekt belopp. Samt att när jag hade över 40.000 (ett ganska ojämt belopp dessutom) så visade den 40.000 prick.

    Kanske var matningen från swedbank som strulade? Nåväl, jag avvaktar tills det överstiger igen så får vi se om det kvarstår.

    /Vol
     
  11. kria

    kria Youth Droid Medlem

    Blev medlem:
    31 okt 2009
    Inlägg:
    107
    Mottagna gillanden:
    0

    MINA ENHETER

    Det skulle ju kunna varit själva uppräkningen i widgeten som avbröts på nåt vis. Uppdaterade du på refreshknappen i widgeten? Visades det ett annat belopp i widgeten jämför med i kontolistan?
     
  12. Volatyle

    Volatyle Teen Droid Medlem

    Blev medlem:
    14 jan 2010
    Inlägg:
    410
    Mottagna gillanden:
    88

    MINA ENHETER

    Refreshade widgeten vid ett par tillfällen, gick dock aldrig in och kollade i listan.
    Den stod på exakt 40.000 på kronan i ungefär ett dygn, trots att jag aldrig haft ett så exakt belopp på kontot...... Konstigt..

    /Vol
     
  13. claxx

    claxx Kid Droid Medlem

    Blev medlem:
    6 jun 2009
    Inlägg:
    95
    Mottagna gillanden:
    0

    MINA ENHETER

    Först och främst ska jag säga att det är en underbar widget, har dock två problem. Dels så har helt plötsligt uppdateringen slutat funkat med att uppdatera två gånger per dag men det funkar utmärkt med 1 gång i timmen.

    Sedan verkar den inte riktigt överens med mina fonder, den registrerar förändringar ena timmen om att allt tas ut och sedan nästa timme så är allt tillbaka osv trots att någon förändring inte har skett
     
  14. Sed

    Sed Adult Droid Medlem

    Blev medlem:
    18 mar 2010
    Inlägg:
    968
    Mottagna gillanden:
    310

    MINA ENHETER

    Gissar att det är nordea? Det kan vara lite buggigt ja eftersom de ändrar ordningen men ska nog komma på en lösning till det.
     
  15. kria

    kria Youth Droid Medlem

    Blev medlem:
    31 okt 2009
    Inlägg:
    107
    Mottagna gillanden:
    0

    MINA ENHETER

    Jag har samma grej på mina Nordea fonder ibland. Har du börjat nåt på nya Nordea? Annars kan jag ta det i helgen och använda kontonummer som remoteId.
     
  16. tkarki

    tkarki Teen Droid Medlem

    Blev medlem:
    5 nov 2009
    Inlägg:
    388
    Mottagna gillanden:
    2

    MINA ENHETER

    Ja jag har också sett det, rätt irriterande... Kan vara för att de haft tekniska problem på Nordea också.
    Remoteid för Länsförsäkringar vore också finfint!

    Såg att Nordea släppt en applikation för iPhone som verkade väldigt kompetent en några widget har den förstås inte och inte heller notifieringsfunktionen som jag tycker är guld värd! :) (och inte framför allt inte fler banker så där ligger den i lä :)
     
  17. Sed

    Sed Adult Droid Medlem

    Blev medlem:
    18 mar 2010
    Inlägg:
    968
    Mottagna gillanden:
    310

    MINA ENHETER

    Jag började men körde fast så du kan testa. Fick bara null tillbaka när jag körde post.

    Lite testkod
    Kod:
    public class NordeaManager implements BankManager {
        private static final String TAG = "NordeaManager";
        private static final String NAME = "Nordea";
        public final static String KEY_PREFIX = "NOR_";
    
        private static final String LOGIN_URL = "https://internetbanken.privat.nordea.se/nsp/engine";
        private static final String ACCOUNTS_URL = "https://internetbanken.privat.nordea.se/nsp/engine?usecase=menu&command=openmenu&commandorigin=0.leftmenu_view&&menuid=160";
        private static final String CREDITS_URL = "https://internetbanken.privat.nordea.se/nsp/engine?usecase=menu&command=openmenu&commandorigin=0.leftmenu_view&&menuid=147";
        private static final String GUID_PARAM = "guid";
        private static final String FPID_PARAM = "fpid";
        private static final String HASH_PARAM = "hash";
        private static final String COMMAND_PARAM = "commandorigin";
        private static final String USER_PARAM = "userid";
        private static final String PASS_PARAM = "pin";
    
        private static final String ACCOUNTS_REGEX = 
    		"KF00T', '(\\d+)', '([^']+)'[^\\n]*[^>]*>([0-9.,-]+)";
    	
        private static final String CREDITS_REGEX = 
    		"Kontoutdrag[^>]*>([^<]+)<[^\\n]*[^>]*>([0-9.,-]+)";
    
        private static final String FOND_REGEX = 
    		"sendFund[^>]*>([^<]+)<[^\\n]*[^>]*>([0-9.,-]+)";
    
     	private static final String HASH_REGEX= "hash=([^\"\\&]+)";
     	private static final String GUID_REGEX= "guid=([^\"\\&]+)";
     	private static final String FPID_REGEX= "fpid=([^\"\\&]+)";
     	
    	private BankLogin mBankLogin;
    	private Context mContext;
    
    	public NordeaManager(BankLogin bankLogin, Context context) {
    		this.mBankLogin = bankLogin;
    		this.mContext = context;
    	}
    
    	@Override
    	public String getName() {
    		return NAME;
    	}
    
        @Override
        public Map<AccountHashKey, RemoteAccount> getAccounts() throws BankException {
    		return getAccounts(new LinkedHashMap<AccountHashKey, RemoteAccount>());
        }
        @Override
        public Map<AccountHashKey, RemoteAccount> getAccounts(Map<AccountHashKey, RemoteAccount> accounts) throws BankException {
            Log.d(TAG, "-> getAccounts()");
            HttpClient httpClient = new SaldoHttpClient(mContext);
            try {
            	
            	
            	Log.d(TAG, "getting hash,guid,fpid...");
            	String res = HttpHelper.get(httpClient, LOGIN_URL);
            	
    			 Pattern pattern = Pattern.compile(HASH_REGEX);
    			 
    			Matcher matcher = pattern.matcher(res);
    			if (!matcher.find()) {
    				Log.e(TAG, "No hash match.");
    				throw new NordeaException("No hash match.");
    			}
    			String hash = matcher.group(1);
    			Log.d(TAG, "hash= " + hash);
    			
    			pattern = Pattern.compile(GUID_REGEX);
    			matcher = pattern.matcher(res);
    			if (!matcher.find()) {
    				Log.e(TAG, "No guid match.");
    				throw new NordeaException("No guid match.");
    			}
    			String guid = matcher.group(1);
    			Log.d(TAG, "guid= " + guid);
    			
    			pattern = Pattern.compile(FPID_REGEX);
    			matcher = pattern.matcher(res);
    			if (!matcher.find()) {
    				Log.e(TAG, "No fpid match.");
    				throw new NordeaException("No fpid match.");
    			}
    			String fpid = matcher.group(1);
    			Log.d(TAG, "fpid= " + fpid);
    			
    			Log.d(TAG, "getting hash,guid,fpid...");
    		
    	
    			// Do login
                List<NameValuePair> parameters = new ArrayList<NameValuePair>(3);
                parameters.add(new BasicNameValuePair(USER_PARAM, mBankLogin.getUsername()));
                parameters.add(new BasicNameValuePair(PASS_PARAM, mBankLogin.getPassword()));
                parameters.add(new BasicNameValuePair(COMMAND_PARAM, "0.commonlogintabview_SE"));
                parameters.add(new BasicNameValuePair(HASH_PARAM, hash));
                parameters.add(new BasicNameValuePair(GUID_PARAM, guid));
                parameters.add(new BasicNameValuePair(FPID_PARAM, fpid));
                parameters.add(new BasicNameValuePair("usecase","base"));
                parameters.add(new BasicNameValuePair("command","formcommand"));
                parameters.add(new BasicNameValuePair("commonlogin","commonlogin"));
                parameters.add(new BasicNameValuePair("commonlogin$loginLight","Logga in"));
                parameters.add(new BasicNameValuePair("JAVASCRIPT_DETECTED","true"));
                
                
                res = HttpHelper.post(httpClient, LOGIN_URL, parameters);
               
    
                if (res.contains("felaktiga uppgifter")) {
                    //login failed.. bail
                    throw new AuthenticationException("auth fail");
                }
              
               
                pattern = Pattern.compile(GUID_REGEX);
    			matcher = pattern.matcher(res);
    			if (!matcher.find()) {
    				Log.e(TAG, "No guid match.");
    				throw new NordeaException("No guid match.");
    			}
    			guid = matcher.group(1);
    			Log.d(TAG, "guid= " + guid);
    			
    			pattern = Pattern.compile(FPID_REGEX);
    			matcher = pattern.matcher(res);
    			if (!matcher.find()) {
    				Log.e(TAG, "No fpid match.");
    				throw new NordeaException("No fpid match.");
    			}
    			fpid = matcher.group(1);
    			Log.d(TAG, "fpid= " + fpid);
                
                //ACCOUNTS
                Log.d(TAG, "getting account info...");
                res = HttpHelper.get(httpClient, ACCOUNTS_URL+"&guid="+guid+"&fpid="+fpid+"&hash="+hash);
                //Log.d(TAG, "accounts html dump:");
                //Log.d(TAG, res);
                pattern = Pattern.compile(ACCOUNTS_REGEX);
                matcher = pattern.matcher(res);
    
                int ordinal=1;
                while (matcher.find()) {
    
                	int remoteId = Integer.parseInt(matcher.group(1));
                    ordinal = Integer.parseInt(matcher.group(1));
                    String name = Html.fromHtml(matcher.group(2)).toString();
                    long balance = Long.parseLong(matcher.group(3).replaceAll("\\,|\\.", ""))/100;
                    accounts.put(new AccountHashKey(remoteId, bankLogin.getId()), new Account(remoteId, bankLogin.getId(), ordinal, name, balance));
                }
                
                
                
                //CREDIT CARDS
                Log.d(TAG, "getting account info...");
                String res2 = HttpHelper.get(httpClient, CREDITS_URL+"&guid="+guid+"&fpid="+fpid+"&hash="+hash);
                Log.d(TAG, "accounts html dump:");
                Log.d(TAG, res);
                pattern = Pattern.compile(CREDITS_REGEX);
                matcher = pattern.matcher(res2);
                int i = ordinal;
                while (matcher.find()) {
    
                	ordinal = ++i;
                	int remoteId = ordinal+100; // we need a unique remoteId per bank login
                    
                    String name = Html.fromHtml(matcher.group(1)).toString();
                    long balance = Long.parseLong(matcher.group(2).replaceAll("\\,|\\.", ""))/100;
                    accounts.put(new AccountHashKey(remoteId, bankLogin.getId()), new Account(remoteId, bankLogin.getId(), ordinal, name, balance));
                }
                
               //FONDER
                pattern = Pattern.compile(FOND_REGEX);
                matcher = pattern.matcher(res);
                i = ordinal;
                while (matcher.find()) {
    
                	ordinal = ++i;
                	int remoteId = ordinal+200;
                   
                    String name = Html.fromHtml(matcher.group(1)).toString();
                    long balance = Long.parseLong(matcher.group(2).replaceAll("\\,|\\.", ""))/100;
                    accounts.put(new AccountHashKey(remoteId, bankLogin.getId()), new Account(remoteId, bankLogin.getId(), ordinal, name, balance));
                }
               
                
                
                
    
            } catch (IOException e) {
                Log.e(TAG, e.getMessage(), e);
                throw new NordeaException(e.getMessage(), e);
    
            } catch (HttpException e) {
                Log.e(TAG, e.getMessage(), e);
                throw new NordeaException(e.getMessage(), e);
            }
    
            Log.d(TAG, "<- getAccounts()");
    
            return accounts;
            
           
    }
     
  18. kria

    kria Youth Droid Medlem

    Blev medlem:
    31 okt 2009
    Inlägg:
    107
    Mottagna gillanden:
    0

    MINA ENHETER

    Jo jag ska fixa det på LF också.

    Vi med android får vänta som vanligt. :ehm:
    Push notifications hade väl varit klockrent för ändamålet, skumt att dom inte tog med det.
    Man kanske skulle kolla på protokollen för Nordea och Swedbanks iPhone apps, istället för att scrapa som vi gör. Mindre datamängd, mer stringent osv.
    Tyvärr har jag ingen koll på iPhone öht..

    Undrar hur det går med Swedbanks android app förövrigt, skulle ju enligt rykte kommit den här veckan.
     
  19. petter11

    petter11 Youth Droid Medlem

    Blev medlem:
    16 sept 2009
    Inlägg:
    211
    Mottagna gillanden:
    12

    MINA ENHETER

    Tja, jag gilla idéen starkt, men du skulle inte kunna föra in något sorts lösenordsskydd när man ska in i själva programmet?
     
  20. Ziq

    Ziq Senior Droid Medlem

    Blev medlem:
    3 dec 2009
    Inlägg:
    1 915
    Mottagna gillanden:
    179
    Operatör:
    Tele2
    Telefon:
    Samsung Galaxy S7

    MINA ENHETER

    Operatör:
    Tele2
    Telefon:
    Samsung Galaxy S7
    ROM:
    Stock
    Platta:
    Galaxy Tab 10.1
    ROM:
    [AOSP] Android 5.1.1 Lollipop
    Eftersom jag ofta för över mellan sparkonto och kortkonto så får jag alltid två notifieringar om att det har hänt, vilket kan kännas lite onödigt. Kan ni inte lägga in ett valbart filter som filtrerar bort händelser om summan av händelserna på en och samma bank är noll?

    Sent from my HTC Hero using Tapatalk