walle89 / SwedbankJson

Unofficial API client for the Swedbank's and Sparbankerna's mobile apps in Sweden.
MIT License
75 stars 14 forks source link

Snabbsaldo utan krav på inlogging #19

Closed walle89 closed 8 years ago

walle89 commented 9 years ago

Att kunna se snabbsaldo (aka. quickbalance) utan att behöva logga in.

NisseDILLIGAF commented 9 years ago

gjorde denna lite snabbt... och det verkar funka... :) ska nog kontrollera Exception på login.. men vet inte riktigt hur jag kollar det.

https://github.com/NisseDILLIGAF/SwedbankJson/commit/1814aa522c8f9c3ebd3301c99ff3cd9bc8301cfd

walle89 commented 9 years ago

Du har dock problemet att den fortfarande använde auth-url:en istället för unauth: https://github.com/NisseDILLIGAF/SwedbankJson/blob/master/src/Auth/AbstractAuth.php#L25

Sen är det inte akut eftersom att personlig kod fungerar fortfarande och jag tror nog att det kommer finnas en lösning fram tills dess.

NisseDILLIGAF commented 9 years ago

jo, det har du rätt i ... visste inte om det gjorde något att jag använde auth-url:en ..? Jaha.. jag har fått uppfattningen att personlig kod skulle sluta fungera nu i mars...! Är det inte så så e det ju inte så akut :)

walle89 commented 9 years ago

Det finns inga säkra uppgifter om när den försvinner, bara att den förr eller senare kommer att försvinna.

walle89 commented 8 years ago

Jag har nu lagt upp en fungerande lösning under trädet NoAuth. Denna kör Guzzle 6 och därmed finns kravet PHP 5.5.

För den som vill testa, följ dessa instruktioner:

Steg 1: Skapa en ny tom mapp med följande composer.json innehåll:

{
    "require": {
        "walle89/swedbank-json": "dev-NoAuth"
    }
}

Steg 2: Följ instruktionerna i övrigt enligt README.ME.

Steg 3: För testning använd följande kod (ändra 'subscribeID' till den prenumeration av konto som önskas eventuellt BANK_APP till den som du använder):

<?php
require_once '../vendor/autoload.php';

define('BANK_APP', 'swedbank');

echo '
<pre>';
try {
    $auth = new SwedbankJson\Auth\UnAuth(BANK_APP);
    $bankConn   = new SwedbankJson\SwedbankJson($auth);
} // Fel av användare
catch (SwedbankJson\UserException $e) {
    echo $e->getMessage();
    exit;
} // Systemfel och övriga fel
catch (Exception $e) {
    echo 'Swedbank-fel: ' . $e->getMessage() . ' (Err #' . $e->getCode() . ")\r\n" . $e->getTraceAsString();
    exit;
}

var_dump($bankConn->quickBalance('*subscribeID*')); # Ersätt mig

Steg 4: Om inte redan har ett subscribeID har jag gjort ett verktyg för att enkelt ta reda på det. Efter man följt instruktionerna är det bara att kopiera och ersätta raden som det står "Ersätt mig". Just denna kod använder sig av mobilt BankID, men du kan anpassa det för att köra med bankdosa eller med personlig kod (om den tillåter att skapa snabbsaldo):

<?php
session_start();
require_once '../vendor/autoload.php';

define('USERNAME', 198903060000);   // Personnummer
define('BANK_APP', 'swedbank');

$auth = null;
try
{
    // Utloggning
    if (isset($_GET['logout']))
    {
        $auth = unserialize($_SESSION['swedbankjson_auth']);
        $auth->terminate();
        exit('Du är nu utloggad');
    }

    // Steg 1 - Inled auth
    if (!isset($_SESSION['swedbankjson_auth']))
    {
        $auth = new SwedbankJson\Auth\MobileBankID(BANK_APP, USERNAME);
        $auth->initAuth();
        exit('Öppna BankID-appen och godkänn inloggingen. Därefter uppdatera sidan.');
    }

    // Steg 2 - Verifiera inlogging
    $auth = unserialize($_SESSION['swedbankjson_auth']);
    if (!$auth->verify())
        exit("Du uppdaterade sidan, men inloggningen är inte godkänd i BankID-appen. När det är gjort, försök igen.");

} // Systemfel och övriga fel
catch (Exception $e) {
    echo '<pre>Fel: ' . $e->getMessage() . ' (Err #' . $e->getCode() . ")\r\n" . $e->getTraceAsString().'</pre>';
}

// Steg 3 - Genomför
$bankConn = new SwedbankJson\SwedbankJson($auth);

if(count($_POST))
{
    $subscribeAccount = filter_input(INPUT_POST, 'account', FILTER_SANITIZE_FULL_SPECIAL_CHARS);

    $subInfo = $bankConn->quickBalanceSubscription($subscribeAccount);

    exit("var_dump(\$bankConn->quickBalance('{$subInfo->subscriptionId}'));");
}

$accounts = $bankConn->quickBalanceAccounts();
?>
<!doctype html>
<html lang="sv">
<head>
    <meta charset="UTF-8">
    <title>Snabbsaldo</title>
</head>
<body>
    <form action="" method="post">
        <select name="account" id="account">
            <option value="">Välj konto</option>
            <?php foreach($accounts->accounts as $a): ?>
            <option value="<?=$a->quickbalanceSubscription->id?>"><?=$a->name?></option>
            <?php endforeach; ?>
        </select><br>
        <button>Prenumerera på snabbsaldo för konto</button>
    </form>
    <a href="?logout">Logga ut</a>
</body>
</html>

Steg 5: Se ditt saldo genom att ladda sidan med kodexempel 1. Tänk dock på att Swedbank bara tillåter ett anrop var 10:e sekund. Tätare intervall ger ett felmeddelande.

Säg till om det funkar, eller kontakta mig om en felrapport dyker upp.

walle89 commented 8 years ago

I och med version 0.6.0 släpptes nu finns nu stöd bland annat snabbsaldo utan krav på inlogging. Med anledning av detta stänger jag nu denna issue.