Skip to content
This repository has been archived by the owner on Feb 20, 2024. It is now read-only.

Latest commit

 

History

History
70 lines (53 loc) · 2 KB

README.md

File metadata and controls

70 lines (53 loc) · 2 KB

tinkoff-bank-rs

Some parts of API used by Tinkoff mobile app.

Implementation is very rough, so PRs and issues are welcome.

Crates API Docs LICENSE

Basic usage

use chrono::{DateTime, Utc};
use std::io;
use tinkoff_bank::Client;
use uuid::Uuid;


#[tokio::main]
async fn main() {
    let client = Client::default();

    // Generate random device id
    let device_id = Uuid::new_v4().to_string();

    // Request new session
    let session = client.request_session(&device_id).await;
    let session_id = session.payload.unwrap().id;

    // Start auth by phone
    let phone = input("Enter phone number, like +79998887766: ");
    let confirmation_details = client.auth_by_phone(&device_id, &session_id, &phone).await;
    let operation_ticket = confirmation_details.operation_ticket.unwrap();

    // Confirm auth by phone
    let sms_code = input("Enter the code from sms: ");
    client.confirm_auth_by_phone(&device_id, &session_id, &operation_ticket, &sms_code).await;

    // Auth by password too, it is required to get full access
    let password = input("Enter your password: ");
    client.auth_by_password(&device_id, &session_id, &password).await;

    // List accounts
    let accounts = client.list_accounts(&device_id, &session_id).await
        .payload
        .unwrap();

    // List operations
    let account = &accounts[0];
    client
        .list_operations(
            &device_id,
            &session_id,
            &account.id,
            "2021-02-01T00:00:00Z".parse::<DateTime<Utc>>().unwrap(),
            "2021-02-28T00:00:00Z".parse::<DateTime<Utc>>().unwrap()
        )
        .await
}

fn input(text: &str) -> String {
    println!("{}", text);

    let mut buffer = String::new();
    io::stdin().read_line(&mut buffer).unwrap();

    buffer.trim().to_owned()
}